From 62cd046adea742fa50b9315846a0a88eb70d62fa Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 25 Jul 2024 10:09:17 +0000 Subject: [PATCH 01/42] Updated libffi sources to 3.4.6. --- src/libffi/libffi-3.4.4/doc/stamp-vti | 4 - src/libffi/libffi-3.4.4/doc/version.texi | 4 - src/libffi/libffi-3.4.4/src/arc/arcompact.S | 135 -- src/libffi/libffi-3.4.4/src/arc/ffi.c | 266 ---- src/libffi/libffi-3.4.4/testsuite/Makefile.am | 133 -- .../{libffi-3.4.4 => libffi-3.4.6}/ChangeLog | 1085 +++++++++++++++++ .../ChangeLog.old | 0 .../{libffi-3.4.4 => libffi-3.4.6}/LICENSE | 2 +- .../LICENSE-BUILDTOOLS | 0 .../Makefile.am | 4 +- .../Makefile.in | 41 +- .../{libffi-3.4.4 => libffi-3.4.6}/README.md | 25 +- .../acinclude.m4 | 0 .../{libffi-3.4.4 => libffi-3.4.6}/aclocal.m4 | 0 .../{libffi-3.4.4 => libffi-3.4.6}/compile | 0 .../config.guess | 0 .../{libffi-3.4.4 => libffi-3.4.6}/config.sub | 6 +- .../{libffi-3.4.4 => libffi-3.4.6}/configure | 420 +------ .../configure.ac | 10 +- .../configure.host | 8 +- .../{libffi-3.4.4 => libffi-3.4.6}/depcomp | 0 .../doc/Makefile.am | 0 .../doc/Makefile.in | 1 - .../doc/libffi.info | 467 +++---- .../doc/libffi.pdf | Bin 171524 -> 171522 bytes .../doc/libffi.texi | 2 +- .../doc/mdate-sh | 0 src/libffi/libffi-3.4.6/doc/stamp-vti | 4 + .../doc/texinfo.tex | 0 src/libffi/libffi-3.4.6/doc/version.texi | 4 + .../fficonfig.h.in | 40 +- .../generate-darwin-source-and-headers.py | 25 +- .../include/Makefile.am | 0 .../include/Makefile.in | 1 - .../include/ffi.h.in | 35 +- .../include/ffi_cfi.h | 0 .../include/ffi_common.h | 10 +- .../include/tramp.h | 0 .../{libffi-3.4.4 => libffi-3.4.6}/install-sh | 0 .../libffi.map.in | 5 + .../libffi.pc.in | 0 .../libffi.xcodeproj/project.pbxproj | 0 .../libtool-ldflags | 0 .../libtool-version | 2 +- .../{libffi-3.4.4 => libffi-3.4.6}/ltmain.sh | 0 .../m4/asmcfi.m4 | 0 .../m4/ax_cc_maxopt.m4 | 0 .../m4/ax_cflags_warn_all.m4 | 0 .../m4/ax_check_compile_flag.m4 | 0 .../m4/ax_compiler_vendor.m4 | 0 .../m4/ax_configure_args.m4 | 0 .../m4/ax_enable_builddir.m4 | 0 .../m4/ax_gcc_archflag.m4 | 0 .../m4/ax_gcc_x86_cpuid.m4 | 0 .../m4/ax_prepend_flag.m4 | 0 .../m4/ax_require_defined.m4 | 0 .../m4/libtool.m4 | 0 .../m4/ltoptions.m4 | 0 .../m4/ltsugar.m4 | 0 .../m4/ltversion.m4 | 0 .../m4/lt~obsolete.m4 | 0 .../make_sunver.pl | 0 .../man/Makefile.am | 0 .../man/Makefile.in | 1 - .../{libffi-3.4.4 => libffi-3.4.6}/man/ffi.3 | 0 .../man/ffi_call.3 | 0 .../man/ffi_prep_cif.3 | 0 .../man/ffi_prep_cif_var.3 | 0 .../{libffi-3.4.4 => libffi-3.4.6}/missing | 0 .../msvc_build/aarch64/Ffi_staticLib.sln | 0 .../msvc_build/aarch64/Ffi_staticLib.vcxproj | 0 .../aarch64/Ffi_staticLib.vcxproj.filters | 0 .../aarch64/Ffi_staticLib.vcxproj.user | 0 .../msvc_build/aarch64/aarch64_include/ffi.h | 2 +- .../aarch64/aarch64_include/fficonfig.h | 0 .../{libffi-3.4.4 => libffi-3.4.6}/msvcc.sh | 0 .../src/aarch64/ffi.c | 39 +- .../src/aarch64/ffitarget.h | 0 .../src/aarch64/internal.h | 0 .../src/aarch64/sysv.S | 252 +++- .../src/aarch64/win64_armasm.S | 0 .../src/alpha/ffi.c | 0 .../src/alpha/ffitarget.h | 0 .../src/alpha/internal.h | 0 .../src/alpha/osf.S | 0 src/libffi/libffi-3.4.6/src/arc/arcompact.S | 210 ++++ src/libffi/libffi-3.4.6/src/arc/ffi.c | 443 +++++++ .../src/arc/ffitarget.h | 14 + .../src/arm/ffi.c | 0 .../src/arm/ffitarget.h | 0 .../src/arm/internal.h | 0 .../src/arm/sysv.S | 33 - .../src/arm/sysv_msvc_arm32.S | 0 .../src/avr32/ffi.c | 0 .../src/avr32/ffitarget.h | 0 .../src/avr32/sysv.S | 0 .../src/bfin/ffi.c | 0 .../src/bfin/ffitarget.h | 0 .../src/bfin/sysv.S | 0 .../src/closures.c | 29 +- .../src/cris/ffi.c | 0 .../src/cris/ffitarget.h | 0 .../src/cris/sysv.S | 0 .../src/csky/ffi.c | 0 .../src/csky/ffitarget.h | 0 .../src/csky/sysv.S | 0 .../src/debug.c | 4 +- .../src/dlmalloc.c | 2 +- .../src/frv/eabi.S | 0 .../src/frv/ffi.c | 0 .../src/frv/ffitarget.h | 0 .../src/ia64/ffi.c | 12 + .../src/ia64/ffitarget.h | 0 .../src/ia64/ia64_flags.h | 0 .../src/ia64/unix.S | 22 +- .../src/java_raw_api.c | 0 .../src/kvx/asm.h | 0 .../src/kvx/ffi.c | 0 .../src/kvx/ffitarget.h | 0 .../src/kvx/sysv.S | 0 .../src/loongarch64/ffi.c | 3 + .../src/loongarch64/ffitarget.h | 0 .../src/loongarch64/sysv.S | 0 .../src/m32r/ffi.c | 0 .../src/m32r/ffitarget.h | 0 .../src/m32r/sysv.S | 0 .../src/m68k/ffi.c | 0 .../src/m68k/ffitarget.h | 0 .../src/m68k/sysv.S | 0 .../src/m88k/ffi.c | 0 .../src/m88k/ffitarget.h | 0 .../src/m88k/obsd.S | 0 .../src/metag/ffi.c | 0 .../src/metag/ffitarget.h | 0 .../src/metag/sysv.S | 0 .../src/microblaze/ffi.c | 0 .../src/microblaze/ffitarget.h | 0 .../src/microblaze/sysv.S | 0 .../src/mips/ffi.c | 16 +- .../src/mips/ffitarget.h | 0 .../src/mips/n32.S | 79 +- .../src/mips/o32.S | 0 .../src/moxie/eabi.S | 0 .../src/moxie/ffi.c | 0 .../src/moxie/ffitarget.h | 0 .../src/nios2/ffi.c | 0 .../src/nios2/ffitarget.h | 0 .../src/nios2/sysv.S | 0 .../src/or1k/ffi.c | 0 .../src/or1k/ffitarget.h | 0 .../src/or1k/sysv.S | 0 .../src/pa/ffi.c | 65 +- .../src/pa/ffitarget.h | 30 +- .../src/pa/hpux32.S | 119 +- src/libffi/libffi-3.4.6/src/pa/hpux64.S | 681 +++++++++++ .../src/pa/linux.S | 117 +- .../src/powerpc/aix.S | 0 .../src/powerpc/aix_closure.S | 0 .../src/powerpc/asm.h | 0 .../src/powerpc/darwin.S | 0 .../src/powerpc/darwin_closure.S | 0 .../src/powerpc/ffi.c | 0 .../src/powerpc/ffi_darwin.c | 60 +- .../src/powerpc/ffi_linux64.c | 0 .../src/powerpc/ffi_powerpc.h | 0 .../src/powerpc/ffi_sysv.c | 0 .../src/powerpc/ffitarget.h | 0 .../src/powerpc/linux64.S | 0 .../src/powerpc/linux64_closure.S | 0 .../src/powerpc/ppc_closure.S | 0 .../src/powerpc/sysv.S | 0 .../src/powerpc/t-aix | 0 .../src/prep_cif.c | 2 +- .../src/raw_api.c | 0 .../src/riscv/ffi.c | 0 .../src/riscv/ffitarget.h | 0 .../src/riscv/sysv.S | 0 .../src/s390/ffi.c | 0 .../src/s390/ffitarget.h | 0 .../src/s390/internal.h | 0 .../src/s390/sysv.S | 0 .../src/sh/ffi.c | 0 .../src/sh/ffitarget.h | 0 .../src/sh/sysv.S | 0 .../src/sh64/ffi.c | 0 .../src/sh64/ffitarget.h | 0 .../src/sh64/sysv.S | 0 .../src/sparc/ffi.c | 0 .../src/sparc/ffi64.c | 8 +- .../src/sparc/ffitarget.h | 0 .../src/sparc/internal.h | 0 .../src/sparc/v8.S | 0 .../src/sparc/v9.S | 0 .../src/tile/ffi.c | 0 .../src/tile/ffitarget.h | 0 .../src/tile/tile.S | 0 .../src/tramp.c | 13 +- .../src/types.c | 10 +- .../src/vax/elfbsd.S | 0 .../src/vax/ffi.c | 0 .../src/vax/ffitarget.h | 0 src/libffi/libffi-3.4.6/src/wasm32/ffi.c | 947 ++++++++++++++ .../libffi-3.4.6/src/wasm32/ffitarget.h | 62 + .../src/x86/asmnames.h | 0 .../src/x86/ffi.c | 0 .../src/x86/ffi64.c | 0 .../src/x86/ffitarget.h | 0 .../src/x86/ffiw64.c | 2 +- .../src/x86/internal.h | 0 .../src/x86/internal64.h | 0 .../src/x86/sysv.S | 121 +- .../src/x86/sysv_intel.S | 0 .../src/x86/unix64.S | 0 .../src/x86/win64.S | 0 .../src/x86/win64_intel.S | 0 .../src/xtensa/ffi.c | 0 .../src/xtensa/ffitarget.h | 0 .../src/xtensa/sysv.S | 0 src/libffi/libffi-3.4.6/testsuite/Makefile.am | 87 ++ .../testsuite/Makefile.in | 205 ++-- .../testsuite/config/default.exp | 0 .../testsuite/emscripten/build-tests.sh | 54 + .../testsuite/emscripten/build.sh | 63 + .../testsuite/emscripten/conftest.py | 86 ++ .../testsuite/emscripten/node-tests.sh | 48 + .../testsuite/emscripten/test.html | 7 + .../testsuite/emscripten/test_libffi.py | 51 + .../testsuite/lib/libffi.exp | 20 +- .../testsuite/lib/target-libpath.exp | 0 .../testsuite/lib/wrapper.exp | 0 .../testsuite/libffi.bhaible/Makefile | 0 .../testsuite/libffi.bhaible/README | 0 .../testsuite/libffi.bhaible/alignof.h | 0 .../testsuite/libffi.bhaible/bhaible.exp | 0 .../testsuite/libffi.bhaible/test-call.c | 0 .../testsuite/libffi.bhaible/test-callback.c | 0 .../testsuite/libffi.bhaible/testcases.c | 0 .../testsuite/libffi.call/align_mixed.c | 0 .../testsuite/libffi.call/align_stdcall.c | 0 .../testsuite/libffi.call/bpo_38748.c} | 0 .../testsuite/libffi.call/call.exp | 0 .../testsuite/libffi.call/callback.c | 99 ++ .../testsuite/libffi.call/callback2.c | 108 ++ .../testsuite/libffi.call/callback3.c | 114 ++ .../testsuite/libffi.call/callback4.c | 119 ++ .../testsuite/libffi.call/err_bad_typedef.c | 0 .../testsuite/libffi.call/ffitest.h | 0 .../testsuite/libffi.call/float.c | 0 .../testsuite/libffi.call/float1.c | 0 .../testsuite/libffi.call/float2.c | 0 .../testsuite/libffi.call/float3.c | 0 .../testsuite/libffi.call/float4.c | 0 .../testsuite/libffi.call/float_va.c | 0 .../testsuite/libffi.call/many.c | 0 .../testsuite/libffi.call/many2.c | 0 .../testsuite/libffi.call/many_double.c | 0 .../testsuite/libffi.call/many_mixed.c | 0 .../testsuite/libffi.call/negint.c | 0 .../testsuite/libffi.call/offsets.c | 0 .../testsuite/libffi.call/pr1172638.c | 0 .../testsuite/libffi.call/promotion.c | 0 .../testsuite/libffi.call/pyobjc_tc.c | 0 .../testsuite/libffi.call/return_dbl.c | 0 .../testsuite/libffi.call/return_dbl1.c | 0 .../testsuite/libffi.call/return_dbl2.c | 0 .../testsuite/libffi.call/return_fl.c | 0 .../testsuite/libffi.call/return_fl1.c | 0 .../testsuite/libffi.call/return_fl2.c | 0 .../testsuite/libffi.call/return_fl3.c | 0 .../testsuite/libffi.call/return_ldl.c | 0 .../testsuite/libffi.call/return_ll.c | 0 .../testsuite/libffi.call/return_ll1.c | 0 .../testsuite/libffi.call/return_sc.c | 0 .../testsuite/libffi.call/return_sl.c | 0 .../testsuite/libffi.call/return_uc.c | 0 .../testsuite/libffi.call/return_ul.c | 0 .../testsuite/libffi.call/s55.c | 0 .../testsuite/libffi.call/strlen.c | 0 .../testsuite/libffi.call/strlen2.c | 0 .../testsuite/libffi.call/strlen3.c | 0 .../testsuite/libffi.call/strlen4.c | 0 .../testsuite/libffi.call/struct1.c | 0 .../testsuite/libffi.call/struct10.c | 0 .../testsuite/libffi.call/struct2.c | 0 .../testsuite/libffi.call/struct3.c | 0 .../testsuite/libffi.call/struct4.c | 0 .../testsuite/libffi.call/struct5.c | 0 .../testsuite/libffi.call/struct6.c | 0 .../testsuite/libffi.call/struct7.c | 0 .../testsuite/libffi.call/struct8.c | 0 .../testsuite/libffi.call/struct9.c | 0 .../testsuite/libffi.call/struct_by_value_2.c | 0 .../testsuite/libffi.call/struct_by_value_3.c | 0 .../libffi.call/struct_by_value_3f.c | 65 + .../testsuite/libffi.call/struct_by_value_4.c | 0 .../libffi.call/struct_by_value_4f.c | 67 + .../libffi.call/struct_by_value_big.c | 0 .../libffi.call/struct_by_value_small.c | 0 .../testsuite/libffi.call/struct_return_2H.c | 63 + .../testsuite/libffi.call/struct_return_8H.c | 90 ++ .../testsuite/libffi.call/uninitialized.c | 0 .../testsuite/libffi.call/va_1.c | 0 .../testsuite/libffi.call/va_2.c | 0 .../testsuite/libffi.call/va_3.c | 0 .../testsuite/libffi.call/va_struct1.c | 0 .../testsuite/libffi.call/va_struct2.c | 0 .../testsuite/libffi.call/va_struct3.c | 0 .../testsuite/libffi.closures/closure.exp | 0 .../testsuite/libffi.closures/closure_fn0.c | 0 .../testsuite/libffi.closures/closure_fn1.c | 0 .../testsuite/libffi.closures/closure_fn2.c | 0 .../testsuite/libffi.closures/closure_fn3.c | 0 .../testsuite/libffi.closures/closure_fn4.c | 0 .../testsuite/libffi.closures/closure_fn5.c | 0 .../testsuite/libffi.closures/closure_fn6.c | 0 .../libffi.closures/closure_loc_fn0.c | 7 +- .../libffi.closures/closure_simple.c | 0 .../testsuite/libffi.closures/cls_12byte.c | 0 .../testsuite/libffi.closures/cls_16byte.c | 0 .../testsuite/libffi.closures/cls_18byte.c | 0 .../testsuite/libffi.closures/cls_19byte.c | 0 .../testsuite/libffi.closures/cls_1_1byte.c | 0 .../testsuite/libffi.closures/cls_20byte.c | 0 .../testsuite/libffi.closures/cls_20byte1.c | 0 .../testsuite/libffi.closures/cls_24byte.c | 0 .../testsuite/libffi.closures/cls_2byte.c | 0 .../testsuite/libffi.closures/cls_3_1byte.c | 0 .../testsuite/libffi.closures/cls_3byte1.c | 0 .../testsuite/libffi.closures/cls_3byte2.c | 0 .../testsuite/libffi.closures/cls_3float.c | 0 .../testsuite/libffi.closures/cls_4_1byte.c | 0 .../testsuite/libffi.closures/cls_4byte.c | 0 .../testsuite/libffi.closures/cls_5_1_byte.c | 0 .../testsuite/libffi.closures/cls_5byte.c | 0 .../testsuite/libffi.closures/cls_64byte.c | 0 .../testsuite/libffi.closures/cls_6_1_byte.c | 0 .../testsuite/libffi.closures/cls_6byte.c | 0 .../testsuite/libffi.closures/cls_7_1_byte.c | 0 .../testsuite/libffi.closures/cls_7byte.c | 0 .../testsuite/libffi.closures/cls_8byte.c | 0 .../testsuite/libffi.closures/cls_9byte1.c | 0 .../testsuite/libffi.closures/cls_9byte2.c | 0 .../libffi.closures/cls_align_double.c | 0 .../libffi.closures/cls_align_float.c | 0 .../libffi.closures/cls_align_longdouble.c | 0 .../cls_align_longdouble_split.c | 0 .../cls_align_longdouble_split2.c | 0 .../libffi.closures/cls_align_pointer.c | 0 .../libffi.closures/cls_align_sint16.c | 0 .../libffi.closures/cls_align_sint32.c | 0 .../libffi.closures/cls_align_sint64.c | 0 .../libffi.closures/cls_align_uint16.c | 0 .../libffi.closures/cls_align_uint32.c | 0 .../libffi.closures/cls_align_uint64.c | 0 .../libffi.closures/cls_dbls_struct.c | 0 .../testsuite/libffi.closures/cls_double.c | 0 .../testsuite/libffi.closures/cls_double_va.c | 0 .../testsuite/libffi.closures/cls_float.c | 0 .../libffi.closures/cls_longdouble.c | 0 .../libffi.closures/cls_longdouble_va.c | 13 +- .../libffi.closures/cls_many_mixed_args.c | 0 .../cls_many_mixed_float_double.c | 0 .../libffi.closures/cls_multi_schar.c | 2 +- .../libffi.closures/cls_multi_sshort.c | 2 +- .../libffi.closures/cls_multi_sshortchar.c | 0 .../libffi.closures/cls_multi_uchar.c | 0 .../libffi.closures/cls_multi_ushort.c | 0 .../libffi.closures/cls_multi_ushortchar.c | 0 .../testsuite/libffi.closures/cls_pointer.c | 0 .../libffi.closures/cls_pointer_stack.c | 0 .../testsuite/libffi.closures/cls_schar.c | 0 .../testsuite/libffi.closures/cls_sint.c | 0 .../testsuite/libffi.closures/cls_sshort.c | 0 .../libffi.closures/cls_struct_va1.c | 0 .../testsuite/libffi.closures/cls_uchar.c | 0 .../testsuite/libffi.closures/cls_uint.c | 0 .../testsuite/libffi.closures/cls_uint_va.c | 0 .../testsuite/libffi.closures/cls_ulong_va.c | 0 .../testsuite/libffi.closures/cls_ulonglong.c | 0 .../testsuite/libffi.closures/cls_ushort.c | 0 .../testsuite/libffi.closures/err_bad_abi.c | 0 .../testsuite/libffi.closures/ffitest.h | 0 .../testsuite/libffi.closures/huge_struct.c | 2 +- .../testsuite/libffi.closures/nested_struct.c | 0 .../libffi.closures/nested_struct1.c | 0 .../libffi.closures/nested_struct10.c | 0 .../libffi.closures/nested_struct11.c | 0 .../libffi.closures/nested_struct12.c | 0 .../libffi.closures/nested_struct13.c | 0 .../libffi.closures/nested_struct2.c | 0 .../libffi.closures/nested_struct3.c | 0 .../libffi.closures/nested_struct4.c | 0 .../libffi.closures/nested_struct5.c | 0 .../libffi.closures/nested_struct6.c | 0 .../libffi.closures/nested_struct7.c | 0 .../libffi.closures/nested_struct8.c | 0 .../libffi.closures/nested_struct9.c | 0 .../testsuite/libffi.closures/problem1.c | 0 .../libffi.closures/single_entry_structs1.c | 0 .../libffi.closures/single_entry_structs2.c | 0 .../libffi.closures/single_entry_structs3.c | 0 .../testsuite/libffi.closures/stret_large.c | 0 .../testsuite/libffi.closures/stret_large2.c | 0 .../testsuite/libffi.closures/stret_medium.c | 0 .../testsuite/libffi.closures/stret_medium2.c | 0 .../testsuite/libffi.closures/testclosure.c | 0 .../testsuite/libffi.closures/unwindtest.cc | 1 + .../libffi.closures/unwindtest_ffi_call.cc | 1 + .../libffi.complex/cls_align_complex.inc | 0 .../libffi.complex/cls_align_complex_double.c | 0 .../libffi.complex/cls_align_complex_float.c | 0 .../cls_align_complex_longdouble.c | 0 .../testsuite/libffi.complex/cls_complex.inc | 0 .../libffi.complex/cls_complex_double.c | 0 .../libffi.complex/cls_complex_float.c | 0 .../libffi.complex/cls_complex_longdouble.c | 0 .../libffi.complex/cls_complex_struct.inc | 0 .../cls_complex_struct_double.c | 0 .../libffi.complex/cls_complex_struct_float.c | 0 .../cls_complex_struct_longdouble.c | 0 .../libffi.complex/cls_complex_va.inc | 0 .../libffi.complex/cls_complex_va_double.c | 0 .../libffi.complex/cls_complex_va_float.c | 0 .../cls_complex_va_longdouble.c | 0 .../testsuite/libffi.complex/complex.exp | 0 .../testsuite/libffi.complex/complex.inc | 0 .../libffi.complex/complex_defs_double.inc | 0 .../libffi.complex/complex_defs_float.inc | 0 .../complex_defs_longdouble.inc | 0 .../testsuite/libffi.complex/complex_double.c | 0 .../testsuite/libffi.complex/complex_float.c | 0 .../testsuite/libffi.complex/complex_int.c | 0 .../libffi.complex/complex_longdouble.c | 0 .../testsuite/libffi.complex/ffitest.h | 0 .../testsuite/libffi.complex/many_complex.inc | 0 .../libffi.complex/many_complex_double.c | 0 .../libffi.complex/many_complex_float.c | 0 .../libffi.complex/many_complex_longdouble.c | 0 .../libffi.complex/return_complex.inc | 0 .../libffi.complex/return_complex1.inc | 0 .../libffi.complex/return_complex1_double.c | 0 .../libffi.complex/return_complex1_float.c | 0 .../return_complex1_longdouble.c | 0 .../libffi.complex/return_complex2.inc | 0 .../libffi.complex/return_complex2_double.c | 0 .../libffi.complex/return_complex2_float.c | 0 .../return_complex2_longdouble.c | 0 .../libffi.complex/return_complex_double.c | 0 .../libffi.complex/return_complex_float.c | 0 .../return_complex_longdouble.c | 0 .../testsuite/libffi.go/aa-direct.c | 0 .../testsuite/libffi.go/closure1.c | 0 .../testsuite/libffi.go/ffitest.h | 0 .../testsuite/libffi.go/go.exp | 0 .../testsuite/libffi.go/static-chain.h | 0 455 files changed, 5771 insertions(+), 1740 deletions(-) delete mode 100644 src/libffi/libffi-3.4.4/doc/stamp-vti delete mode 100644 src/libffi/libffi-3.4.4/doc/version.texi delete mode 100644 src/libffi/libffi-3.4.4/src/arc/arcompact.S delete mode 100644 src/libffi/libffi-3.4.4/src/arc/ffi.c delete mode 100644 src/libffi/libffi-3.4.4/testsuite/Makefile.am rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/ChangeLog (92%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/ChangeLog.old (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/LICENSE (94%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/LICENSE-BUILDTOOLS (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/Makefile.am (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/Makefile.in (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/README.md (95%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/acinclude.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/aclocal.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/compile (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/config.guess (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/config.sub (99%) mode change 100644 => 100755 rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/configure (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/configure.ac (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/configure.host (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/depcomp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/Makefile.am (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/Makefile.in (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/libffi.info (67%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/libffi.pdf (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/libffi.texi (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/mdate-sh (100%) create mode 100644 src/libffi/libffi-3.4.6/doc/stamp-vti rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/doc/texinfo.tex (100%) create mode 100644 src/libffi/libffi-3.4.6/doc/version.texi rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/fficonfig.h.in (81%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/generate-darwin-source-and-headers.py (94%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/include/Makefile.am (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/include/Makefile.in (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/include/ffi.h.in (95%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/include/ffi_cfi.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/include/ffi_common.h (93%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/include/tramp.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/install-sh (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/libffi.map.in (95%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/libffi.pc.in (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/libffi.xcodeproj/project.pbxproj (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/libtool-ldflags (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/libtool-version (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/ltmain.sh (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/asmcfi.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_cc_maxopt.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_cflags_warn_all.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_check_compile_flag.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_compiler_vendor.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_configure_args.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_enable_builddir.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_gcc_archflag.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_gcc_x86_cpuid.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_prepend_flag.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ax_require_defined.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/libtool.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ltoptions.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ltsugar.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/ltversion.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/m4/lt~obsolete.m4 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/make_sunver.pl (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/man/Makefile.am (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/man/Makefile.in (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/man/ffi.3 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/man/ffi_call.3 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/man/ffi_prep_cif.3 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/man/ffi_prep_cif_var.3 (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/missing (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvc_build/aarch64/Ffi_staticLib.sln (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvc_build/aarch64/Ffi_staticLib.vcxproj (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvc_build/aarch64/Ffi_staticLib.vcxproj.user (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvc_build/aarch64/aarch64_include/ffi.h (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvc_build/aarch64/aarch64_include/fficonfig.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/msvcc.sh (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/aarch64/ffi.c (97%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/aarch64/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/aarch64/internal.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/aarch64/sysv.S (80%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/aarch64/win64_armasm.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/alpha/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/alpha/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/alpha/internal.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/alpha/osf.S (100%) create mode 100644 src/libffi/libffi-3.4.6/src/arc/arcompact.S create mode 100644 src/libffi/libffi-3.4.6/src/arc/ffi.c rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/arc/ffitarget.h (89%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/arm/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/arm/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/arm/internal.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/arm/sysv.S (96%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/arm/sysv_msvc_arm32.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/avr32/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/avr32/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/avr32/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/bfin/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/bfin/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/bfin/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/closures.c (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/cris/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/cris/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/cris/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/csky/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/csky/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/csky/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/debug.c (94%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/dlmalloc.c (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/frv/eabi.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/frv/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/frv/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/ia64/ffi.c (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/ia64/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/ia64/ia64_flags.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/ia64/unix.S (96%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/java_raw_api.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/kvx/asm.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/kvx/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/kvx/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/kvx/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/loongarch64/ffi.c (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/loongarch64/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/loongarch64/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m32r/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m32r/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m32r/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m68k/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m68k/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m68k/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m88k/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m88k/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/m88k/obsd.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/metag/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/metag/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/metag/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/microblaze/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/microblaze/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/microblaze/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/mips/ffi.c (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/mips/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/mips/n32.S (93%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/mips/o32.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/moxie/eabi.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/moxie/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/moxie/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/nios2/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/nios2/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/nios2/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/or1k/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/or1k/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/or1k/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/pa/ffi.c (93%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/pa/ffitarget.h (77%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/pa/hpux32.S (88%) create mode 100644 src/libffi/libffi-3.4.6/src/pa/hpux64.S rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/pa/linux.S (88%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/aix.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/aix_closure.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/asm.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/darwin.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/darwin_closure.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ffi_darwin.c (96%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ffi_linux64.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ffi_powerpc.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ffi_sysv.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/linux64.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/linux64_closure.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/ppc_closure.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/powerpc/t-aix (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/prep_cif.c (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/raw_api.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/riscv/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/riscv/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/riscv/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/s390/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/s390/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/s390/internal.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/s390/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sh/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sh/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sh/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sh64/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sh64/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sh64/sysv.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sparc/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sparc/ffi64.c (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sparc/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sparc/internal.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sparc/v8.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/sparc/v9.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/tile/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/tile/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/tile/tile.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/tramp.c (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/types.c (95%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/vax/elfbsd.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/vax/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/vax/ffitarget.h (100%) create mode 100644 src/libffi/libffi-3.4.6/src/wasm32/ffi.c create mode 100644 src/libffi/libffi-3.4.6/src/wasm32/ffitarget.h rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/asmnames.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/ffi64.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/ffiw64.c (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/internal.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/internal64.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/sysv.S (90%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/sysv_intel.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/unix64.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/win64.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/x86/win64_intel.S (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/xtensa/ffi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/xtensa/ffitarget.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/src/xtensa/sysv.S (100%) create mode 100644 src/libffi/libffi-3.4.6/testsuite/Makefile.am rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/Makefile.in (68%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/config/default.exp (100%) create mode 100755 src/libffi/libffi-3.4.6/testsuite/emscripten/build-tests.sh create mode 100755 src/libffi/libffi-3.4.6/testsuite/emscripten/build.sh create mode 100644 src/libffi/libffi-3.4.6/testsuite/emscripten/conftest.py create mode 100755 src/libffi/libffi-3.4.6/testsuite/emscripten/node-tests.sh create mode 100644 src/libffi/libffi-3.4.6/testsuite/emscripten/test.html create mode 100644 src/libffi/libffi-3.4.6/testsuite/emscripten/test_libffi.py rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/lib/libffi.exp (96%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/lib/target-libpath.exp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/lib/wrapper.exp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/Makefile (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/README (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/alignof.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/bhaible.exp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/test-call.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/test-callback.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.bhaible/testcases.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/align_mixed.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/align_stdcall.c (100%) rename src/libffi/{libffi-3.4.4/testsuite/libffi.call/bpo-38748.c => libffi-3.4.6/testsuite/libffi.call/bpo_38748.c} (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/call.exp (100%) create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/callback.c create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/callback2.c create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/callback3.c create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/callback4.c rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/err_bad_typedef.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/ffitest.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/float1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/float2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/float3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/float4.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/float_va.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/many.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/many2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/many_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/many_mixed.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/negint.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/offsets.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/pr1172638.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/promotion.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/pyobjc_tc.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_dbl.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_dbl1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_dbl2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_fl.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_fl1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_fl2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_fl3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_ldl.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_ll.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_ll1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_sc.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_sl.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_uc.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/return_ul.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/s55.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/strlen.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/strlen2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/strlen3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/strlen4.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct10.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct4.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct5.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct6.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct7.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct8.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct9.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct_by_value_2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct_by_value_3.c (100%) create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_3f.c rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct_by_value_4.c (100%) create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_4f.c rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct_by_value_big.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/struct_by_value_small.c (100%) create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_2H.c create mode 100644 src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_8H.c rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/uninitialized.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/va_1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/va_2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/va_3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/va_struct1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/va_struct2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.call/va_struct3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure.exp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn0.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn4.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn5.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_fn6.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_loc_fn0.c (96%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/closure_simple.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_12byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_16byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_18byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_19byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_1_1byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_20byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_20byte1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_24byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_2byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_3_1byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_3byte1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_3byte2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_3float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_4_1byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_4byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_5_1_byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_5byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_64byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_6_1_byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_6byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_7_1_byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_7byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_8byte.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_9byte1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_9byte2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_longdouble_split.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_longdouble_split2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_pointer.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_sint16.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_sint32.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_sint64.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_uint16.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_uint32.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_align_uint64.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_dbls_struct.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_double_va.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_longdouble_va.c (86%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_many_mixed_args.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_many_mixed_float_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_multi_schar.c (97%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_multi_sshort.c (97%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_multi_sshortchar.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_multi_uchar.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_multi_ushort.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_multi_ushortchar.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_pointer.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_pointer_stack.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_schar.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_sint.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_sshort.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_struct_va1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_uchar.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_uint.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_uint_va.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_ulong_va.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_ulonglong.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/cls_ushort.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/err_bad_abi.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/ffitest.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/huge_struct.c (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct10.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct11.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct12.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct13.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct4.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct5.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct6.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct7.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct8.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/nested_struct9.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/problem1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/single_entry_structs1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/single_entry_structs2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/single_entry_structs3.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/stret_large.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/stret_large2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/stret_medium.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/stret_medium2.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/testclosure.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/unwindtest.cc (99%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.closures/unwindtest_ffi_call.cc (98%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_align_complex.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_align_complex_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_align_complex_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_align_complex_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_struct.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_struct_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_struct_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_struct_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_va.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_va_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_va_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/cls_complex_va_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex.exp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_defs_double.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_defs_float.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_defs_longdouble.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_int.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/complex_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/ffitest.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/many_complex.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/many_complex_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/many_complex_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/many_complex_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex1.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex1_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex1_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex1_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex2.inc (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex2_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex2_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex2_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex_double.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex_float.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.complex/return_complex_longdouble.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.go/aa-direct.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.go/closure1.c (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.go/ffitest.h (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.go/go.exp (100%) rename src/libffi/{libffi-3.4.4 => libffi-3.4.6}/testsuite/libffi.go/static-chain.h (100%) diff --git a/src/libffi/libffi-3.4.4/doc/stamp-vti b/src/libffi/libffi-3.4.4/doc/stamp-vti deleted file mode 100644 index 6056fad8d..000000000 --- a/src/libffi/libffi-3.4.4/doc/stamp-vti +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 23 October 2022 -@set UPDATED-MONTH October 2022 -@set EDITION 3.4.4 -@set VERSION 3.4.4 diff --git a/src/libffi/libffi-3.4.4/doc/version.texi b/src/libffi/libffi-3.4.4/doc/version.texi deleted file mode 100644 index 6056fad8d..000000000 --- a/src/libffi/libffi-3.4.4/doc/version.texi +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 23 October 2022 -@set UPDATED-MONTH October 2022 -@set EDITION 3.4.4 -@set VERSION 3.4.4 diff --git a/src/libffi/libffi-3.4.4/src/arc/arcompact.S b/src/libffi/libffi-3.4.4/src/arc/arcompact.S deleted file mode 100644 index 03715fde4..000000000 --- a/src/libffi/libffi-3.4.4/src/arc/arcompact.S +++ /dev/null @@ -1,135 +0,0 @@ -/* ----------------------------------------------------------------------- - arcompact.S - Copyright (c) 2013 Synposys, Inc. (www.synopsys.com) - - ARCompact Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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. - ----------------------------------------------------------------------- */ - -#define LIBFFI_ASM -#include -#include -#ifdef HAVE_MACHINE_ASM_H -#include -#else -#define CNAME(x) x -#define ENTRY(x) .globl CNAME(x)` .type CNAME(x),%function` CNAME(x): -#endif - -.text - - /* R0: ffi_prep_args */ - /* R1: &ecif */ - /* R2: cif->bytes */ - /* R3: fig->flags */ - /* R4: ecif.rvalue */ - /* R5: fn */ -ENTRY(ffi_call_ARCompact) - /* Save registers. */ - st.a fp, [sp, -4] /* fp + 20, fp */ - push_s blink /* fp + 16, blink */ - st.a r4, [sp, -4] /* fp + 12, ecif.rvalue */ - push_s r3 /* fp + 8, fig->flags */ - st.a r5, [sp, -4] /* fp + 4, fn */ - push_s r2 /* fp + 0, cif->bytes */ - mov fp, sp - - /* Make room for all of the new args. */ - sub sp, sp, r2 - - /* Place all of the ffi_prep_args in position. */ - /* ffi_prep_args(char *stack, extended_cif *ecif) */ - /* R1 already set. */ - - /* And call. */ - jl_s.d [r0] - mov_s r0, sp - - ld.ab r12, [fp, 4] /* cif->bytes */ - ld.ab r11, [fp, 4] /* fn */ - - /* Move first 8 parameters in registers... */ - ld_s r0, [sp] - ld_s r1, [sp, 4] - ld_s r2, [sp, 8] - ld_s r3, [sp, 12] - ld r4, [sp, 16] - ld r5, [sp, 20] - ld r6, [sp, 24] - ld r7, [sp, 28] - - /* ...and adjust the stack. */ - min r12, r12, 32 - - /* Call the function. */ - jl.d [r11] - add sp, sp, r12 - - mov sp, fp - pop_s r3 /* fig->flags, return type */ - pop_s r2 /* ecif.rvalue, pointer for return value */ - - /* If the return value pointer is NULL, assume no return value. */ - breq.d r2, 0, epilogue - pop_s blink - - /* Return INT. */ - brne r3, FFI_TYPE_INT, return_double - b.d epilogue - st_s r0, [r2] - -return_double: - brne r3, FFI_TYPE_DOUBLE, epilogue - st_s r0, [r2] - st_s r1, [r2,4] - -epilogue: - j_s.d [blink] - ld.ab fp, [sp, 4] - -ENTRY(ffi_closure_ARCompact) - st.a r0, [sp, -32] - st_s r1, [sp, 4] - st_s r2, [sp, 8] - st_s r3, [sp, 12] - st r4, [sp, 16] - st r5, [sp, 20] - st r6, [sp, 24] - st r7, [sp, 28] - - /* pointer to arguments */ - mov_s r2, sp - - /* return value goes here */ - sub sp, sp, 8 - mov_s r1, sp - - push_s blink - - bl.d ffi_closure_inner_ARCompact - mov_s r0, r8 /* codeloc, set by trampoline */ - - pop_s blink - - /* set return value to r1:r0 */ - pop_s r0 - pop_s r1 - j_s.d [blink] - add_s sp, sp, 32 diff --git a/src/libffi/libffi-3.4.4/src/arc/ffi.c b/src/libffi/libffi-3.4.4/src/arc/ffi.c deleted file mode 100644 index 4d10b21a5..000000000 --- a/src/libffi/libffi-3.4.4/src/arc/ffi.c +++ /dev/null @@ -1,266 +0,0 @@ -/* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 2013 Synopsys, Inc. (www.synopsys.com) - - ARC Foreign Function Interface - - 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 RENESAS TECHNOLOGY 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. - ----------------------------------------------------------------------- */ - -#include -#include - -#include -#include - -#include - -/* for little endian ARC, the code is in fact stored as mixed endian for - performance reasons */ -#if __BIG_ENDIAN__ -#define CODE_ENDIAN(x) (x) -#else -#define CODE_ENDIAN(x) ( (((uint32_t) (x)) << 16) | (((uint32_t) (x)) >> 16)) -#endif - -/* ffi_prep_args is called by the assembly routine once stack - space has been allocated for the function's arguments. */ - -void -ffi_prep_args (char *stack, extended_cif * ecif) -{ - unsigned int i; - void **p_argv; - char *argp; - ffi_type **p_arg; - - argp = stack; - - if (ecif->cif->rtype->type == FFI_TYPE_STRUCT) - { - *(void **) argp = ecif->rvalue; - argp += 4; - } - - p_argv = ecif->avalue; - - for (i = ecif->cif->nargs, p_arg = ecif->cif->arg_types; - (i != 0); i--, p_arg++) - { - size_t z; - int alignment; - - /* align alignment to 4 */ - alignment = (((*p_arg)->alignment - 1) | 3) + 1; - - /* Align if necessary. */ - if ((alignment - 1) & (unsigned) argp) - argp = (char *) FFI_ALIGN (argp, alignment); - - z = (*p_arg)->size; - if (z < sizeof (int)) - { - z = sizeof (int); - - switch ((*p_arg)->type) - { - case FFI_TYPE_SINT8: - *(signed int *) argp = (signed int) *(SINT8 *) (*p_argv); - break; - - case FFI_TYPE_UINT8: - *(unsigned int *) argp = (unsigned int) *(UINT8 *) (*p_argv); - break; - - case FFI_TYPE_SINT16: - *(signed int *) argp = (signed int) *(SINT16 *) (*p_argv); - break; - - case FFI_TYPE_UINT16: - *(unsigned int *) argp = (unsigned int) *(UINT16 *) (*p_argv); - break; - - case FFI_TYPE_STRUCT: - memcpy (argp, *p_argv, (*p_arg)->size); - break; - - default: - FFI_ASSERT (0); - } - } - else if (z == sizeof (int)) - { - *(unsigned int *) argp = (unsigned int) *(UINT32 *) (*p_argv); - } - else - { - if ((*p_arg)->type == FFI_TYPE_STRUCT) - { - memcpy (argp, *p_argv, z); - } - else - { - /* Double or long long 64bit. */ - memcpy (argp, *p_argv, z); - } - } - p_argv++; - argp += z; - } - - return; -} - -/* Perform machine dependent cif processing. */ -ffi_status -ffi_prep_cif_machdep (ffi_cif * cif) -{ - /* Set the return type flag. */ - switch (cif->rtype->type) - { - case FFI_TYPE_VOID: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_STRUCT: - cif->flags = (unsigned) cif->rtype->type; - break; - - case FFI_TYPE_SINT64: - case FFI_TYPE_UINT64: - case FFI_TYPE_DOUBLE: - cif->flags = FFI_TYPE_DOUBLE; - break; - - case FFI_TYPE_FLOAT: - default: - cif->flags = FFI_TYPE_INT; - break; - } - - return FFI_OK; -} - -extern void ffi_call_ARCompact (void (*)(char *, extended_cif *), - extended_cif *, unsigned, unsigned, - unsigned *, void (*fn) (void)); - -void -ffi_call (ffi_cif * cif, void (*fn) (void), void *rvalue, void **avalue) -{ - extended_cif ecif; - - ecif.cif = cif; - ecif.avalue = avalue; - - /* If the return value is a struct and we don't have - a return value address then we need to make one. */ - if ((rvalue == NULL) && (cif->rtype->type == FFI_TYPE_STRUCT)) - { - ecif.rvalue = alloca (cif->rtype->size); - } - else - ecif.rvalue = rvalue; - - switch (cif->abi) - { - case FFI_ARCOMPACT: - ffi_call_ARCompact (ffi_prep_args, &ecif, cif->bytes, - cif->flags, ecif.rvalue, fn); - break; - - default: - FFI_ASSERT (0); - break; - } -} - -int -ffi_closure_inner_ARCompact (ffi_closure * closure, void *rvalue, - ffi_arg * args) -{ - void **arg_area, **p_argv; - ffi_cif *cif = closure->cif; - char *argp = (char *) args; - ffi_type **p_argt; - int i; - - arg_area = (void **) alloca (cif->nargs * sizeof (void *)); - - /* handle hidden argument */ - if (cif->flags == FFI_TYPE_STRUCT) - { - rvalue = *(void **) argp; - argp += 4; - } - - p_argv = arg_area; - - for (i = 0, p_argt = cif->arg_types; i < cif->nargs; - i++, p_argt++, p_argv++) - { - size_t z; - int alignment; - - /* align alignment to 4 */ - alignment = (((*p_argt)->alignment - 1) | 3) + 1; - - /* Align if necessary. */ - if ((alignment - 1) & (unsigned) argp) - argp = (char *) FFI_ALIGN (argp, alignment); - - z = (*p_argt)->size; - *p_argv = (void *) argp; - argp += z; - } - - (closure->fun) (cif, rvalue, arg_area, closure->user_data); - - return cif->flags; -} - -extern void ffi_closure_ARCompact (void); - -ffi_status -ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif, - void (*fun) (ffi_cif *, void *, void **, void *), - void *user_data, void *codeloc) -{ - uint32_t *tramp = (uint32_t *) & (closure->tramp[0]); - - switch (cif->abi) - { - case FFI_ARCOMPACT: - FFI_ASSERT (tramp == codeloc); - tramp[0] = CODE_ENDIAN (0x200a1fc0); /* mov r8, pcl */ - tramp[1] = CODE_ENDIAN (0x20200f80); /* j [long imm] */ - tramp[2] = CODE_ENDIAN (ffi_closure_ARCompact); - break; - - default: - return FFI_BAD_ABI; - } - - closure->cif = cif; - closure->fun = fun; - closure->user_data = user_data; - cacheflush (codeloc, FFI_TRAMPOLINE_SIZE, BCACHE); - - return FFI_OK; -} diff --git a/src/libffi/libffi-3.4.4/testsuite/Makefile.am b/src/libffi/libffi-3.4.4/testsuite/Makefile.am deleted file mode 100644 index c4331b1d3..000000000 --- a/src/libffi/libffi-3.4.4/testsuite/Makefile.am +++ /dev/null @@ -1,133 +0,0 @@ -## Process this file with automake to produce Makefile.in. - -AUTOMAKE_OPTIONS = foreign dejagnu - -EXTRA_DEJAGNU_SITE_CONFIG=../local.exp - -CLEANFILES = *.exe core* *.log *.sum - -EXTRA_DIST = config/default.exp lib/libffi.exp lib/target-libpath.exp \ -lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ -libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp \ -libffi.bhaible/test-call.c libffi.bhaible/test-callback.c \ -libffi.bhaible/testcases.c libffi.call/align_mixed.c \ -libffi.call/align_stdcall.c libffi.call/call.exp \ -libffi.call/err_bad_typedef.c libffi.call/ffitest.h \ -libffi.call/float.c libffi.call/float1.c libffi.call/float2.c \ -libffi.call/float3.c libffi.call/float4.c libffi.call/float_va.c \ -libffi.call/many.c libffi.call/many2.c libffi.call/many_double.c \ -libffi.call/many_mixed.c libffi.call/negint.c libffi.call/offsets.c \ -libffi.call/pr1172638.c libffi.call/promotion.c \ -libffi.call/pyobjc_tc.c libffi.call/return_dbl.c \ -libffi.call/return_dbl1.c libffi.call/return_dbl2.c \ -libffi.call/return_fl.c libffi.call/return_fl1.c \ -libffi.call/return_fl2.c libffi.call/return_fl3.c \ -libffi.call/return_ldl.c libffi.call/return_ll.c \ -libffi.call/return_ll1.c libffi.call/return_sc.c \ -libffi.call/return_sl.c libffi.call/return_uc.c \ -libffi.call/return_ul.c libffi.call/struct1.c libffi.call/struct10.c \ -libffi.call/struct2.c libffi.call/struct3.c libffi.call/struct4.c \ -libffi.call/struct5.c libffi.call/struct6.c libffi.call/struct7.c \ -libffi.call/struct8.c libffi.call/struct9.c \ -libffi.call/uninitialized.c libffi.call/va_1.c libffi.call/va_2.c \ -libffi.call/va_3.c libffi.call/va_struct1.c libffi.call/va_struct2.c \ -libffi.call/va_struct3.c libffi.call/struct_by_value_big.c \ -libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \ -libffi.call/struct_by_value_4.c libffi.call/struct_by_value_small.c \ -libffi.call/strlen2.c libffi.call/strlen3.c libffi.call/strlen4.c \ -libffi.call/strlen.c libffi.call/va_3.c \ -libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \ -libffi.call/struct_by_value_4.c libffi.closures/closure.exp \ -libffi.call/s55.c libffi.call/bpo-38748.c \ -libffi.closures/closure_fn0.c libffi.closures/closure_fn1.c \ -libffi.closures/closure_fn2.c libffi.closures/closure_fn3.c \ -libffi.closures/closure_fn4.c libffi.closures/closure_fn5.c \ -libffi.closures/closure_fn6.c libffi.closures/closure_loc_fn0.c \ -libffi.closures/closure_simple.c libffi.closures/cls_12byte.c \ -libffi.closures/cls_16byte.c libffi.closures/cls_18byte.c \ -libffi.closures/cls_19byte.c libffi.closures/cls_1_1byte.c \ -libffi.closures/cls_20byte.c libffi.closures/cls_20byte1.c \ -libffi.closures/cls_24byte.c libffi.closures/cls_2byte.c \ -libffi.closures/cls_3_1byte.c libffi.closures/cls_3byte1.c \ -libffi.closures/cls_3byte2.c libffi.closures/cls_3float.c \ -libffi.closures/cls_4_1byte.c libffi.closures/cls_4byte.c \ -libffi.closures/cls_5_1_byte.c libffi.closures/cls_5byte.c \ -libffi.closures/cls_64byte.c libffi.closures/cls_6_1_byte.c \ -libffi.closures/cls_6byte.c libffi.closures/cls_7_1_byte.c \ -libffi.closures/cls_7byte.c libffi.closures/cls_8byte.c \ -libffi.closures/cls_9byte1.c libffi.closures/cls_9byte2.c \ -libffi.closures/cls_align_double.c libffi.closures/cls_align_float.c \ -libffi.closures/cls_align_longdouble.c \ -libffi.closures/cls_align_pointer.c \ -libffi.closures/cls_align_sint16.c libffi.closures/cls_align_sint32.c \ -libffi.closures/cls_align_sint64.c libffi.closures/cls_align_uint16.c \ -libffi.closures/cls_align_uint32.c libffi.closures/cls_align_uint64.c \ -libffi.closures/cls_dbls_struct.c libffi.closures/cls_double.c \ -libffi.closures/cls_double_va.c libffi.closures/cls_float.c \ -libffi.closures/cls_longdouble_va.c \ -libffi.closures/cls_many_mixed_args.c \ -libffi.closures/cls_many_mixed_float_double.c \ -libffi.closures/cls_multi_schar.c libffi.closures/cls_multi_sshort.c \ -libffi.closures/cls_multi_sshortchar.c \ -libffi.closures/cls_multi_uchar.c libffi.closures/cls_multi_ushort.c \ -libffi.closures/cls_multi_ushortchar.c libffi.closures/cls_pointer.c \ -libffi.closures/cls_pointer_stack.c libffi.closures/cls_schar.c \ -libffi.closures/cls_sint.c libffi.closures/cls_sshort.c \ -libffi.closures/cls_struct_va1.c libffi.closures/cls_uchar.c \ -libffi.closures/cls_uint.c libffi.closures/cls_uint_va.c \ -libffi.closures/cls_ulong_va.c libffi.closures/cls_ulonglong.c \ -libffi.closures/cls_ushort.c libffi.closures/err_bad_abi.c \ -libffi.closures/ffitest.h libffi.closures/nested_struct.c \ -libffi.closures/nested_struct1.c libffi.closures/nested_struct10.c \ -libffi.closures/nested_struct11.c libffi.closures/nested_struct12.c \ -libffi.closures/nested_struct13.c libffi.closures/nested_struct2.c \ -libffi.closures/nested_struct3.c libffi.closures/nested_struct4.c \ -libffi.closures/nested_struct5.c libffi.closures/nested_struct6.c \ -libffi.closures/nested_struct7.c libffi.closures/nested_struct8.c \ -libffi.closures/nested_struct9.c libffi.closures/problem1.c \ -libffi.closures/single_entry_structs1.c \ -libffi.closures/single_entry_structs2.c \ -libffi.closures/single_entry_structs3.c libffi.closures/stret_large.c \ -libffi.closures/stret_large2.c libffi.closures/stret_medium.c \ -libffi.closures/stret_medium2.c libffi.closures/testclosure.c \ -libffi.closures/unwindtest.cc libffi.closures/unwindtest_ffi_call.cc \ -libffi.closures/cls_align_longdouble_split.c \ -libffi.closures/cls_align_longdouble_split2.c \ -libffi.closures/cls_longdouble.c libffi.closures/huge_struct.c \ -libffi.complex/cls_align_complex.inc \ -libffi.complex/cls_align_complex_double.c \ -libffi.complex/cls_align_complex_float.c \ -libffi.complex/cls_align_complex_longdouble.c \ -libffi.complex/cls_complex.inc libffi.complex/cls_complex_double.c \ -libffi.complex/cls_complex_float.c \ -libffi.complex/cls_complex_longdouble.c \ -libffi.complex/cls_complex_struct.inc \ -libffi.complex/cls_complex_struct_double.c \ -libffi.complex/cls_complex_struct_float.c \ -libffi.complex/cls_complex_struct_longdouble.c \ -libffi.complex/cls_complex_va.inc \ -libffi.complex/cls_complex_va_double.c \ -libffi.complex/cls_complex_va_float.c \ -libffi.complex/cls_complex_va_longdouble.c libffi.complex/complex.exp \ -libffi.complex/complex.inc libffi.complex/complex_defs_double.inc \ -libffi.complex/complex_defs_float.inc \ -libffi.complex/complex_defs_longdouble.inc \ -libffi.complex/complex_double.c libffi.complex/complex_float.c \ -libffi.complex/complex_int.c libffi.complex/complex_longdouble.c \ -libffi.complex/ffitest.h libffi.complex/many_complex.inc \ -libffi.complex/many_complex_double.c \ -libffi.complex/many_complex_float.c \ -libffi.complex/many_complex_longdouble.c \ -libffi.complex/return_complex.inc libffi.complex/return_complex1.inc \ -libffi.complex/return_complex1_double.c \ -libffi.complex/return_complex1_float.c \ -libffi.complex/return_complex1_longdouble.c \ -libffi.complex/return_complex2.inc \ -libffi.complex/return_complex2_double.c \ -libffi.complex/return_complex2_float.c \ -libffi.complex/return_complex2_longdouble.c \ -libffi.complex/return_complex_double.c \ -libffi.complex/return_complex_float.c \ -libffi.complex/return_complex_longdouble.c libffi.go/aa-direct.c \ -libffi.go/closure1.c libffi.go/ffitest.h libffi.go/go.exp \ -libffi.go/static-chain.h diff --git a/src/libffi/libffi-3.4.4/ChangeLog b/src/libffi/libffi-3.4.6/ChangeLog similarity index 92% rename from src/libffi/libffi-3.4.4/ChangeLog rename to src/libffi/libffi-3.4.6/ChangeLog index 1ca669ec4..490af5805 100644 --- a/src/libffi/libffi-3.4.4/ChangeLog +++ b/src/libffi/libffi-3.4.6/ChangeLog @@ -1,3 +1,1088 @@ +commit 3d0ce1e6fcf19f853894862abcbac0ae78a7be60 +Author: Anthony Green +Date: Sun Feb 18 09:22:51 2024 -0500 + + chore: update version to 3.4.6 and fix long double regression on mips64 and alpha + +commit 94eaedb40e67e26d2fa35d1c22d8818f4d9f4c2d +Author: Anthony Green +Date: Sun Feb 18 08:41:04 2024 -0500 + + Update sparc64 host + +commit e1dcf03b4642e75a1058799a3023e0ebd0024258 +Author: Anthony Green +Date: Sun Feb 18 08:02:45 2024 -0500 + + Update cfarm hostnames + +commit cd78b539125ae615d76df5a57039fe70ebd56c27 +Author: Anthony Green +Date: Sun Feb 18 07:48:51 2024 -0500 + + Always define long double types. + +commit 012fcaf96c87ab617ba34babce9b6b259188fcf0 +Author: Anthony Green +Date: Thu Feb 15 08:35:02 2024 -0500 + + Update + +commit d1597239af492240770692b8e453f0dca70fc551 +Author: Anthony Green +Date: Thu Feb 15 08:32:42 2024 -0500 + + update copyright year in libffi.texi + +commit 91739a1a912476adbf1e0e4dcb091b9a2c5007d9 +Author: Anthony Green +Date: Thu Feb 15 08:30:09 2024 -0500 + + Update version, copyright and testsuite info. + +commit 9752a622d12e696eaf9a4c46d4f09b58bca6bb83 +Author: Anthony Green +Date: Thu Feb 15 08:03:21 2024 -0500 + + Fix test filename reference + +commit 404355317b3314da14a9ead0c0a50c040212e1fc +Author: Anthony Green +Date: Thu Feb 15 08:01:43 2024 -0500 + + docs(README): update release details for libffi-3.4.5 + +commit 04f6fa310ddec494cfcf32fd3685cefe35a8d2a2 +Author: Xi Ruoyao +Date: Thu Feb 15 20:52:13 2024 +0800 + + mips: Fix N32 ABI return value handling (#813) + + In N32 ABI, 8-bit or 16-bit integers should be extended following the + signedness of the integer, but 32-bit integers should always be + sign-extended to 64-bit (note that N32 ABI only works on 64-bit CPUs). + + So handling this in everything using libffi would be nasty. And the + libffi code for architectures with a similar rule (LoongArch & RISC-V) + also properly handle this. Let's do this work in libffi for MIPS N32 + too. + + This fixes two failures in Python 3.12.1 ctypes test. + +commit 00c0c87773910a320d82f026bb481eea31b50206 +Author: 杨屿杰 <30362409+scylaac@users.noreply.github.com> +Date: Thu Feb 15 20:51:40 2024 +0800 + + Fix loongarch64 soft-float build (#816) (#817) + +commit b3091029ed85339c856224c243826022ae93c041 +Author: Hood Chatham +Date: Thu Feb 15 04:51:12 2024 -0800 + + Emscripten: Don't unbox single element structs if they are larger than 16 bytes (#818) + + This arguably is a compensation for a Python ctypes bug / strange behavior + described here: + https://github.com/python/cpython/blob/a16a9f978f42b8a09297c1efbf33877f6388c403/Modules/_ctypes/stgdict.c#L718-L779 + + If a struct is larger than 16 bytes, Python does not bother to accurately report + its contents figuring that we don't need to know. + +commit 98881ecb8eec6d5f2beaaced96d9f625b0dee499 +Author: Bill Roberts <152999275+billatarm@users.noreply.github.com> +Date: Thu Feb 15 06:50:40 2024 -0600 + + aarch64: add BTI flag to ELF notes (#822) + + When a program is loaded and linked, the first ELF file that doesn't + declare that BTI is supported in the GNU NOTES section disables BTI + support. + + Example: + readelf -n ./aarch64-unknown-linux-gnu/.libs/libffi.so + Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 + Properties: AArch64 feature: BTI + + Fixes: #823 + + Signed-off-by: Bill Roberts + +commit f9da12e944c947e797e5f3a98f3860c2a0ed055e +Author: Dan Horák +Date: Thu Feb 15 13:50:13 2024 +0100 + + don't skip ffi_type_longdouble symbols (#814) (#824) + + Seems there are configurations (ppc64 or ppc64le) that define + HAVE_LONG_DOUBLE_VARIANT in fficonfig.h, but do not define + HAVE_LONG_DOUBLE, and still want ffi_type_{,complex_}longdouble + symbols. Update the condition in libffi.map.in accordingly. + +commit f8ed78f1b2e65f2741455612d38477424e321850 +Author: Xi Ruoyao +Date: Thu Feb 15 20:49:27 2024 +0800 + + LoongArch: Fix a build error with GCC 14 (#825) + + Fix the build error with GCC 14: + + ../src/loongarch64/ffi.c: In function 'ffi_prep_closure_loc': + ../src/loongarch64/ffi.c:525:7: error: implicit declaration of + function 'ffi_tramp_set_parms' [-Wimplicit-function-declaration] + +commit 0b1dd62bef4192b61153182f7687edf7e885611c +Author: bartoli +Date: Thu Feb 1 04:54:57 2024 +0100 + + Update README.md (#820) + + For cygwin/MSVC build, CXXCPP is also needed to pass configure checks + +commit c07c40ee9444e029bc595860a669de32b7af282a +Author: Anthony Green +Date: Wed Jan 31 22:43:38 2024 -0500 + + `feat(github-actions): add new build workflow for warp` + +commit 622caabcd25f4e11f752241417d06c9062acdf1f +Author: Chongyun Lee <45286352+licy183@users.noreply.github.com> +Date: Sun Dec 24 23:38:32 2023 +0800 + + Put more optional symbols behind ifdefs (#812) + +commit a1c391bd8e604c611c7e9c8f6705dc723d403eb5 +Author: Виктор Чернякин <56512186+LocalSpook@users.noreply.github.com> +Date: Fri Dec 22 03:30:50 2023 -0700 + + Fix a variety of warnings (#811) + +commit 3a62a08af7bd0b5d540a087590dc54cdc312416b +Author: Anthony Green +Date: Thu Dec 21 15:19:44 2023 -0500 + + Remove warnings + +commit d96fa2117cc6ca2923de9a2f34311ef0219b7590 +Author: Anthony Green +Date: Thu Dec 21 14:04:19 2023 -0500 + + Eliminate warning + +commit 5b1944b4ce4b03e28a5843d36812756168d66b08 +Author: Martin Storsjö +Date: Wed Nov 29 00:38:13 2023 +0200 + + aarch64: Write the BTI instructions as "hint" instructions (#810) + + GNU binutils refuses to assemble the direct BTI instructions unless + the target architecture explicitly supports BTI, ending up with errors + such as + + ../src/aarch64/sysv.S: Assembler messages: + ../src/aarch64/sysv.S:87: Error: selected processor does not support `bti c' + ../src/aarch64/sysv.S:156: Error: selected processor does not support `bti j' + + Building with -march=armv8.5-a fixes building this. + + However, the BTI instructions assemble into hint instructions, that + are ignored by processors that don't implement them. Therefore it is + possible to assemble them for the baseline armv8.0-a target as well, + by replacing "bti j" with "hint #36", "bti c" with "hint #34" and + "bti jc" with "hint #38"; this assembles into the same instruction + bits. + +commit 11af2196d5f4e8c756758cf86e4ab79dda89f405 +Author: Anthony Green +Date: Thu Nov 23 09:22:20 2023 -0500 + + Reference recent changes + +commit d7f5e98b437a242ac712cda8df3e47b205339711 +Author: David Tenty +Date: Thu Nov 23 09:16:56 2023 -0500 + + Fix visibility check for AIX (#804) + +commit 7f960d9a062fab0624302e9f63ef8b025f51dd10 +Author: David Tenty +Date: Thu Nov 23 09:16:35 2023 -0500 + + [powerpc][AIX] fix layout issues for nested struct types (#805) + + * [powerpc][AIX] fix layout issues for nested struct types + + On AIX under the default power alignment rules, the layout + of struct types which are nested inside other structs may + be different than the layout of those types on their own. + + Specifically the first member double rules which would + apply an eight byte alignment if that type appears in the + first position of a struct: + + 1) apply recursively if the struct appear in the first member + of another struct + 2) do not apply if that struct is itself a member of another struct + and not the first member. + + The current implementation of the rules in libffi doesn't handle these + cases, causing a mismatch with the compiler and causing some crashes + we see when OpenJ9 is used with libffi on AIX. + + This PR corrects this and adds some representative test cases. + + * Fix code style + + * Add a size check + + * Add additional test + + * Fix padding in internal structs + + * Flip condition back to original form + + * Add a comment + +commit d93c0be8a0f11f207e8232770c5f0590406efad1 +Author: Tobias Heider +Date: Thu Nov 23 15:15:29 2023 +0100 + + Add bti intructions to aarch64 assembly to work with strict (#808) + + BTI enforcement on OpenBSD. + +commit adbcf2b247696dde2667ab552cb93e0c79455c84 +Author: Daily Price Depot Droid +Date: Sat Oct 21 09:58:28 2023 -0400 + + Disable firefox testing + +commit 357755eef44735676de1cec458192c7784fb3aa8 +Author: Daily Price Depot Droid +Date: Sat Oct 21 09:05:48 2023 -0400 + + Try logging + +commit c23e9a1c81a84ea4804d001865845b25ff8d4c8a +Author: Nobuyoshi Nakada +Date: Sat Oct 21 20:44:24 2023 +0900 + + Check if FFI_GO_CLOSURES is defined (#796) + + This macro is always defined to 1 if defined, or undefined. + With `-Wundef` option, checking the value without checking if it is defined causes warnings: + + ``` + /opt/local/include/ffi.h:477:5: warning: 'FFI_GO_CLOSURES' is not defined, evaluates to 0 [-Wundef] + #if FFI_GO_CLOSURES + ^ + ``` + +commit a4be0b7210b5a7fd67770d2f4d63105900bc459a +Author: Yn0ga +Date: Sat Oct 21 13:43:43 2023 +0200 + + Add support for Haikuos on PowerPC (#799) + +commit dd90749505559d38abb339f1a1cd03791a9dc484 +Author: Petr Sumbera +Date: Sat Oct 21 13:42:11 2023 +0200 + + Fix passing floating point arguments on 64bits SPARC (libffi#778) (#802) + +commit 44f6fa3e526c920c61c8ac10661f447ccfe30872 +Author: Alfred Wingate +Date: Fri Oct 20 15:02:37 2023 +0300 + + Put optional symbols behind ifdefs (#800) + + Signed-off-by: Alfred Wingate + +commit 5c6e53db873767cd2266745cebc62551958f5bee +Author: Michael Osipov <1983-01-06@gmx.net> +Date: Mon Sep 4 13:27:01 2023 +0200 + + Fix build failures on HP-UX (#792) + + This fixes #328 + + Co-authored-by: Chris Hunt + +commit 1b3e7569fe114fc7d7779e35704b8519fe65fd4d +Author: Russell Keith-Magee +Date: Mon Sep 4 19:26:11 2023 +0800 + + Replace use of triple with target, and explicitly specify build host to force cross-compilation (#794) + +commit 22b50e896a80171648439497041afe3b6dba1c08 +Author: Anthony Green +Date: Thu Aug 31 16:31:42 2023 -0400 + + Fix python and pyodide version + +commit 4467a3bc350bca106aee2c55cbb19ffffb144d1b +Author: Anthony Green +Date: Thu Aug 31 08:48:50 2023 -0400 + + Upgrade pyodide version to match newer selenium API + +commit 1d0a28ab5a2ee2e12b0650d69184d561cd1fd83c +Author: Ivan Tadeu Ferreira Antunes Filho +Date: Sat Aug 12 09:02:39 2023 -0400 + + Make label private on apple (#788) + + Private labels on apple must start with L prefix, while on ELF they start with .L prefix. + This makes the label start with L on apple instead of .L. + +commit 9e8f1bd8de39ee90a73c6927e2df18a418f6da55 +Author: Hood Chatham +Date: Tue Jun 20 21:17:04 2023 -0700 + + Emscripten build: Remove -sSTRICT_JS (#781) + + This rasies errors on newer versions of the emscripten compiler. + +commit ac598b7f5272d536b75f4b3833a4610cf4cd9404 +Merge: 2d63cee 8bdd471 +Author: Anthony Green +Date: Mon Apr 3 08:20:32 2023 -0400 + + Merge branch 'master' of github.com:/libffi/libffi + +commit 2d63cee0e2154bb9027cff71f780cfaa2f543567 +Author: Anthony Green +Date: Mon Apr 3 08:18:23 2023 -0400 + + Add tests with homogeneous aggregate types + +commit 8bdd4716e5974ee0b28b3c09db1eaa9e8833481e +Author: Hood Chatham +Date: Sun Apr 2 19:54:22 2023 -0700 + + More accurate explanation of wasm32 state in readme (#776) + + There are three main wasm32 target triples: + * wasm32-unknown-unknown + * wasm32-unknown-emscripten + * wasm32-unknown-wasi + + The wasm32 port is only for the wasm32-unknown-emscripten target triple. + (The other triples have no dynamic linking support so libffi would be both + hard to port and of limited utility.) + +commit f08493d249d2067c8b3207ba46693dd858f95db3 +Author: Anthony Green +Date: Fri Feb 17 20:35:44 2023 -0500 + + Mention ARCv3 work + +commit c4df19c99f8d8841942e3edaadbf331d30e298c8 +Author: Claudiu Zissulescu +Date: Sat Feb 18 03:33:47 2023 +0200 + + Update ARC's libffi port (#771) + + * Add support for ARC and ARC64 + + Add support for ARC/ARC32/ARC64 + + * Implementation of GO Closure for ARC/ARC32/ARC64 Architectures + + --------- + + Co-authored-by: Nuno Cardoso + Co-authored-by: Luis Silva + +commit 237520649730cb21daf4ebff1cf9a0a64f8507f8 +Author: Anthony Green +Date: Thu Feb 9 12:23:35 2023 -0500 + + Normalize libffi labels + +commit ca26801567e9ce19c83f132c6a116d3d25d3b8a1 +Author: Anthony Green +Date: Thu Feb 9 10:31:22 2023 -0500 + + Use rlgl + +commit 7d23c2d28e884ad5978e0974ad2443570940d393 +Author: Hood Chatham +Date: Thu Feb 9 06:01:37 2023 -0800 + + Add emscripten gha workflow (#768) + + Resolves issue #767 + +commit 883f5ae665bf96008a7a56bf4d6c64cb05c68272 +Author: Anthony Green +Date: Sun Feb 5 09:51:37 2023 -0500 + + Rename label + +commit 678dad5abe6c95ffa087b799922c2114b18c8541 +Author: Hood Chatham +Date: Thu Feb 2 14:48:07 2023 -0800 + + Use libffi-dg-prune to handle Emscripten INFO messages rather than patching emcc.py (#766) + +commit 7d03d3a3150c5c1ff70753edaa880bb5d57ae566 +Author: Anthony Green +Date: Thu Feb 2 16:09:14 2023 -0500 + + Mention wasm32 + +commit c267c72fa803316e95462f16bf1e3d6d5d55612c +Author: Anthony Green +Date: Thu Feb 2 16:04:34 2023 -0500 + + Modernize + +commit 2687cfc5329d08d6bd4d397c1ca8eb0d171e22fd +Author: Hood Chatham +Date: Thu Feb 2 09:10:00 2023 -0800 + + Add wasm32 emscripten support (#763) + + * added build script + + * Apply libffi-emscripten patch + + * Some changes to wasm32/ffi.c + + * Remove exit(0); from test suites + + * Fix LONGDOUBLE argument type + + * Use more macros in ffi.c + + * Use switch statements instead of if chains + + * Implemented struct args + + * Finish struct implementation + + * Partially working closures + + * Got closures working (most of closures test suite passes) + + * Revert changes to test suite + + * Update .gitignore + + * Apply code formatter + + * Use stackSave and stackRestore rather than directly adjusting stack pointer + + * Add missing break + + * Fix visibility of ffi_closure_alloc and ffi_closure_free + + * Fix FFI_TYPE_STRUCT and FFI_TYPE_LONGDOUBLE when WASM_BIGINT is not used + sig needs to be vi here for FFI_TYPE_STRUCT and FFI_TYPE_LONGDOUBLE, noticed this while running the test suite without WASM_BIGINT support. + + * Always use dynCall rather than direct wasmTable lookup (function pointer cast emulation changes dynCall) + + * Prevent closures.c from duplicating symbols + + * Try to set up CI + + * Add test with bigint + + * Make test methods static + + * Remove BigInt shorthand because it messes up terser + + * Add selenium tests + + * Update tests a bit to try to make CI work + + * WASM_BIGINT is a linker flag not a compile flag + + * Finish getting CI working (#1) + + * update gitignore + + * Avoid adding "use strict;" to generated JS + + This should be controlled by -s STRICT_JS in Emscripten. + + * Make JavaScript ES5 compliant + + * Remove redundant EXPORTED_RUNTIME_METHODS settings + + * Fix definition of DEREF_I16 + + * Avoid marshalling FFI_TYPE_LONGDOUBLE when WASM_BIGINT is not used + + * Add missing FFI_TYPE_STRUCT signature + + * Improve test scripts + + * Remove redundant EXPORTED_RUNTIME_METHODS settings + + * Add missing EOL + + * Add struct unpacking tests + + * Update ci config to try to actually use WASM_BIGINT + + * Revert "Avoid marshalling FFI_TYPE_LONGDOUBLE when WASM_BIGINT is not used" + + This reverts commit 61bd5a3e20891623715604581b6e872ab3dfab80. + + * Fix single_entry_structs tests + + * Fix return from closure call + + * Fix 64 bit return from closures + + * only allocate as much space on stack for return pointer as needed + + * Revert "only allocate as much space on stack for return pointer as needed" + + This reverts commit e54a30faea3803e7ac33eed191bde9e573850fc1. + + * xfail two tests + + * Fix err_bad_abi test + + * Remove test logging junk + + * Try to set up long double marshalling for closures + + * xfail err_bad_abi + + * Fix reference errors in previous commit + + * Add missing argument pointer assignment + + * Fix signature of function pointer in cls_dbls_struct + + * Fix longdouble argument + + * Try some changes to bigint handling + + * Fix BigInt handling + + * Fix cls_longdouble test + + * Fix long double closure arg with no WASM_BIGINT + + * Use EM_JS to factor out js helpers + + * Support for varargs closure calls + + * Fix varargs calls + + * Fix err_bad_abi test + + * Fix typo in previous commit + + * Add more assertions to closures test suite + + * Fix some asserts + + * Add assertions to a few more tests + + * Fix some tests + + * Fix more floating point assertions + + * Update more tests + + * Var args for ffi_call + + * Don't do node tests + + * Macro for allocating on stack + + * Add some comments, simplify struct handling + + * Try again to fix varargs calls, add comments + + * Consolidate WASM_BIGINT conditionals into LOAD_U64 and STORE_U64 macros + + * A bit of cleanup + + * Fix another typo + + * Some fixes to the testsuite + + * Another testsuite fix + + * Fix varags with closures? + + * Another attempt at getting closure varargs to work + + * sig is initialized later + + * Allow libffi.closures tests to be run + + * Improve build script + + * Remove redundant semicolons + + * Fix a few libffi.closures test failures + + * Cleanup + + * Legacy dynCall API is no longer used + + * Fix FFI_TYPE_LONGDOUBLE offset + + * xfail 2 tests for WASM + + - closure_loc_fn0; not applicable -- codeloc doesn't point to closure. + - huge_struct; function signature too long. + + * Revert some redundant dg-output/printf statements + + Helps Node. + + * Revert "Don't do node tests" + + This reverts commit a341ef4b. + + * Fix assertions in cls_24byte + + * More tiny formating fixes to test suite + + * Revert "Revert "Don't do node tests"" + + This reverts commit 7722e685ea04e2420e042886816d8c4dd31f5dcb. + + * Fix 64 bit returns when WASM_BIGINT is absent + + * Fix print statement in cls_24byte + + * Add CALL_FUNC_PTR macro to allow pyodide to define custom calling behavior to handle fpcast + + * Update single_entry_structs tests + + * More explanations + + * Fix compile error in last commit + + * Add more support for pyodide fpcast emulation, update CI to try to test it + + * Clone via https + + * Fix path to pyodide emsdk_env + + * Add asserts to the rest of the test suite + + * Fix test compile errors + + * Fix some tests + + * Fix cls_ulonglong + + * Fix alignment of <4 byte args + + * fix cls_ulonglong again + + * Use snprintf instead of sprintf + + * Should assert than strncmp returned 0 + + * Fix va_struct1 and va_struct3 + + * Change double and long double tests + + These tests are failing because of a strange bug with prinft and doubles, but I am not convinced + it necessarily has anything to do with libffi. This version casts the double to int before printing it and avoids the issue + + * Enable node tests + + * Revert "Change double and long double tests" + + This reverts commit 8f3ff89c6577dc99564181cd9974f2f1ba21f1e9. + + * Fix PYODIDE_FPCAST flag + + * add conftest.py back in + + * Fix emcc error: setting `EXPORTED_FUNCTIONS` expects `` but got `` + + See discussion on https://github.com/pyodide/pyodide/pull/1596 + + * Remove test.html + + * Remove duplicate test file + + * More changes from upstream + + * Fix some whitespace + + * Add some basic debug logging statements + + * Reapply libffi.exp changes + + * Don't build docs (#7) + + Works around build issue makeinfo: command not found. + + * Update long double alignment + + Emscripten 2.0.26 reduces the aligmnet of long double to 8. Quoting + from `ChangeLog.md`: + + > The alignment of `long double`, which is a 128-bit floating-point + > value implemented in software, is reduced from 16 to 8. The lower + > alignment allows `max_align_t` to properly match the alignment we + > use for malloc, which is 8 (raising malloc's alignment to achieve + > correctness the other way would come with a performance regression). + > (#10072) + + * Update long double alignment + + Emscripten 2.0.26 reduces the aligmnet of long double to 8. Quoting + from `ChangeLog.md`: + + > The alignment of `long double`, which is a 128-bit floating-point + > value implemented in software, is reduced from 16 to 8. The lower + > alignment allows `max_align_t` to properly match the alignment we + > use for malloc, which is 8 (raising malloc's alignment to achieve + > correctness the other way would come with a performance regression). + > (#10072) + + * Improve error handling a bit (#8) + + * Fix handling of signed arguments to ffi_call (#11) + + * Fix struct argument handling in ffi_call (#10) + + * Remove fpcast emulation tests + + * Align the stack to MAX_ALIGN before making call (#12) + + * Increase MAX_ARGS + + * Cleanup (#14) + + * Fix Closure compiler error with -sASSERTIONS=1 (#15) + + * Remove function pointer cast emulation (#13) + + This reverts commit 593b402 and cbc54da, as it's no longer needed + after PR pyodide/pyodide#2019. + + * Prefer the `__EMSCRIPTEN__` definition over `EMSCRIPTEN` (#18) + + "The preprocessor define EMSCRIPTEN is deprecated. Don't pass it to code + in strict mode. Code should use the define __EMSCRIPTEN__ instead." + https://github.com/emscripten-core/emscripten/blob/84a634167a1cd9e8c47d37a559688153a4ceace6/emcc.py#L887-L890 + + * Install autoconf 2.71 + + * Try again with installing autoconf 2.71 + + * Fix compatibility with Emscripten 3.1.28 + + * CI: remove use of `EM_CONFIG` env + + See commit: + https://github.com/emscripten-core/emsdk/commit/3d87d5ea8143b3636f872fb05b896eb4a19a070b + + * Fix cls_multi_schar: cast rest_call to signed char + + * Remove test xfails (#17) + + * Fix long double when used as a varargs argument + + * Enable unwindtest and fix it + + * Add EM_JS_DEPS + + * Also require convertJsFunctionToWasm + + * Run tests very very verbose + + * Echo the .emscripten file + + * Remove --experimental-wasm-bigint insertion + + * Build with assertions + + * Move verbosity flags back out of LDFLAGS + + * Remove debug print statement + + * Use up to date pyodide docker image + + * Explicitly cast res_call to fix test failure + + * Put back name of main function in cls_longdouble_va.c + + * Fix alignment + + The stack pointer apparently needs to be aligned to 16. There were + some terrible subtle bugs caused by not respecting this. stackAlloc + knows that the stack should be 16 aligned, so we can use stackAlloc(0) + to enforce this. This way if alignment requirements change, as long + as Emscripten updates stackAlloc to continue to enforce them we should + be okay. + + * Fix handling of systems with no Js bigint integration + + When we run the node tests we use node v14 tests (since node v14 is + vendored with Emscripten). Node v14 has no Js bigint integration + unless the --experimental-wasm-bigint flag is passed. So only the + node tests really notice if we get this right. Turns out, it didn't + work. We can't call a JavaScript function with 64 bit integer arguments + without bigint integration. + + In ffi_call, we are trying to call a wasm function that takes 64 bit + integer arguments. dynCall is designed to do this. We need to go back + to tracking the signature when we don't have WASM_BIGINT, and then use + dynCall. This works better now that emscripten can dynamically fill in + extra dynCall wrappers: + https://github.com/emscripten-core/emscripten/pull/17328 + + On the other hand, for the closures we are not getting a function pointer + as a first argument. We need to make our own wasm legalizer adaptor that + splits 64 bit integer arguments and then calls the JavaScript trampoline, + then the JavaScript trampoline reassembles them, calls the closure, then + splits the result (if it's a 64 bit integer) and the adaptor puts it back + together. + + * Improvements to emscripten test shell scripts (#21) + + This fixes the C++ unwinding tests and makes other minor improvements + to the Emscripten test shell scripts. + + * Rename the test folder and move test files into emscripten test folder + + * Use docker image that has autoconf-2.71 + + * Cleanup + + * Pin emscripten 3.1.30 + + * Fix build.sh path + + * Rearrange ci pipeline + + * Fix bpo_38748 test + + * Cleanup + + * Improvements to comments, add static asserts, and update copyright + + * Use `*_js` instead of `*_helper` for EM_JS functions (#22) + + * Minor code simplification + + * Xfail first dejagnu test to work around emscripten cache messages + + See https://github.com/emscripten-core/emscripten/issues/18607 + + * Remove unneeded xfails + + * Shorten conftest.py by using pytest-pyodide + + * Apply formatters and linters to emscripten directory + + * Fix Emscripten xfail hack + + * Fix build-tests script + + * Patch emscripten to quiet info messages + + * Clean up compiler flags in scripts and remove some settings from circleci config + + * Rename emscripten quiet script + + * Add missing export + + * Don't remove go.exp + + * Add reference to emscripten logging issue + + --------- + + Co-authored-by: Kleis Auke Wolthuizen + Co-authored-by: Kleis Auke Wolthuizen + Co-authored-by: Christian Heimes + +commit ce077e5565366171aa1b4438749b0922fce887a4 +Author: serge-sans-paille +Date: Thu Feb 2 14:46:29 2023 +0000 + + Forward declare open_temp_exec_file (#764) + + It's defined in closures.c and used in tramp.c. + Also declare it as an hidden symbol, as it should be. + + Co-authored-by: serge-sans-paille + +commit abf211d1603da9d687455169646e0e9667be17c1 +Author: Anthony Green +Date: Thu Feb 2 07:06:02 2023 -0500 + + Mention HPPA fixes + +commit 222abd0c65babe2174b21753217145f5031a8b91 +Author: Anthony Green +Date: Thu Feb 2 07:04:55 2023 -0500 + + From Dave Anglin: + + This patch is derived from the work done in implementing libffi for 64-bit hppa64-hpux target. Currently, the 32-bit hppa targets do a linear search for the return type of an ffi_call. This is slow and inefficient. A jump table can used to jump directly to the code used to process the return value. In most common cases, the return value can be processed in the jump table itself. + + The patch also fixes return handling for FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16 and FFI_TYPE_SINT16. + +commit e58e22b22386ed0e0a95e97eb8eed016e3f01b02 +Author: Anthony Green +Date: Thu Feb 2 07:02:53 2023 -0500 + + From Dave Anglin: + + A couple of years ago the 32-bit hppa targets were converted from using a trampoline executed on the stack to the function descriptor technique used by ia64. This is more efficient and avoids having to have an executable stack. However, function pointers on 32-bit need the PLABEL bit set in the pointer. It distinguishes between pointers that point directly to the executable code and pointer that point to a function descriptor. We need the later for libffi. But as a result, it is not possible to convert using casts data pointers to function pointers. + + The solution at the time was to set the PLABEL bit in hppa closure pointers using FFI_CLOSURE_PTR. However, I realized recently that this was a bad choice. Packages like python-cffi allocate their own closure pointers, so this isn't going to work well there. + + A better solution is to leave closure pointers unchanged and only set the PLABEL bit in pointers used to point to executable code. + + The attached patch drops the FFI_CLOSURE_PTR and FFI_RESTORE_PTR defines. This allows some cleanup in the hppa closure routines. The FFI_FN define is now used to set the PLABEL bit on hppa. ffi_closure_alloc is modified to set the PLABEL bit in the value set in *code. + + I also added a FFI_CL define to convert a function pointer to a closure pointer. It is only used in one test case. + +commit baa6bbbc176b3c572eaf05b3fae0311df7e5f7b7 +Author: Anthony Green +Date: Thu Feb 2 06:59:46 2023 -0500 + + Add HPPA64 support + +commit e70dd1aa240159bd2050cb1eafffb49cdc1d8b22 +Author: Iain Sandoe +Date: Thu Feb 2 11:44:13 2023 +0000 + + libffi: Fix X86 32b Darwin build and EH frames. (#757) + + This addresses a number of issues in the X86 Darwin 32b port for libffi. + + 1. The pic symbol stubs are weak definitions; the correct section placement + for these depends on the linker version in use. We do not have access + to that information, but we can use the target OS version (assumes that + the user has installed the latest version of xcode available). + When a coalesced section is in use (OS versions earlier than Darwin12 / + OSX 10.8), its name must differ from __TEXT,__text since otherwise that + would correspond to altering the attributes of the .text section (which + produces a diagnostic from the assembler). + Here we use __TEXT, __textcoal_nt for this which is what GCC emits for + these stubs. + For later versions than Darwin 12 (OS X 10.8) we can place the stubs in + the .text section (if we do not we get a diagnostic from clang -cc1as + saying that the use of coalesced sections for this is deprecated). + + 2. The EH frame is specified manually, since there is no support for .cfi_ + directives in 'cctools' assemblers. The implementation needs to provide + offsets for CFA advance, code size and to the CIE as signed values + rather than relocations. However the cctools assembler will produce a + relocation for expressions like ' .long Lxx-Lyy' which then leads to a + link-time error. We correct this by forming the offset values using + ' .set' directives and then assigning the results of them. + + 3. The register numbering used by m32 X86 Darwin EH frames is not the same + as the DWARF debug numbering (the Frame and Stack pointer numbers are + swapped). + + 4. The FDE address encoding used by the system tools is '0x10' (PCrel + abs) + where the value provided was PCrel + sdata4. + + 5. GCC does not use compact unwind at present, and it was not implemented + until Darwin10 / OSX 10.6. There were some issues with function location + in 10.6 so that the solution here suppresses emitting the compact unwind + section until Darwin11 / OSX 10.7. + +commit 7effe99955b228ae828d06fa8d07dc546ef67b1a +Author: Iain Sandoe +Date: Thu Feb 2 11:42:46 2023 +0000 + + Darwin: Search for both shared and convenience libraries in each path. (#761) + + For several Darwin linker versions, the default behaviour is to first traverse + the set of library paths, looking for shared libraries, and then a second time + looking for archives. + + This means that if the library is configured --disable-shared the installed + system version /usr/lib/libffi.dylib will be found before the archive under + test. + + Using the linker option '-search-paths-first' alters the strategy to search each + path for dylib and then archive before moving on to the next. + +commit ebbc5e14cdbfcc24bf3c9bb7b41ee10cd979c535 +Author: serge-sans-paille +Date: Thu Feb 2 11:40:17 2023 +0000 + + Fix signed vs unsigned comparison (#765) + + As reported by -Wsign-compare. In the case of getting the result of + comparing the result of sysconf (_SC_PAGESIZE) to other value, this also + correctly handles edge cases where the above fails and returns -1. + + Co-authored-by: serge-sans-paille + +commit 7611bb4cfe90884b55ad225e0166136a1d2cf22b +Author: Anthony Green +Date: Sun Jan 8 09:01:00 2023 -0500 + + Use checkout@v3, with nodejs 16 + +commit 3a8bb6bb7f51844b890ce6ae44fc6d7c4547fbd0 +Author: YongKang Zhou +Date: Sun Jan 8 21:56:34 2023 +0800 + + fix typo (#758) + + `mingW` -> `MinGW` + +commit 00116b6d0171ba69ffe23d6b5c21c0fdb5907a48 +Author: Alexander Kanavin +Date: Mon Dec 5 03:20:09 2022 +0100 + + arm/sysv: reverted clang VFP mitigation (#747) + + Since commit e3d2812ce43940aacae5bab2d0e965278cb1e7ea, + seperate instructions were used when compiling under clang, + as clang didn't allow the directives at the time. This mitigation + now causes compilation to fail under clang 10, as described by + https://github.com/libffi/libffi/issues/607. Now that + clang supports the LDC and SDC instructions, this mitigation + has been reverted. + + Co-authored-by: Brett Warren + +commit c50c16d0bcb58952840184aa83e62c6d912bf779 +Author: Anthony Green +Date: Sun Nov 20 12:20:40 2022 -0500 + + Fix large struct passing on PA-RISC + +commit c6dc125afba294b9b9613392c492ae18df3ede84 +Author: Anthony Green +Date: Tue Oct 25 10:28:19 2022 -0400 + + Add missing test cases + +commit 2b2f61f6e6a79d46fa277965745a8cd8bb5f04bc +Author: Xavier Claessens +Date: Mon Oct 24 20:39:04 2022 +0200 + + Small build cleanup (#743) + + * configure.ac: Remove some unused checks + + * Fix FFI_API definition + + When doing a static build dllimport/dllexport should be disabled. It was + also using 2 different macros FFI_BUILDING_DLL and FFI_BUILDING for no + reason. + commit f24180be1367f942824365b131ae894b9c769c7d Author: Anthony Green Date: Sun Oct 23 20:17:29 2022 -0400 diff --git a/src/libffi/libffi-3.4.4/ChangeLog.old b/src/libffi/libffi-3.4.6/ChangeLog.old similarity index 100% rename from src/libffi/libffi-3.4.4/ChangeLog.old rename to src/libffi/libffi-3.4.6/ChangeLog.old diff --git a/src/libffi/libffi-3.4.4/LICENSE b/src/libffi/libffi-3.4.6/LICENSE similarity index 94% rename from src/libffi/libffi-3.4.4/LICENSE rename to src/libffi/libffi-3.4.6/LICENSE index 75d1bce11..7282e798c 100644 --- a/src/libffi/libffi-3.4.4/LICENSE +++ b/src/libffi/libffi-3.4.6/LICENSE @@ -1,4 +1,4 @@ -libffi - Copyright (c) 1996-2022 Anthony Green, Red Hat, Inc and others. +libffi - Copyright (c) 1996-2024 Anthony Green, Red Hat, Inc and others. See source files for details. Permission is hereby granted, free of charge, to any person obtaining diff --git a/src/libffi/libffi-3.4.4/LICENSE-BUILDTOOLS b/src/libffi/libffi-3.4.6/LICENSE-BUILDTOOLS similarity index 100% rename from src/libffi/libffi-3.4.4/LICENSE-BUILDTOOLS rename to src/libffi/libffi-3.4.6/LICENSE-BUILDTOOLS diff --git a/src/libffi/libffi-3.4.4/Makefile.am b/src/libffi/libffi-3.4.6/Makefile.am similarity index 98% rename from src/libffi/libffi-3.4.4/Makefile.am rename to src/libffi/libffi-3.4.6/Makefile.am index a4a4887cb..3de0bea47 100644 --- a/src/libffi/libffi-3.4.4/Makefile.am +++ b/src/libffi/libffi-3.4.6/Makefile.am @@ -62,6 +62,7 @@ noinst_HEADERS = src/aarch64/ffitarget.h src/aarch64/internal.h \ src/s390/ffitarget.h src/s390/internal.h src/sh/ffitarget.h \ src/sh64/ffitarget.h src/sparc/ffitarget.h \ src/sparc/internal.h src/tile/ffitarget.h src/vax/ffitarget.h \ + src/wasm32/ffitarget.h \ src/x86/ffitarget.h src/x86/internal.h src/x86/internal64.h \ src/x86/asmnames.h src/xtensa/ffitarget.h src/dlmalloc.c \ src/kvx/ffitarget.h src/kvx/asm.h \ @@ -81,7 +82,7 @@ EXTRA_libffi_la_SOURCES = src/aarch64/ffi.c src/aarch64/sysv.S \ src/mips/n32.S src/moxie/ffi.c src/moxie/eabi.S \ src/nios2/ffi.c src/nios2/sysv.S src/or1k/ffi.c \ src/or1k/sysv.S src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ - src/powerpc/ffi.c src/powerpc/ffi_sysv.c \ + src/pa/hpux64.S src/powerpc/ffi.c src/powerpc/ffi_sysv.c \ src/powerpc/ffi_linux64.c src/powerpc/sysv.S \ src/powerpc/linux64.S src/powerpc/linux64_closure.S \ src/powerpc/ppc_closure.S src/powerpc/aix.S \ @@ -92,6 +93,7 @@ EXTRA_libffi_la_SOURCES = src/aarch64/ffi.c src/aarch64/sysv.S \ src/sh64/sysv.S src/sparc/ffi.c src/sparc/ffi64.c \ src/sparc/v8.S src/sparc/v9.S src/tile/ffi.c src/tile/tile.S \ src/vax/ffi.c src/vax/elfbsd.S src/x86/ffi.c src/x86/sysv.S \ + src/wasm32/ffi.c \ src/x86/ffiw64.c src/x86/win64.S src/x86/ffi64.c \ src/x86/unix64.S src/x86/sysv_intel.S src/x86/win64_intel.S \ src/xtensa/ffi.c src/xtensa/sysv.S src/kvx/ffi.c \ diff --git a/src/libffi/libffi-3.4.4/Makefile.in b/src/libffi/libffi-3.4.6/Makefile.in similarity index 98% rename from src/libffi/libffi-3.4.4/Makefile.in rename to src/libffi/libffi-3.4.6/Makefile.in index 86eb4a549..66308b78b 100644 --- a/src/libffi/libffi-3.4.4/Makefile.in +++ b/src/libffi/libffi-3.4.6/Makefile.in @@ -224,7 +224,8 @@ am__depfiles_remade = src/$(DEPDIR)/closures.Plo \ src/nios2/$(DEPDIR)/ffi.Plo src/nios2/$(DEPDIR)/sysv.Plo \ src/or1k/$(DEPDIR)/ffi.Plo src/or1k/$(DEPDIR)/sysv.Plo \ src/pa/$(DEPDIR)/ffi.Plo src/pa/$(DEPDIR)/hpux32.Plo \ - src/pa/$(DEPDIR)/linux.Plo src/powerpc/$(DEPDIR)/aix.Plo \ + src/pa/$(DEPDIR)/hpux64.Plo src/pa/$(DEPDIR)/linux.Plo \ + src/powerpc/$(DEPDIR)/aix.Plo \ src/powerpc/$(DEPDIR)/aix_closure.Plo \ src/powerpc/$(DEPDIR)/darwin.Plo \ src/powerpc/$(DEPDIR)/darwin_closure.Plo \ @@ -243,12 +244,12 @@ am__depfiles_remade = src/$(DEPDIR)/closures.Plo \ src/sparc/$(DEPDIR)/ffi64.Plo src/sparc/$(DEPDIR)/v8.Plo \ src/sparc/$(DEPDIR)/v9.Plo src/tile/$(DEPDIR)/ffi.Plo \ src/tile/$(DEPDIR)/tile.Plo src/vax/$(DEPDIR)/elfbsd.Plo \ - src/vax/$(DEPDIR)/ffi.Plo src/x86/$(DEPDIR)/ffi.Plo \ - src/x86/$(DEPDIR)/ffi64.Plo src/x86/$(DEPDIR)/ffiw64.Plo \ - src/x86/$(DEPDIR)/sysv.Plo src/x86/$(DEPDIR)/sysv_intel.Plo \ - src/x86/$(DEPDIR)/unix64.Plo src/x86/$(DEPDIR)/win64.Plo \ - src/x86/$(DEPDIR)/win64_intel.Plo src/xtensa/$(DEPDIR)/ffi.Plo \ - src/xtensa/$(DEPDIR)/sysv.Plo + src/vax/$(DEPDIR)/ffi.Plo src/wasm32/$(DEPDIR)/ffi.Plo \ + src/x86/$(DEPDIR)/ffi.Plo src/x86/$(DEPDIR)/ffi64.Plo \ + src/x86/$(DEPDIR)/ffiw64.Plo src/x86/$(DEPDIR)/sysv.Plo \ + src/x86/$(DEPDIR)/sysv_intel.Plo src/x86/$(DEPDIR)/unix64.Plo \ + src/x86/$(DEPDIR)/win64.Plo src/x86/$(DEPDIR)/win64_intel.Plo \ + src/xtensa/$(DEPDIR)/ffi.Plo src/xtensa/$(DEPDIR)/sysv.Plo am__mv = mv -f CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) @@ -376,7 +377,6 @@ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LTLDFLAGS = @AM_LTLDFLAGS@ @@ -567,6 +567,7 @@ noinst_HEADERS = src/aarch64/ffitarget.h src/aarch64/internal.h \ src/s390/ffitarget.h src/s390/internal.h src/sh/ffitarget.h \ src/sh64/ffitarget.h src/sparc/ffitarget.h \ src/sparc/internal.h src/tile/ffitarget.h src/vax/ffitarget.h \ + src/wasm32/ffitarget.h \ src/x86/ffitarget.h src/x86/internal.h src/x86/internal64.h \ src/x86/asmnames.h src/xtensa/ffitarget.h src/dlmalloc.c \ src/kvx/ffitarget.h src/kvx/asm.h \ @@ -586,7 +587,7 @@ EXTRA_libffi_la_SOURCES = src/aarch64/ffi.c src/aarch64/sysv.S \ src/mips/n32.S src/moxie/ffi.c src/moxie/eabi.S \ src/nios2/ffi.c src/nios2/sysv.S src/or1k/ffi.c \ src/or1k/sysv.S src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S \ - src/powerpc/ffi.c src/powerpc/ffi_sysv.c \ + src/pa/hpux64.S src/powerpc/ffi.c src/powerpc/ffi_sysv.c \ src/powerpc/ffi_linux64.c src/powerpc/sysv.S \ src/powerpc/linux64.S src/powerpc/linux64_closure.S \ src/powerpc/ppc_closure.S src/powerpc/aix.S \ @@ -597,6 +598,7 @@ EXTRA_libffi_la_SOURCES = src/aarch64/ffi.c src/aarch64/sysv.S \ src/sh64/sysv.S src/sparc/ffi.c src/sparc/ffi64.c \ src/sparc/v8.S src/sparc/v9.S src/tile/ffi.c src/tile/tile.S \ src/vax/ffi.c src/vax/elfbsd.S src/x86/ffi.c src/x86/sysv.S \ + src/wasm32/ffi.c \ src/x86/ffiw64.c src/x86/win64.S src/x86/ffi64.c \ src/x86/unix64.S src/x86/sysv_intel.S src/x86/win64_intel.S \ src/xtensa/ffi.c src/xtensa/sysv.S src/kvx/ffi.c \ @@ -942,6 +944,8 @@ src/pa/linux.lo: src/pa/$(am__dirstamp) \ src/pa/$(DEPDIR)/$(am__dirstamp) src/pa/hpux32.lo: src/pa/$(am__dirstamp) \ src/pa/$(DEPDIR)/$(am__dirstamp) +src/pa/hpux64.lo: src/pa/$(am__dirstamp) \ + src/pa/$(DEPDIR)/$(am__dirstamp) src/powerpc/$(am__dirstamp): @$(MKDIR_P) src/powerpc @: > src/powerpc/$(am__dirstamp) @@ -1055,6 +1059,14 @@ src/x86/ffi.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/sysv.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) +src/wasm32/$(am__dirstamp): + @$(MKDIR_P) src/wasm32 + @: > src/wasm32/$(am__dirstamp) +src/wasm32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) src/wasm32/$(DEPDIR) + @: > src/wasm32/$(DEPDIR)/$(am__dirstamp) +src/wasm32/ffi.lo: src/wasm32/$(am__dirstamp) \ + src/wasm32/$(DEPDIR)/$(am__dirstamp) src/x86/ffiw64.lo: src/x86/$(am__dirstamp) \ src/x86/$(DEPDIR)/$(am__dirstamp) src/x86/win64.lo: src/x86/$(am__dirstamp) \ @@ -1168,6 +1180,8 @@ mostlyclean-compile: -rm -f src/tile/*.lo -rm -f src/vax/*.$(OBJEXT) -rm -f src/vax/*.lo + -rm -f src/wasm32/*.$(OBJEXT) + -rm -f src/wasm32/*.lo -rm -f src/x86/*.$(OBJEXT) -rm -f src/x86/*.lo -rm -f src/xtensa/*.$(OBJEXT) @@ -1230,6 +1244,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/or1k/$(DEPDIR)/sysv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/ffi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/hpux32.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/hpux64.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/pa/$(DEPDIR)/linux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/powerpc/$(DEPDIR)/aix_closure.Plo@am__quote@ # am--include-marker @@ -1259,6 +1274,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/tile/$(DEPDIR)/tile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/vax/$(DEPDIR)/elfbsd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/vax/$(DEPDIR)/ffi.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/wasm32/$(DEPDIR)/ffi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffi64.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/x86/$(DEPDIR)/ffiw64.Plo@am__quote@ # am--include-marker @@ -1360,6 +1376,7 @@ clean-libtool: -rm -rf src/sparc/.libs src/sparc/_libs -rm -rf src/tile/.libs src/tile/_libs -rm -rf src/vax/.libs src/vax/_libs + -rm -rf src/wasm32/.libs src/wasm32/_libs -rm -rf src/x86/.libs src/x86/_libs -rm -rf src/xtensa/.libs src/xtensa/_libs @@ -1788,6 +1805,8 @@ distclean-generic: -rm -f src/tile/$(am__dirstamp) -rm -f src/vax/$(DEPDIR)/$(am__dirstamp) -rm -f src/vax/$(am__dirstamp) + -rm -f src/wasm32/$(DEPDIR)/$(am__dirstamp) + -rm -f src/wasm32/$(am__dirstamp) -rm -f src/x86/$(DEPDIR)/$(am__dirstamp) -rm -f src/x86/$(am__dirstamp) -rm -f src/xtensa/$(DEPDIR)/$(am__dirstamp) @@ -1858,6 +1877,7 @@ distclean: distclean-recursive -rm -f src/or1k/$(DEPDIR)/sysv.Plo -rm -f src/pa/$(DEPDIR)/ffi.Plo -rm -f src/pa/$(DEPDIR)/hpux32.Plo + -rm -f src/pa/$(DEPDIR)/hpux64.Plo -rm -f src/pa/$(DEPDIR)/linux.Plo -rm -f src/powerpc/$(DEPDIR)/aix.Plo -rm -f src/powerpc/$(DEPDIR)/aix_closure.Plo @@ -1887,6 +1907,7 @@ distclean: distclean-recursive -rm -f src/tile/$(DEPDIR)/tile.Plo -rm -f src/vax/$(DEPDIR)/elfbsd.Plo -rm -f src/vax/$(DEPDIR)/ffi.Plo + -rm -f src/wasm32/$(DEPDIR)/ffi.Plo -rm -f src/x86/$(DEPDIR)/ffi.Plo -rm -f src/x86/$(DEPDIR)/ffi64.Plo -rm -f src/x86/$(DEPDIR)/ffiw64.Plo @@ -1998,6 +2019,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/or1k/$(DEPDIR)/sysv.Plo -rm -f src/pa/$(DEPDIR)/ffi.Plo -rm -f src/pa/$(DEPDIR)/hpux32.Plo + -rm -f src/pa/$(DEPDIR)/hpux64.Plo -rm -f src/pa/$(DEPDIR)/linux.Plo -rm -f src/powerpc/$(DEPDIR)/aix.Plo -rm -f src/powerpc/$(DEPDIR)/aix_closure.Plo @@ -2027,6 +2049,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f src/tile/$(DEPDIR)/tile.Plo -rm -f src/vax/$(DEPDIR)/elfbsd.Plo -rm -f src/vax/$(DEPDIR)/ffi.Plo + -rm -f src/wasm32/$(DEPDIR)/ffi.Plo -rm -f src/x86/$(DEPDIR)/ffi.Plo -rm -f src/x86/$(DEPDIR)/ffi64.Plo -rm -f src/x86/$(DEPDIR)/ffiw64.Plo diff --git a/src/libffi/libffi-3.4.4/README.md b/src/libffi/libffi-3.4.6/README.md similarity index 95% rename from src/libffi/libffi-3.4.4/README.md rename to src/libffi/libffi-3.4.6/README.md index f24a0f7b8..23199b9ed 100644 --- a/src/libffi/libffi-3.4.4/README.md +++ b/src/libffi/libffi-3.4.6/README.md @@ -1,5 +1,5 @@ -libffi-3.4.4 was released on October 23, 2022. Check the libffi web +libffi-3.4.6 was released on February 18, 2024. Check the libffi web page for updates: . @@ -50,6 +50,8 @@ tested: | Alpha | Linux | GCC | | Alpha | Tru64 | GCC | | ARC | Linux | GCC | +| ARC32 | Linux | GCC | +| ARC64 | Linux | GCC | | ARM | Linux | GCC | | ARM | iOS | GCC | | ARM | Windows | MSVC | @@ -57,6 +59,7 @@ tested: | Blackfin | uClinux | GCC | | CSKY | Linux | GCC | | HPPA | HPUX | GCC | +| HPPA64 | HPUX | GCC | | KVX | Linux | GCC | | IA-64 | Linux | GCC | | LoongArch64 | Linux | GCC | @@ -95,6 +98,7 @@ tested: | SPARC64 | Solaris | Oracle Solaris Studio C | | TILE-Gx/TILEPro | Linux | GCC | | VAX | OpenBSD/vax | GCC | +| WASM32 | Emscripten | EMCC | | X86 | FreeBSD | GCC | | X86 | GNU HURD | GCC | | X86 | Interix | GCC | @@ -105,14 +109,14 @@ tested: | X86 | Solaris | GCC | | X86 | Solaris | Oracle Solaris Studio C | | X86 | Windows/Cygwin | GCC | -| X86 | Windows/MingW | GCC | +| X86 | Windows/MinGW | GCC | | X86-64 | FreeBSD | GCC | | X86-64 | Linux | GCC | | X86-64 | Linux/x32 | GCC | | X86-64 | OpenBSD | GCC | | X86-64 | Solaris | Oracle Solaris Studio C | | X86-64 | Windows/Cygwin | GCC | -| X86-64 | Windows/MingW | GCC | +| X86-64 | Windows/MinGW | GCC | | X86-64 | Mac OSX | GCC | | Xtensa | Linux | GCC | @@ -152,7 +156,7 @@ It's also possible to build libffi on Windows platforms with Microsoft's Visual C++ compiler. In this case, use the msvcc.sh wrapper script during configuration like so: - path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL" + path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" CXXCPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL" For 64-bit Windows builds, use ``CC="path/to/msvcc.sh -m64"`` and ``CXX="path/to/msvcc.sh -m64"``. You may also need to specify @@ -195,6 +199,17 @@ History See the git log for details at http://github.com/libffi/libffi. + 3.4.6 Feb-18-2024 + Fix long double regression on mips64 and alpha. + + 3.4.5 Feb-15-2024 + Add support for wasm32. + Add support for aarch64 branch target identification (bti). + Add support for ARCv3: ARC32 & ARC64. + Add support for HPPA64, and many HPPA fixes. + Add support for Haikuos on PowerPC. + Fixes for AIX, loongson, MIPS, power, sparc64, and x86 Darwin. + 3.4.4 Oct-23-2022 Important aarch64 fixes, including support for linux builds with Link Time Optimization (-flto). @@ -472,6 +487,7 @@ developers: nios ii Sandra Loosemore openrisc Sebastian Macke pa Randolph Chung, Dave Anglin, Andreas Tobler + pa64 Dave Anglin powerpc Geoffrey Keating, Andreas Tobler, David Edelsohn, John Hornkvist powerpc64 Jakub Jelinek @@ -482,6 +498,7 @@ developers: sparc Anthony Green, Gordon Irlam tile-gx/tilepro Walter Lee vax Miod Vallat + wasm32 Hood Chatham, Brion Vibber, Kleis Auke Wolthuizen x86 Anthony Green, Jon Beniston x86-64 Bo Thorsen xtensa Chris Zankel diff --git a/src/libffi/libffi-3.4.4/acinclude.m4 b/src/libffi/libffi-3.4.6/acinclude.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/acinclude.m4 rename to src/libffi/libffi-3.4.6/acinclude.m4 diff --git a/src/libffi/libffi-3.4.4/aclocal.m4 b/src/libffi/libffi-3.4.6/aclocal.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/aclocal.m4 rename to src/libffi/libffi-3.4.6/aclocal.m4 diff --git a/src/libffi/libffi-3.4.4/compile b/src/libffi/libffi-3.4.6/compile similarity index 100% rename from src/libffi/libffi-3.4.4/compile rename to src/libffi/libffi-3.4.6/compile diff --git a/src/libffi/libffi-3.4.4/config.guess b/src/libffi/libffi-3.4.6/config.guess similarity index 100% rename from src/libffi/libffi-3.4.4/config.guess rename to src/libffi/libffi-3.4.6/config.guess diff --git a/src/libffi/libffi-3.4.4/config.sub b/src/libffi/libffi-3.4.6/config.sub old mode 100644 new mode 100755 similarity index 99% rename from src/libffi/libffi-3.4.4/config.sub rename to src/libffi/libffi-3.4.6/config.sub index dba16e84c..630b5d9c4 --- a/src/libffi/libffi-3.4.4/config.sub +++ b/src/libffi/libffi-3.4.6/config.sub @@ -1126,7 +1126,7 @@ case $cpu-$vendor in xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; - arm64-* | aarch64le-*) + arm64-* | arm64_32-* | aarch64le-*) cpu=aarch64 ;; @@ -1728,7 +1728,7 @@ case $os in | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ - | os9* | macos* | osx* | ios* \ + | os9* | macos* | osx* | ios* | watchos* | tvos* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ @@ -1790,6 +1790,8 @@ case $kernel-$os in ;; os2-emx) ;; + ios*-simulator | tvos*-simulator | watchos*-simulator) + ;; *-eabi* | *-gnueabi*) ;; -*) diff --git a/src/libffi/libffi-3.4.4/configure b/src/libffi/libffi-3.4.6/configure similarity index 98% rename from src/libffi/libffi-3.4.4/configure rename to src/libffi/libffi-3.4.6/configure index a43e342a9..bcbbd4448 100755 --- a/src/libffi/libffi-3.4.4/configure +++ b/src/libffi/libffi-3.4.6/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libffi 3.4.4. +# Generated by GNU Autoconf 2.71 for libffi 3.4.6. # # Report bugs to . # @@ -621,8 +621,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libffi' PACKAGE_TARNAME='libffi' -PACKAGE_VERSION='3.4.4' -PACKAGE_STRING='libffi 3.4.4' +PACKAGE_VERSION='3.4.6' +PACKAGE_STRING='libffi 3.4.6' PACKAGE_BUGREPORT='http://github.com/libffi/libffi/issues' PACKAGE_URL='' @@ -686,7 +686,6 @@ FFI_EXEC_TRAMPOLINE_TABLE_TRUE sys_symbol_underscore HAVE_LONG_DOUBLE_VARIANT HAVE_LONG_DOUBLE -ALLOCA AM_LTLDFLAGS AM_RUNTESTFLAGS TESTSUBDIR_FALSE @@ -1413,7 +1412,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libffi 3.4.4 to adapt to many kinds of systems. +\`configure' configures libffi 3.4.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1485,7 +1484,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libffi 3.4.4:";; + short | recursive ) echo "Configuration of libffi 3.4.6:";; esac cat <<\_ACEOF @@ -1621,7 +1620,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libffi configure 3.4.4 +libffi configure 3.4.6 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2171,63 +2170,6 @@ rm -f conftest.val as_fn_set_status $ac_retval } # ac_fn_c_compute_int - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type ac_configure_args_raw= for ac_arg do @@ -2252,7 +2194,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libffi $as_me 3.4.4, which was +It was created by libffi $as_me 3.4.6, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3971,7 +3913,7 @@ fi # Define the identity of the package. PACKAGE='libffi' - VERSION='3.4.4' + VERSION='3.4.6' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -5614,11 +5556,11 @@ if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} +if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop - ac_cv_prog_cxx_11=no + ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5660,11 +5602,11 @@ if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} +if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop - ac_cv_prog_cxx_98=no + ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18677,180 +18619,6 @@ then : fi -ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes -then : - printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mkostemp" "ac_cv_func_mkostemp" -if test "x$ac_cv_func_mkostemp" = xyes -then : - printf "%s\n" "#define HAVE_MKOSTEMP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" -if test "x$ac_cv_func_mkstemp" = xyes -then : - printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h - -fi - - -ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = xyes -then : - libffi_header_sys_mman_h=yes -else $as_nop - libffi_header_sys_mman_h=no -fi - -ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" -if test "x$ac_cv_func_mmap" = xyes -then : - libffi_func_mmap=yes -else $as_nop - libffi_func_mmap=no -fi - -if test "$libffi_header_sys_mman_h" != yes \ - || test "$libffi_func_mmap" != yes; then - ac_cv_func_mmap_file=no - ac_cv_func_mmap_dev_zero=no - ac_cv_func_mmap_anon=no -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether read-only mmap of a plain file works" >&5 -printf %s "checking whether read-only mmap of a plain file works... " >&6; } -if test ${ac_cv_func_mmap_file+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Add a system to this blacklist if - # mmap(0, stat_size, PROT_READ, MAP_PRIVATE, fd, 0) doesn't return a - # memory area containing the same data that you'd get if you applied - # read() to the same fd. The only system known to have a problem here - # is VMS, where text files have record structure. - case "$host_os" in - vms* | ultrix*) - ac_cv_func_mmap_file=no ;; - *) - ac_cv_func_mmap_file=yes;; - esac -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_file" >&5 -printf "%s\n" "$ac_cv_func_mmap_file" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mmap from /dev/zero works" >&5 -printf %s "checking whether mmap from /dev/zero works... " >&6; } -if test ${ac_cv_func_mmap_dev_zero+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Add a system to this blacklist if it has mmap() but /dev/zero - # does not exist, or if mmapping /dev/zero does not give anonymous - # zeroed pages with both the following properties: - # 1. If you map N consecutive pages in with one call, and then - # unmap any subset of those pages, the pages that were not - # explicitly unmapped remain accessible. - # 2. If you map two adjacent blocks of memory and then unmap them - # both at once, they must both go away. - # Systems known to be in this category are Windows (all variants), - # VMS, and Darwin. - case "$host_os" in - vms* | cygwin* | pe | mingw* | darwin* | ultrix* | hpux10* | hpux11.00) - ac_cv_func_mmap_dev_zero=no ;; - *) - ac_cv_func_mmap_dev_zero=yes;; - esac -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_dev_zero" >&5 -printf "%s\n" "$ac_cv_func_mmap_dev_zero" >&6; } - - # Unlike /dev/zero, the MAP_ANON(YMOUS) defines can be probed for. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MAP_ANON(YMOUS)" >&5 -printf %s "checking for MAP_ANON(YMOUS)... " >&6; } -if test ${ac_cv_decl_map_anon+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include - -#ifndef MAP_ANONYMOUS -#define MAP_ANONYMOUS MAP_ANON -#endif - -int -main (void) -{ -int n = MAP_ANONYMOUS; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_decl_map_anon=yes -else $as_nop - ac_cv_decl_map_anon=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_map_anon" >&5 -printf "%s\n" "$ac_cv_decl_map_anon" >&6; } - - if test $ac_cv_decl_map_anon = no; then - ac_cv_func_mmap_anon=no - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mmap with MAP_ANON(YMOUS) works" >&5 -printf %s "checking whether mmap with MAP_ANON(YMOUS) works... " >&6; } -if test ${ac_cv_func_mmap_anon+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Add a system to this blacklist if it has mmap() and MAP_ANON or - # MAP_ANONYMOUS, but using mmap(..., MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) - # doesn't give anonymous zeroed pages with the same properties listed - # above for use of /dev/zero. - # Systems known to be in this category are Windows, VMS, and SCO Unix. - case "$host_os" in - vms* | cygwin* | pe | mingw* | sco* | udk* ) - ac_cv_func_mmap_anon=no ;; - *) - ac_cv_func_mmap_anon=yes;; - esac -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_anon" >&5 -printf "%s\n" "$ac_cv_func_mmap_anon" >&6; } - fi -fi - -if test $ac_cv_func_mmap_file = yes; then - -printf "%s\n" "#define HAVE_MMAP_FILE 1" >>confdefs.h - -fi -if test $ac_cv_func_mmap_dev_zero = yes; then - -printf "%s\n" "#define HAVE_MMAP_DEV_ZERO 1" >>confdefs.h - -fi -if test $ac_cv_func_mmap_anon = yes; then - -printf "%s\n" "#define HAVE_MMAP_ANON 1" >>confdefs.h - -fi - - if test -d $srcdir/testsuite; then TESTSUBDIR_TRUE= TESTSUBDIR_FALSE='#' @@ -18956,162 +18724,10 @@ then : fi -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : - -else $as_nop - -printf "%s\n" "#define size_t unsigned int" >>confdefs.h - -fi - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 -printf %s "checking for working alloca.h... " >&6; } -if test ${ac_cv_working_alloca_h+y} +ac_fn_c_check_header_compile "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default" +if test "x$ac_cv_header_alloca_h" = xyes then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -char *p = (char *) alloca (2 * sizeof (int)); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_working_alloca_h=yes -else $as_nop - ac_cv_working_alloca_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 -printf "%s\n" "$ac_cv_working_alloca_h" >&6; } -if test $ac_cv_working_alloca_h = yes; then - -printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 -printf %s "checking for alloca... " >&6; } -if test ${ac_cv_func_alloca_works+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test $ac_cv_working_alloca_h = yes; then - ac_cv_func_alloca_works=yes -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifndef alloca -# ifdef __GNUC__ -# define alloca __builtin_alloca -# elif defined _MSC_VER -# include -# define alloca _alloca -# else -# ifdef __cplusplus -extern "C" -# endif -void *alloca (size_t); -# endif -#endif - -int -main (void) -{ -char *p = (char *) alloca (1); - if (p) return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_func_alloca_works=yes -else $as_nop - ac_cv_func_alloca_works=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 -printf "%s\n" "$ac_cv_func_alloca_works" >&6; } -fi - -if test $ac_cv_func_alloca_works = yes; then - -printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h - -else - # The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. - -ALLOCA=\${LIBOBJDIR}alloca.$ac_objext - -printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 -printf %s "checking stack direction for C alloca... " >&6; } -if test ${ac_cv_c_stack_direction+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - ac_cv_c_stack_direction=0 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO" -then : - ac_cv_c_stack_direction=1 -else $as_nop - ac_cv_c_stack_direction=-1 -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 -printf "%s\n" "$ac_cv_c_stack_direction" >&6; } -printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h - + printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi @@ -19877,7 +19493,7 @@ else $as_nop ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then - if $EGREP '(\.hidden|\.private_extern).*foo' conftest.s >/dev/null; then + if $EGREP '(\.hidden|\.private_extern).*foo|foo.*,hidden' conftest.s >/dev/null; then libffi_cv_hidden_visibility_attribute=yes fi fi @@ -20942,7 +20558,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libffi $as_me 3.4.4, which was +This file was extended by libffi $as_me 3.4.6, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21010,7 +20626,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libffi config.status 3.4.4 +libffi config.status 3.4.6 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/src/libffi/libffi-3.4.4/configure.ac b/src/libffi/libffi-3.4.6/configure.ac similarity index 98% rename from src/libffi/libffi-3.4.4/configure.ac rename to src/libffi/libffi-3.4.6/configure.ac index 7e8cd98a4..816bfd666 100644 --- a/src/libffi/libffi-3.4.4/configure.ac +++ b/src/libffi/libffi-3.4.6/configure.ac @@ -2,7 +2,7 @@ dnl Process this with autoconf to create configure AC_PREREQ([2.71]) -AC_INIT([libffi],[3.4.4],[http://github.com/libffi/libffi/issues]) +AC_INIT([libffi],[3.4.6],[http://github.com/libffi/libffi/issues]) AC_CONFIG_HEADERS([fficonfig.h]) AC_CANONICAL_TARGET @@ -70,10 +70,6 @@ AM_MAINTAINER_MODE AC_CHECK_HEADERS(sys/memfd.h) AC_CHECK_FUNCS([memfd_create]) -AC_CHECK_HEADERS(sys/mman.h) -AC_CHECK_FUNCS([mmap mkostemp mkstemp]) -AC_FUNC_MMAP_BLACKLIST - dnl The -no-testsuite modules omit the test subdir. AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite) @@ -99,7 +95,7 @@ AC_CHECK_INCLUDES_DEFAULT AC_PROG_EGREP AC_CHECK_FUNCS(memcpy) -AC_FUNC_ALLOCA +AC_CHECK_HEADERS(alloca.h) AC_CHECK_SIZEOF(double) AC_CHECK_SIZEOF(long double) @@ -302,7 +298,7 @@ if test "x$GCC" = "xyes"; then echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1 ; }' > conftest.c libffi_cv_hidden_visibility_attribute=no if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then - if $EGREP '(\.hidden|\.private_extern).*foo' conftest.s >/dev/null; then + if $EGREP '(\.hidden|\.private_extern).*foo|foo.*,hidden' conftest.s >/dev/null; then libffi_cv_hidden_visibility_attribute=yes fi fi diff --git a/src/libffi/libffi-3.4.4/configure.host b/src/libffi/libffi-3.4.6/configure.host similarity index 98% rename from src/libffi/libffi-3.4.4/configure.host rename to src/libffi/libffi-3.4.6/configure.host index f23716f75..4cc69be4f 100644 --- a/src/libffi/libffi-3.4.4/configure.host +++ b/src/libffi/libffi-3.4.6/configure.host @@ -73,6 +73,7 @@ case "${host}" in ;; hppa*64-*-hpux*) TARGET=PA64_HPUX; TARGETDIR=pa + SOURCES="ffi64.c hpux64.S" ;; hppa*-*-hpux*) TARGET=PA_HPUX; TARGETDIR=pa @@ -204,7 +205,7 @@ case "${host}" in powerpc-*-eabi*) TARGET=POWERPC; TARGETDIR=powerpc ;; - powerpc-*-beos*) + powerpc-*-beos* | powerpc-*-haiku*) TARGET=POWERPC; TARGETDIR=powerpc ;; powerpc-*-darwin* | powerpc64-*-darwin*) @@ -264,6 +265,11 @@ case "${host}" in SOURCES="ffi.c elfbsd.S" ;; + wasm32-*-*) + TARGET=wasm32; TARGETDIR=wasm32 + SOURCES="ffi.c" + ;; + xtensa*-*) TARGET=XTENSA; TARGETDIR=xtensa SOURCES="ffi.c sysv.S" diff --git a/src/libffi/libffi-3.4.4/depcomp b/src/libffi/libffi-3.4.6/depcomp similarity index 100% rename from src/libffi/libffi-3.4.4/depcomp rename to src/libffi/libffi-3.4.6/depcomp diff --git a/src/libffi/libffi-3.4.4/doc/Makefile.am b/src/libffi/libffi-3.4.6/doc/Makefile.am similarity index 100% rename from src/libffi/libffi-3.4.4/doc/Makefile.am rename to src/libffi/libffi-3.4.6/doc/Makefile.am diff --git a/src/libffi/libffi-3.4.4/doc/Makefile.in b/src/libffi/libffi-3.4.6/doc/Makefile.in similarity index 99% rename from src/libffi/libffi-3.4.4/doc/Makefile.in rename to src/libffi/libffi-3.4.6/doc/Makefile.in index bccd187bb..95baf7668 100644 --- a/src/libffi/libffi-3.4.4/doc/Makefile.in +++ b/src/libffi/libffi-3.4.6/doc/Makefile.in @@ -204,7 +204,6 @@ am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in mdate-sh texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LTLDFLAGS = @AM_LTLDFLAGS@ diff --git a/src/libffi/libffi-3.4.4/doc/libffi.info b/src/libffi/libffi-3.4.6/doc/libffi.info similarity index 67% rename from src/libffi/libffi-3.4.4/doc/libffi.info rename to src/libffi/libffi-3.4.6/doc/libffi.info index 6b9580ad6..2afb9c7fa 100644 --- a/src/libffi/libffi-3.4.4/doc/libffi.info +++ b/src/libffi/libffi-3.4.6/doc/libffi.info @@ -1,13 +1,14 @@ -This is libffi.info, produced by makeinfo version 6.8 from libffi.texi. +This is libffi.info, produced by makeinfo version 7.0.3 from +libffi.texi. This manual is for libffi, a portable foreign function interface library. - Copyright (C) 2008-2019, 2021, 2022 Anthony Green and Red Hat, Inc. + Copyright © 2008–2024 Anthony Green and Red Hat, Inc. 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 +“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 @@ -16,7 +17,7 @@ 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, + 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 @@ -38,11 +39,11 @@ libffi This manual is for libffi, a portable foreign function interface library. - Copyright (C) 2008-2019, 2021, 2022 Anthony Green and Red Hat, Inc. + Copyright © 2008–2024 Anthony Green and Red Hat, Inc. 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 +“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 @@ -51,7 +52,7 @@ 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, + 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 @@ -64,7 +65,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * Introduction:: What is libffi? * Using libffi:: How to use libffi. * Memory Usage:: Where memory for closures comes from. -* Missing Features:: Things libffi can't do. +* Missing Features:: Things libffi can’t do. * Index:: Index.  @@ -75,29 +76,29 @@ File: libffi.info, Node: Introduction, Next: Using libffi, Prev: Top, Up: To Compilers for high level languages generate code that follow certain conventions. These conventions are necessary, in part, for separate -compilation to work. One such convention is the "calling convention". +compilation to work. One such convention is the “calling convention”. The calling convention is a set of assumptions made by the compiler about where function arguments will be found on entry to a function. A calling convention also specifies where the return value for a function -is found. The calling convention is also sometimes called the "ABI" or -"Application Binary Interface". +is found. The calling convention is also sometimes called the “ABI” or +“Application Binary Interface”. Some programs may not know at the time of compilation what arguments are to be passed to a function. For instance, an interpreter may be told at run-time about the number and types of arguments used to call a -given function. 'libffi' can be used in such programs to provide a +given function. ‘libffi’ can be used in such programs to provide a bridge from the interpreter program to compiled code. - The 'libffi' library provides a portable, high level programming + The ‘libffi’ library provides a portable, high level programming interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run time. FFI stands for Foreign Function Interface. A foreign function interface is the popular name for the interface that allows code written -in one language to call code written in another language. The 'libffi' +in one language to call code written in another language. The ‘libffi’ library really only provides the lowest, machine dependent layer of a fully featured foreign function interface. A layer must exist above -'libffi' that handles type conversions for values passed between the two +‘libffi’ that handles type conversions for values passed between the two languages.  @@ -122,45 +123,45 @@ File: libffi.info, Node: The Basics, Next: Simple Example, Up: Using libffi 2.1 The Basics ============== -'libffi' assumes that you have a pointer to the function you wish to +‘libffi’ assumes that you have a pointer to the function you wish to call and that you know the number and types of arguments to pass it, as well as the return type of the function. - The first thing you must do is create an 'ffi_cif' object that + The first thing you must do is create an ‘ffi_cif’ object that matches the signature of the function you wish to call. This is a separate step because it is common to make multiple calls using a single -'ffi_cif'. The "cif" in 'ffi_cif' stands for Call InterFace. To -prepare a call interface object, use the function 'ffi_prep_cif'. +‘ffi_cif’. The “cif” in ‘ffi_cif’ stands for Call InterFace. To +prepare a call interface object, use the function ‘ffi_prep_cif’. -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI, unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES) This initializes CIF according to the given parameters. - ABI is the ABI to use; normally 'FFI_DEFAULT_ABI' is what you want. + ABI is the ABI to use; normally ‘FFI_DEFAULT_ABI’ is what you want. *note Multiple ABIs:: for more information. NARGS is the number of arguments that this function accepts. - RTYPE is a pointer to an 'ffi_type' structure that describes the + RTYPE is a pointer to an ‘ffi_type’ structure that describes the return type of the function. *Note Types::. - ARGTYPES is a vector of 'ffi_type' pointers. ARGTYPES must have + ARGTYPES is a vector of ‘ffi_type’ pointers. ARGTYPES must have NARGS elements. If NARGS is 0, this argument is ignored. - 'ffi_prep_cif' returns a 'libffi' status code, of type - 'ffi_status'. This will be either 'FFI_OK' if everything worked - properly; 'FFI_BAD_TYPEDEF' if one of the 'ffi_type' objects is - incorrect; or 'FFI_BAD_ABI' if the ABI parameter is invalid. + ‘ffi_prep_cif’ returns a ‘libffi’ status code, of type + ‘ffi_status’. This will be either ‘FFI_OK’ if everything worked + properly; ‘FFI_BAD_TYPEDEF’ if one of the ‘ffi_type’ objects is + incorrect; or ‘FFI_BAD_ABI’ if the ABI parameter is invalid. If the function being called is variadic (varargs) then -'ffi_prep_cif_var' must be used instead of 'ffi_prep_cif'. +‘ffi_prep_cif_var’ must be used instead of ‘ffi_prep_cif’. -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi ABI, unsigned int NFIXEDARGS, unsigned int NTOTALARGS, ffi_type *RTYPE, ffi_type **ARGTYPES) This initializes CIF according to the given parameters for a call to a variadic function. In general its operation is the same as - for 'ffi_prep_cif' except that: + for ‘ffi_prep_cif’ except that: NFIXEDARGS is the number of fixed arguments, prior to any variadic arguments. It must be greater than zero. @@ -168,59 +169,59 @@ prepare a call interface object, use the function 'ffi_prep_cif'. NTOTALARGS the total number of arguments, including variadic and fixed arguments. ARGTYPES must have this many elements. - 'ffi_prep_cif_var' will return 'FFI_BAD_ARGTYPE' if any of the - variable argument types are 'ffi_type_float' (promote to - 'ffi_type_double' first), or any integer type small than an int + ‘ffi_prep_cif_var’ will return ‘FFI_BAD_ARGTYPE’ if any of the + variable argument types are ‘ffi_type_float’ (promote to + ‘ffi_type_double’ first), or any integer type small than an int (promote to an int-sized type first). - Note that, different cif's must be prepped for calls to the same + Note that, different cif’s must be prepped for calls to the same function when different numbers of arguments are passed. - Also note that a call to 'ffi_prep_cif_var' with + Also note that a call to ‘ffi_prep_cif_var’ with NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to - 'ffi_prep_cif'. + ‘ffi_prep_cif’. - Note that the resulting 'ffi_cif' holds pointers to all the -'ffi_type' objects that were used during initialization. You must + Note that the resulting ‘ffi_cif’ holds pointers to all the +‘ffi_type’ objects that were used during initialization. You must ensure that these type objects have a lifetime at least as long as that -of the 'ffi_cif'. +of the ‘ffi_cif’. - To call a function using an initialized 'ffi_cif', use the 'ffi_call' + To call a function using an initialized ‘ffi_cif’, use the ‘ffi_call’ function: -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void **AVALUES) This calls the function FN according to the description given in - CIF. CIF must have already been prepared using 'ffi_prep_cif'. + CIF. CIF must have already been prepared using ‘ffi_prep_cif’. RVALUE is a pointer to a chunk of memory that will hold the result of the function call. This must be large enough to hold the result, no smaller than the system register size (generally 32 or - 64 bits), and must be suitably aligned; it is the caller's + 64 bits), and must be suitably aligned; it is the caller’s responsibility to ensure this. If CIF declares that the function - returns 'void' (using 'ffi_type_void'), then RVALUE is ignored. + returns ‘void’ (using ‘ffi_type_void’), then RVALUE is ignored. - In most situations, 'libffi' will handle promotion according to the + In most situations, ‘libffi’ will handle promotion according to the ABI. However, for historical reasons, there is a special case with return values that must be handled by your code. In particular, - for integral (not 'struct') types that are narrower than the system - register size, the return value will be widened by 'libffi'. - 'libffi' provides a type, 'ffi_arg', that can be used as the return + for integral (not ‘struct’) types that are narrower than the system + register size, the return value will be widened by ‘libffi’. + ‘libffi’ provides a type, ‘ffi_arg’, that can be used as the return type. For example, if the CIF was defined with a return type of - 'char', 'libffi' will try to store a full 'ffi_arg' into the return + ‘char’, ‘libffi’ will try to store a full ‘ffi_arg’ into the return value. - AVALUES is a vector of 'void *' pointers that point to the memory + AVALUES is a vector of ‘void *’ pointers that point to the memory locations holding the argument values for a call. If CIF declares that the function has no arguments (i.e., NARGS was 0), then AVALUES is ignored. Note that while the return value must be register-sized, arguments should exactly match their declared type. For example, if an - argument is a 'short', then the entry in AVALUES should point to an - object declared as 'short'; but if the return type is 'short', then - RVALUE should point to an object declared as a larger type - - usually 'ffi_arg'. + argument is a ‘short’, then the entry in AVALUES should point to an + object declared as ‘short’; but if the return type is ‘short’, then + RVALUE should point to an object declared as a larger type – + usually ‘ffi_arg’.  File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: Using libffi @@ -228,7 +229,7 @@ File: libffi.info, Node: Simple Example, Next: Types, Prev: The Basics, Up: 2.2 Simple Example ================== -Here is a trivial example that calls 'puts' a few times. +Here is a trivial example that calls ‘puts’ a few times. #include #include @@ -285,91 +286,91 @@ File: libffi.info, Node: Primitive Types, Next: Structures, Up: Types 2.3.1 Primitive Types --------------------- -'Libffi' provides a number of built-in type descriptors that can be used +‘Libffi’ provides a number of built-in type descriptors that can be used to describe argument and return types: -'ffi_type_void' - The type 'void'. This cannot be used for argument types, only for +‘ffi_type_void’ + The type ‘void’. This cannot be used for argument types, only for return values. -'ffi_type_uint8' +‘ffi_type_uint8’ An unsigned, 8-bit integer type. -'ffi_type_sint8' +‘ffi_type_sint8’ A signed, 8-bit integer type. -'ffi_type_uint16' +‘ffi_type_uint16’ An unsigned, 16-bit integer type. -'ffi_type_sint16' +‘ffi_type_sint16’ A signed, 16-bit integer type. -'ffi_type_uint32' +‘ffi_type_uint32’ An unsigned, 32-bit integer type. -'ffi_type_sint32' +‘ffi_type_sint32’ A signed, 32-bit integer type. -'ffi_type_uint64' +‘ffi_type_uint64’ An unsigned, 64-bit integer type. -'ffi_type_sint64' +‘ffi_type_sint64’ A signed, 64-bit integer type. -'ffi_type_float' - The C 'float' type. +‘ffi_type_float’ + The C ‘float’ type. -'ffi_type_double' - The C 'double' type. +‘ffi_type_double’ + The C ‘double’ type. -'ffi_type_uchar' - The C 'unsigned char' type. +‘ffi_type_uchar’ + The C ‘unsigned char’ type. -'ffi_type_schar' - The C 'signed char' type. (Note that there is not an exact - equivalent to the C 'char' type in 'libffi'; ordinarily you should - either use 'ffi_type_schar' or 'ffi_type_uchar' depending on - whether 'char' is signed.) +‘ffi_type_schar’ + The C ‘signed char’ type. (Note that there is not an exact + equivalent to the C ‘char’ type in ‘libffi’; ordinarily you should + either use ‘ffi_type_schar’ or ‘ffi_type_uchar’ depending on + whether ‘char’ is signed.) -'ffi_type_ushort' - The C 'unsigned short' type. +‘ffi_type_ushort’ + The C ‘unsigned short’ type. -'ffi_type_sshort' - The C 'short' type. +‘ffi_type_sshort’ + The C ‘short’ type. -'ffi_type_uint' - The C 'unsigned int' type. +‘ffi_type_uint’ + The C ‘unsigned int’ type. -'ffi_type_sint' - The C 'int' type. +‘ffi_type_sint’ + The C ‘int’ type. -'ffi_type_ulong' - The C 'unsigned long' type. +‘ffi_type_ulong’ + The C ‘unsigned long’ type. -'ffi_type_slong' - The C 'long' type. +‘ffi_type_slong’ + The C ‘long’ type. -'ffi_type_longdouble' - On platforms that have a C 'long double' type, this is defined. On +‘ffi_type_longdouble’ + On platforms that have a C ‘long double’ type, this is defined. On other platforms, it is not. -'ffi_type_pointer' - A generic 'void *' pointer. You should use this for all pointers, +‘ffi_type_pointer’ + A generic ‘void *’ pointer. You should use this for all pointers, regardless of their real type. -'ffi_type_complex_float' - The C '_Complex float' type. +‘ffi_type_complex_float’ + The C ‘_Complex float’ type. -'ffi_type_complex_double' - The C '_Complex double' type. +‘ffi_type_complex_double’ + The C ‘_Complex double’ type. -'ffi_type_complex_longdouble' - The C '_Complex long double' type. On platforms that have a C - 'long double' type, this is defined. On other platforms, it is +‘ffi_type_complex_longdouble’ + The C ‘_Complex long double’ type. On platforms that have a C + ‘long double’ type, this is defined. On other platforms, it is not. - Each of these is of type 'ffi_type', so you must take the address -when passing to 'ffi_prep_cif'. + Each of these is of type ‘ffi_type’, so you must take the address +when passing to ‘ffi_prep_cif’.  File: libffi.info, Node: Structures, Next: Size and Alignment, Prev: Primitive Types, Up: Types @@ -377,30 +378,30 @@ File: libffi.info, Node: Structures, Next: Size and Alignment, Prev: Primitiv 2.3.2 Structures ---------------- -'libffi' is perfectly happy passing structures back and forth. You must -first describe the structure to 'libffi' by creating a new 'ffi_type' +‘libffi’ is perfectly happy passing structures back and forth. You must +first describe the structure to ‘libffi’ by creating a new ‘ffi_type’ object for it. -- Data type: ffi_type - The 'ffi_type' has the following members: - 'size_t size' - This is set by 'libffi'; you should initialize it to zero. + The ‘ffi_type’ has the following members: + ‘size_t size’ + This is set by ‘libffi’; you should initialize it to zero. - 'unsigned short alignment' - This is set by 'libffi'; you should initialize it to zero. + ‘unsigned short alignment’ + This is set by ‘libffi’; you should initialize it to zero. - 'unsigned short type' - For a structure, this should be set to 'FFI_TYPE_STRUCT'. + ‘unsigned short type’ + For a structure, this should be set to ‘FFI_TYPE_STRUCT’. - 'ffi_type **elements' - This is a 'NULL'-terminated array of pointers to 'ffi_type' + ‘ffi_type **elements’ + This is a ‘NULL’-terminated array of pointers to ‘ffi_type’ objects. There is one element per field of the struct. - Note that 'libffi' has no special support for bit-fields. You + Note that ‘libffi’ has no special support for bit-fields. You must manage these manually. - The 'size' and 'alignment' fields will be filled in by 'ffi_prep_cif' -or 'ffi_prep_cif_var', as needed. + The ‘size’ and ‘alignment’ fields will be filled in by ‘ffi_prep_cif’ +or ‘ffi_prep_cif_var’, as needed.  File: libffi.info, Node: Size and Alignment, Next: Arrays Unions Enums, Prev: Structures, Up: Types @@ -408,24 +409,24 @@ File: libffi.info, Node: Size and Alignment, Next: Arrays Unions Enums, Prev: 2.3.3 Size and Alignment ------------------------ -'libffi' will set the 'size' and 'alignment' fields of an 'ffi_type' +‘libffi’ will set the ‘size’ and ‘alignment’ fields of an ‘ffi_type’ object for you. It does so using its knowledge of the ABI. You might expect that you can simply read these fields for a type -that has been laid out by 'libffi'. However, there are some caveats. +that has been laid out by ‘libffi’. However, there are some caveats. - * The size or alignment of some of the built-in types may vary + • The size or alignment of some of the built-in types may vary depending on the chosen ABI. - * The size and alignment of a new structure type will not be set by - 'libffi' until it has been passed to 'ffi_prep_cif' or - 'ffi_get_struct_offsets'. + • The size and alignment of a new structure type will not be set by + ‘libffi’ until it has been passed to ‘ffi_prep_cif’ or + ‘ffi_get_struct_offsets’. - * A structure type cannot be shared across ABIs. Instead each ABI + • A structure type cannot be shared across ABIs. Instead each ABI needs its own copy of the structure type. So, before examining these fields, it is safest to pass the -'ffi_type' object to 'ffi_prep_cif' or 'ffi_get_struct_offsets' first. +‘ffi_type’ object to ‘ffi_prep_cif’ or ‘ffi_get_struct_offsets’ first. This function will do all the needed setup. ffi_type *desired_type; @@ -438,7 +439,7 @@ This function will do all the needed setup. unsigned short alignment = desired_type->alignment; } - 'libffi' also provides a way to get the offsets of the members of a + ‘libffi’ also provides a way to get the offsets of the members of a structure. -- Function: ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type @@ -448,15 +449,15 @@ structure. layout depends on the ABI. OFFSETS is an out parameter. The caller is responsible for - providing enough space for all the results to be written - one - element per element type in STRUCT_TYPE. If OFFSETS is 'NULL', + providing enough space for all the results to be written – one + element per element type in STRUCT_TYPE. If OFFSETS is ‘NULL’, then the type will be laid out but not otherwise modified. This - can be useful for accessing the type's size or layout, as mentioned + can be useful for accessing the type’s size or layout, as mentioned above. - This function returns 'FFI_OK' on success; 'FFI_BAD_ABI' if ABI is - invalid; or 'FFI_BAD_TYPEDEF' if STRUCT_TYPE is invalid in some - way. Note that only 'FFI_STRUCT' types are valid here. + This function returns ‘FFI_OK’ on success; ‘FFI_BAD_ABI’ if ABI is + invalid; or ‘FFI_BAD_TYPEDEF’ if STRUCT_TYPE is invalid in some + way. Note that only ‘FFI_STRUCT’ types are valid here.  File: libffi.info, Node: Arrays Unions Enums, Next: Type Example, Prev: Size and Alignment, Up: Types @@ -467,11 +468,11 @@ File: libffi.info, Node: Arrays Unions Enums, Next: Type Example, Prev: Size 2.3.4.1 Arrays .............. -'libffi' does not have direct support for arrays or unions. However, +‘libffi’ does not have direct support for arrays or unions. However, they can be emulated using structures. - To emulate an array, simply create an 'ffi_type' using -'FFI_TYPE_STRUCT' with as many members as there are elements in the + To emulate an array, simply create an ‘ffi_type’ using +‘FFI_TYPE_STRUCT’ with as many members as there are elements in the array. ffi_type array_type; @@ -487,18 +488,18 @@ array. array_type.type = FFI_TYPE_STRUCT; array_type.elements = elements; - Note that arrays cannot be passed or returned by value in C - + Note that arrays cannot be passed or returned by value in C – structure types created like this should only be used to refer to -members of real 'FFI_TYPE_STRUCT' objects. +members of real ‘FFI_TYPE_STRUCT’ objects. However, a phony array type like this will not cause any errors from -'libffi' if you use it as an argument or return type. This may be +‘libffi’ if you use it as an argument or return type. This may be confusing. 2.3.4.2 Unions .............. -A union can also be emulated using 'FFI_TYPE_STRUCT'. In this case, +A union can also be emulated using ‘FFI_TYPE_STRUCT’. In this case, however, you must make sure that the size and alignment match the real requirements of the union. @@ -506,7 +507,7 @@ requirements of the union. out. Then, give the new structure type a single element; the size of the largest element; and the largest alignment seen as well. - This example uses the 'ffi_prep_cif' trick to ensure that each + This example uses the ‘ffi_prep_cif’ trick to ensure that each element type is laid out. ffi_abi desired_abi; @@ -540,11 +541,11 @@ element type is laid out. 2.3.4.3 Enumerations .................... -'libffi' does not have any special support for C 'enum's. Although any -given 'enum' is implemented using a specific underlying integral type, -exactly which type will be used cannot be determined by 'libffi' - it +‘libffi’ does not have any special support for C ‘enum’s. Although any +given ‘enum’ is implemented using a specific underlying integral type, +exactly which type will be used cannot be determined by ‘libffi’ – it may depend on the values in the enumeration or on compiler flags such as -'-fshort-enums'. *Note (gcc)Structures unions enumerations and +‘-fshort-enums’. *Note (gcc)Structures unions enumerations and bit-fields implementation::, for more information about how GCC handles enumerations. @@ -554,8 +555,8 @@ File: libffi.info, Node: Type Example, Next: Complex, Prev: Arrays Unions Enu 2.3.5 Type Example ------------------ -The following example initializes a 'ffi_type' object representing the -'tm' struct from Linux's 'time.h'. +The following example initializes a ‘ffi_type’ object representing the +‘tm’ struct from Linux’s ‘time.h’. Here is how the struct is defined: @@ -574,7 +575,7 @@ The following example initializes a 'ffi_type' object representing the __const char *__tm_zone__; }; - Here is the corresponding code to describe this struct to 'libffi': + Here is the corresponding code to describe this struct to ‘libffi’: { ffi_type tm_type; @@ -602,38 +603,38 @@ File: libffi.info, Node: Complex, Next: Complex Type Example, Prev: Type Exam 2.3.6 Complex Types ------------------- -'libffi' supports the complex types defined by the C99 standard -('_Complex float', '_Complex double' and '_Complex long double' with the -built-in type descriptors 'ffi_type_complex_float', -'ffi_type_complex_double' and 'ffi_type_complex_longdouble'. +‘libffi’ supports the complex types defined by the C99 standard +(‘_Complex float’, ‘_Complex double’ and ‘_Complex long double’ with the +built-in type descriptors ‘ffi_type_complex_float’, +‘ffi_type_complex_double’ and ‘ffi_type_complex_longdouble’. - Custom complex types like '_Complex int' can also be used. An -'ffi_type' object has to be defined to describe the complex type to -'libffi'. + Custom complex types like ‘_Complex int’ can also be used. An +‘ffi_type’ object has to be defined to describe the complex type to +‘libffi’. -- Data type: ffi_type - 'size_t size' + ‘size_t size’ This must be manually set to the size of the complex type. - 'unsigned short alignment' + ‘unsigned short alignment’ This must be manually set to the alignment of the complex type. - 'unsigned short type' - For a complex type, this must be set to 'FFI_TYPE_COMPLEX'. + ‘unsigned short type’ + For a complex type, this must be set to ‘FFI_TYPE_COMPLEX’. - 'ffi_type **elements' + ‘ffi_type **elements’ - This is a 'NULL'-terminated array of pointers to 'ffi_type' - objects. The first element is set to the 'ffi_type' of the - complex's base type. The second element must be set to - 'NULL'. + This is a ‘NULL’-terminated array of pointers to ‘ffi_type’ + objects. The first element is set to the ‘ffi_type’ of the + complex’s base type. The second element must be set to + ‘NULL’. The section *note Complex Type Example:: shows a way to determine the -'size' and 'alignment' members in a platform independent way. +‘size’ and ‘alignment’ members in a platform independent way. - For platforms that have no complex support in 'libffi' yet, the -functions 'ffi_prep_cif' and 'ffi_prep_args' abort the program if they + For platforms that have no complex support in ‘libffi’ yet, the +functions ‘ffi_prep_cif’ and ‘ffi_prep_args’ abort the program if they encounter a complex type.  @@ -730,9 +731,9 @@ File: libffi.info, Node: Multiple ABIs, Next: The Closure API, Prev: Types, ================= A given platform may provide multiple different ABIs at once. For -instance, the x86 platform has both 'stdcall' and 'fastcall' functions. +instance, the x86 platform has both ‘stdcall’ and ‘fastcall’ functions. - 'libffi' provides some support for this. However, this is + ‘libffi’ provides some support for this. However, this is necessarily platform-specific.  @@ -741,13 +742,13 @@ File: libffi.info, Node: The Closure API, Next: Closure Example, Prev: Multip 2.5 The Closure API =================== -'libffi' also provides a way to write a generic function - a function +‘libffi’ also provides a way to write a generic function – a function that can accept and decode any combination of arguments. This can be useful when writing an interpreter, or to provide wrappers for arbitrary functions. - This facility is called the "closure API". Closures are not supported -on all platforms; you can check the 'FFI_CLOSURES' define to determine + This facility is called the “closure API”. Closures are not supported +on all platforms; you can check the ‘FFI_CLOSURES’ define to determine whether they are supported on the current platform. Because closures work by assembling a tiny function at runtime, they @@ -759,28 +760,28 @@ Memory management for closures is handled by a pair of functions: pointer to the writable address, and sets *CODE to the corresponding executable address. - SIZE should be sufficient to hold a 'ffi_closure' object. + SIZE should be sufficient to hold a ‘ffi_closure’ object. -- Function: void ffi_closure_free (void *WRITABLE) - Free memory allocated using 'ffi_closure_alloc'. The argument is + Free memory allocated using ‘ffi_closure_alloc’. The argument is the writable address that was returned. Once you have allocated the memory for a closure, you must construct -a 'ffi_cif' describing the function call. Finally you can prepare the +a ‘ffi_cif’ describing the function call. Finally you can prepare the closure function: -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE, ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC) Prepare a closure function. The arguments to - 'ffi_prep_closure_loc' are: + ‘ffi_prep_closure_loc’ are: CLOSURE - The address of a 'ffi_closure' object; this is the writable - address returned by 'ffi_closure_alloc'. + The address of a ‘ffi_closure’ object; this is the writable + address returned by ‘ffi_closure_alloc’. CIF - The 'ffi_cif' describing the function parameters. Note that + The ‘ffi_cif’ describing the function parameters. Note that this object, and the types to which it refers, must be kept alive until the closure itself is freed. @@ -789,29 +790,29 @@ closure function: closure function. CODELOC - The executable address returned by 'ffi_closure_alloc'. + The executable address returned by ‘ffi_closure_alloc’. FUN The function which will be called when the closure is invoked. It is called with the arguments: CIF - The 'ffi_cif' passed to 'ffi_prep_closure_loc'. + The ‘ffi_cif’ passed to ‘ffi_prep_closure_loc’. RET - A pointer to the memory used for the function's return + A pointer to the memory used for the function’s return value. - If the function is declared as returning 'void', then + If the function is declared as returning ‘void’, then this value is garbage and should not be used. Otherwise, FUN must fill the object to which this points, following the same special promotion behavior as - 'ffi_call'. That is, in most cases, RET points to an + ‘ffi_call’. That is, in most cases, RET points to an object of exactly the size of the type specified when CIF was constructed. However, integral types narrower than the system register size are widened. In these cases - your program may assume that RET points to an 'ffi_arg' + your program may assume that RET points to an ‘ffi_arg’ object. ARGS @@ -820,15 +821,15 @@ closure function: USER_DATA The same USER_DATA that was passed to - 'ffi_prep_closure_loc'. + ‘ffi_prep_closure_loc’. - 'ffi_prep_closure_loc' will return 'FFI_OK' if everything went ok, - and one of the other 'ffi_status' values on error. + ‘ffi_prep_closure_loc’ will return ‘FFI_OK’ if everything went ok, + and one of the other ‘ffi_status’ values on error. - After calling 'ffi_prep_closure_loc', you can cast CODELOC to the + After calling ‘ffi_prep_closure_loc’, you can cast CODELOC to the appropriate pointer-to-function type. - You may see old code referring to 'ffi_prep_closure'. This function + You may see old code referring to ‘ffi_prep_closure’. This function is deprecated, as it cannot handle the need for separate writable and executable addresses. @@ -838,8 +839,8 @@ File: libffi.info, Node: Closure Example, Next: Thread Safety, Prev: The Clos 2.6 Closure Example =================== -A trivial example that creates a new 'puts' by binding 'fputs' with -'stdout'. +A trivial example that creates a new ‘puts’ by binding ‘fputs’ with +‘stdout’. #include #include @@ -897,21 +898,21 @@ File: libffi.info, Node: Thread Safety, Prev: Closure Example, Up: Using libf 2.7 Thread Safety ================= -'libffi' is not completely thread-safe. However, many parts are, and if +‘libffi’ is not completely thread-safe. However, many parts are, and if you follow some simple rules, you can use it safely in a multi-threaded program. - * 'ffi_prep_cif' may modify the 'ffi_type' objects passed to it. It + • ‘ffi_prep_cif’ may modify the ‘ffi_type’ objects passed to it. It is best to ensure that only a single thread prepares a given - 'ffi_cif' at a time. + ‘ffi_cif’ at a time. - * On some platforms, 'ffi_prep_cif' may modify the size and alignment + • On some platforms, ‘ffi_prep_cif’ may modify the size and alignment of some types, depending on the chosen ABI. On these platforms, if you switch between ABIs, you must ensure that there is only one - call to 'ffi_prep_cif' at a time. + call to ‘ffi_prep_cif’ at a time. Currently the only affected platform is PowerPC and the only - affected type is 'long double'. + affected type is ‘long double’.  File: libffi.info, Node: Memory Usage, Next: Missing Features, Prev: Using libffi, Up: Top @@ -919,36 +920,36 @@ File: libffi.info, Node: Memory Usage, Next: Missing Features, Prev: Using li 3 Memory Usage ************** -Note that memory allocated by 'ffi_closure_alloc' and freed by -'ffi_closure_free' does not come from the same general pool of memory -that 'malloc' and 'free' use. To accomodate security settings, 'libffi' +Note that memory allocated by ‘ffi_closure_alloc’ and freed by +‘ffi_closure_free’ does not come from the same general pool of memory +that ‘malloc’ and ‘free’ use. To accomodate security settings, ‘libffi’ may aquire memory, for example, by mapping temporary files into multiple places in the address space (once to write out the closure, a second to execute it). The search follows this list, using the first that works: - * A anonymous mapping (i.e. not file-backed) + • A anonymous mapping (i.e. not file-backed) - * 'memfd_create()', if the kernel supports it. + • ‘memfd_create()’, if the kernel supports it. - * A file created in the directory referenced by the environment - variable 'LIBFFI_TMPDIR'. + • A file created in the directory referenced by the environment + variable ‘LIBFFI_TMPDIR’. - * Likewise for the environment variable 'TMPDIR'. + • Likewise for the environment variable ‘TMPDIR’. - * A file created in '/tmp'. + • A file created in ‘/tmp’. - * A file created in '/var/tmp'. + • A file created in ‘/var/tmp’. - * A file created in '/dev/shm'. + • A file created in ‘/dev/shm’. - * A file created in the user's home directory ('$HOME'). + • A file created in the user’s home directory (‘$HOME’). - * A file created in any directory listed in '/etc/mtab'. + • A file created in any directory listed in ‘/etc/mtab’. - * A file created in any directory listed in '/proc/mounts'. + • A file created in any directory listed in ‘/proc/mounts’. If security settings prohibit using any of these for closures, -'ffi_closure_alloc' will fail. +‘ffi_closure_alloc’ will fail.  File: libffi.info, Node: Missing Features, Next: Index, Prev: Memory Usage, Up: Top @@ -956,16 +957,16 @@ File: libffi.info, Node: Missing Features, Next: Index, Prev: Memory Usage, 4 Missing Features ****************** -'libffi' is missing a few features. We welcome patches to add support +‘libffi’ is missing a few features. We welcome patches to add support for these. - * Variadic closures. + • Variadic closures. - * There is no support for bit fields in structures. + • There is no support for bit fields in structures. - * The "raw" API is undocumented. + • The “raw” API is undocumented. - * The Go API is undocumented. + • The Go API is undocumented.  File: libffi.info, Node: Index, Prev: Missing Features, Up: Top @@ -1031,26 +1032,26 @@ Index  Tag Table: -Node: Top1400 -Node: Introduction2935 -Node: Using libffi4567 -Node: The Basics5096 -Node: Simple Example10024 -Node: Types11055 -Node: Primitive Types11566 -Node: Structures13687 -Node: Size and Alignment14726 -Node: Arrays Unions Enums16923 -Node: Type Example19852 -Node: Complex21143 -Node: Complex Type Example22561 -Node: Multiple ABIs25613 -Node: The Closure API25984 -Node: Closure Example29810 -Node: Thread Safety31442 -Node: Memory Usage32243 -Node: Missing Features33438 -Node: Index33803 +Node: Top1399 +Node: Introduction2933 +Node: Using libffi4593 +Node: The Basics5122 +Node: Simple Example10240 +Node: Types11275 +Node: Primitive Types11786 +Node: Structures14103 +Node: Size and Alignment15214 +Node: Arrays Unions Enums17489 +Node: Type Example20470 +Node: Complex21779 +Node: Complex Type Example23295 +Node: Multiple ABIs26347 +Node: The Closure API26730 +Node: Closure Example30648 +Node: Thread Safety32292 +Node: Memory Usage33125 +Node: Missing Features34402 +Node: Index34783  End Tag Table diff --git a/src/libffi/libffi-3.4.4/doc/libffi.pdf b/src/libffi/libffi-3.4.6/doc/libffi.pdf similarity index 98% rename from src/libffi/libffi-3.4.4/doc/libffi.pdf rename to src/libffi/libffi-3.4.6/doc/libffi.pdf index 0831f17a7fc2928ece1efee68fa1b9ac3fe8c456..bab1698681434f57c44182ed57f41e8ff57260f0 100644 GIT binary patch delta 2013 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

qyj5#c zsp}3T^oO=B{wng8x7gJB2(+t?$BH8HMFA*BcA&o!Sj9#+zubGwlT%kYVFcxH}fDM;r&j*TsnXqLY8rIf;p39>|x@YX6u z4-x)-52pTiEB}Vn4wE zu74q-nAc#rS_J-dptNwZSWkoS8C6p}QCz^oNC}Hz8KjgjC@IcQq+}`^gxeGYKe?9( zrR+Fj=@So=Ihf+B;5`M4ApJ4m-C2-^oGvOvSj>vY%Zkp#_@4%o^}>_>@k$gy~Tn>E*Jz4Q(Hrm;)DT8 z6V^$z`Vj}u^OW7pqs7#Z?-KF^t}J~F?0QcNl%@VrF>X+EQJ5^eU^!rmDOz|-ivJ8u zlL4K8%?R>~KfHFtqW&`XKQ^J*I|+F}fnif^j+mrDq;%{Yu9GNCW3@S8D2=!i%3CnT z)lz9l33Cx7{(wO*4icI%w4Cu>SgJi5_1jS3>AyXr7D)^92z`|w>UddL;`V^>^%??1 z4Z5{iCtr3HdnitQZvn|Btlg)J9pMXc8;qWZ2S0uI7yQJ|0+V5R6N51hhcONTw=oU^ z!+!xXm-USTB{4EFFfubTFfutcGc7PQConK4DGD!5Z)8MabY&nYL^?7sGBPnRGBYwT zGC4IfEig2fOO66o5HcVrRApEoOlfvyATlsAF_*E90v7=@x5 zGdDFuI5$3B3NK7$ZfA68AT&8RlfVZleEMAcTM@11Gb_QI~5kv+A z5m3N|al-|1rOY(43`or^m%!BO%s@>I{0HU)CRzsm020ew=WUXwx=-J^cg{JVnb|*? zHJL1Zs#3dX$t)98+xpM6eh?1JUZiM;nQnn3%kr^SqOFB`*bX(a+(^7{D`Y%3e+b8E zw?PB#F*r(F2P3c(nxIkE_9WhtgWb?98~6}wJ0K6cU@x@D2FGH$2M$21th63$`=AZ> z^W76voluaK|HLEh&;fnW16{J2Tui&+5cJ9xe#Kfp6kz~3uXx22MAajG zT#c$%T7Ml?pR}>LR#eKqMAfgfG8z@R@(2Sd@iGtrCjw43d;++A=k|R{>CJajdY`xd iS4(AB3T19&b98cLVQmU!m*t%T6bUyl3MC~)Peux7)ssO0 diff --git a/src/libffi/libffi-3.4.4/doc/libffi.texi b/src/libffi/libffi-3.4.6/doc/libffi.texi similarity index 99% rename from src/libffi/libffi-3.4.4/doc/libffi.texi rename to src/libffi/libffi-3.4.6/doc/libffi.texi index 88daab58d..d072a213f 100644 --- a/src/libffi/libffi-3.4.4/doc/libffi.texi +++ b/src/libffi/libffi-3.4.6/doc/libffi.texi @@ -18,7 +18,7 @@ This manual is for libffi, a portable foreign function interface library. -Copyright @copyright{} 2008--2019, 2021, 2022 Anthony Green and Red Hat, Inc. +Copyright @copyright{} 2008--2024 Anthony Green and Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/src/libffi/libffi-3.4.4/doc/mdate-sh b/src/libffi/libffi-3.4.6/doc/mdate-sh similarity index 100% rename from src/libffi/libffi-3.4.4/doc/mdate-sh rename to src/libffi/libffi-3.4.6/doc/mdate-sh diff --git a/src/libffi/libffi-3.4.6/doc/stamp-vti b/src/libffi/libffi-3.4.6/doc/stamp-vti new file mode 100644 index 000000000..88b26f949 --- /dev/null +++ b/src/libffi/libffi-3.4.6/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 15 February 2024 +@set UPDATED-MONTH February 2024 +@set EDITION 3.4.6 +@set VERSION 3.4.6 diff --git a/src/libffi/libffi-3.4.4/doc/texinfo.tex b/src/libffi/libffi-3.4.6/doc/texinfo.tex similarity index 100% rename from src/libffi/libffi-3.4.4/doc/texinfo.tex rename to src/libffi/libffi-3.4.6/doc/texinfo.tex diff --git a/src/libffi/libffi-3.4.6/doc/version.texi b/src/libffi/libffi-3.4.6/doc/version.texi new file mode 100644 index 000000000..88b26f949 --- /dev/null +++ b/src/libffi/libffi-3.4.6/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 15 February 2024 +@set UPDATED-MONTH February 2024 +@set EDITION 3.4.6 +@set VERSION 3.4.6 diff --git a/src/libffi/libffi-3.4.4/fficonfig.h.in b/src/libffi/libffi-3.4.6/fficonfig.h.in similarity index 81% rename from src/libffi/libffi-3.4.4/fficonfig.h.in rename to src/libffi/libffi-3.4.6/fficonfig.h.in index d38b781ea..2e4aac662 100644 --- a/src/libffi/libffi-3.4.4/fficonfig.h.in +++ b/src/libffi/libffi-3.4.6/fficonfig.h.in @@ -3,9 +3,6 @@ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD -/* Define to 1 if using 'alloca.c'. */ -#undef C_ALLOCA - /* Define to the flags needed for the .section .eh_frame directive. */ #undef EH_FRAME_FLAGS @@ -31,10 +28,7 @@ /* Define this if you do not want support for aggregate types. */ #undef FFI_NO_STRUCTS -/* Define to 1 if you have 'alloca', as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define to 1 if works. */ +/* Define to 1 if you have the header file. */ #undef HAVE_ALLOCA_H /* Define if your assembler supports .cfi_* directives. */ @@ -77,24 +71,6 @@ /* Define to 1 if you have the `memfd_create' function. */ #undef HAVE_MEMFD_CREATE -/* Define to 1 if you have the `mkostemp' function. */ -#undef HAVE_MKOSTEMP - -/* Define to 1 if you have the `mkstemp' function. */ -#undef HAVE_MKSTEMP - -/* Define to 1 if you have the `mmap' function. */ -#undef HAVE_MMAP - -/* Define if mmap with MAP_ANON(YMOUS) works. */ -#undef HAVE_MMAP_ANON - -/* Define if mmap of /dev/zero works. */ -#undef HAVE_MMAP_DEV_ZERO - -/* Define if read-only mmap of a plain file works. */ -#undef HAVE_MMAP_FILE - /* Define if your compiler supports pointer authentication. */ #undef HAVE_PTRAUTH @@ -119,9 +95,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MEMFD_H -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_MMAN_H - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H @@ -167,14 +140,6 @@ /* The size of `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -#undef STACK_DIRECTION - /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @@ -202,9 +167,6 @@ # endif #endif -/* Define to `unsigned int' if does not define. */ -#undef size_t - #ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE #ifdef LIBFFI_ASM diff --git a/src/libffi/libffi-3.4.4/generate-darwin-source-and-headers.py b/src/libffi/libffi-3.4.6/generate-darwin-source-and-headers.py similarity index 94% rename from src/libffi/libffi-3.4.4/generate-darwin-source-and-headers.py rename to src/libffi/libffi-3.4.6/generate-darwin-source-and-headers.py index 5b60ccc67..c801dc065 100755 --- a/src/libffi/libffi-3.4.4/generate-darwin-source-and-headers.py +++ b/src/libffi/libffi-3.4.6/generate-darwin-source-and-headers.py @@ -48,7 +48,6 @@ class armv7_platform(Platform): class ios_simulator_i386_platform(i386_platform): - triple = 'i386-apple-darwin11' target = 'i386-apple-ios-simulator' directory = 'darwin_ios' sdk = 'iphonesimulator' @@ -56,7 +55,6 @@ class ios_simulator_i386_platform(i386_platform): class ios_simulator_x86_64_platform(x86_64_platform): - triple = 'x86_64-apple-darwin13' target = 'x86_64-apple-ios-simulator' directory = 'darwin_ios' sdk = 'iphonesimulator' @@ -64,7 +62,6 @@ class ios_simulator_x86_64_platform(x86_64_platform): class ios_simulator_arm64_platform(arm64_platform): - triple = 'aarch64-apple-darwin20' target = 'arm64-apple-ios-simulator' directory = 'darwin_ios' sdk = 'iphonesimulator' @@ -72,7 +69,6 @@ class ios_simulator_arm64_platform(arm64_platform): class ios_device_armv7_platform(armv7_platform): - triple = 'arm-apple-darwin11' target = 'armv7-apple-ios' directory = 'darwin_ios' sdk = 'iphoneos' @@ -80,7 +76,6 @@ class ios_device_armv7_platform(armv7_platform): class ios_device_arm64_platform(arm64_platform): - triple = 'aarch64-apple-darwin13' target = 'arm64-apple-ios' directory = 'darwin_ios' sdk = 'iphoneos' @@ -88,7 +83,6 @@ class ios_device_arm64_platform(arm64_platform): class desktop_x86_64_platform(x86_64_platform): - triple = 'x86_64-apple-darwin10' target = 'x86_64-apple-macos' directory = 'darwin_osx' sdk = 'macosx' @@ -96,7 +90,6 @@ class desktop_x86_64_platform(x86_64_platform): class desktop_arm64_platform(arm64_platform): - triple = 'aarch64-apple-darwin20' target = 'arm64-apple-macos' directory = 'darwin_osx' sdk = 'macosx' @@ -104,7 +97,6 @@ class desktop_arm64_platform(arm64_platform): class tvos_simulator_x86_64_platform(x86_64_platform): - triple = 'x86_64-apple-darwin13' target = 'x86_64-apple-tvos-simulator' directory = 'darwin_tvos' sdk = 'appletvsimulator' @@ -112,7 +104,6 @@ class tvos_simulator_x86_64_platform(x86_64_platform): class tvos_simulator_arm64_platform(arm64_platform): - triple = 'aarch64-apple-darwin20' target = 'arm64-apple-tvos-simulator' directory = 'darwin_tvos' sdk = 'appletvsimulator' @@ -120,7 +111,6 @@ class tvos_simulator_arm64_platform(arm64_platform): class tvos_device_arm64_platform(arm64_platform): - triple = 'aarch64-apple-darwin13' target = 'arm64-apple-tvos' directory = 'darwin_tvos' sdk = 'appletvos' @@ -128,7 +118,6 @@ class tvos_device_arm64_platform(arm64_platform): class watchos_simulator_i386_platform(i386_platform): - triple = 'i386-apple-darwin11' target = 'i386-apple-watchos-simulator' directory = 'darwin_watchos' sdk = 'watchsimulator' @@ -136,7 +125,6 @@ class watchos_simulator_i386_platform(i386_platform): class watchos_simulator_x86_64_platform(x86_64_platform): - triple = 'x86_64-apple-darwin13' target = 'x86_64-apple-watchos-simulator' directory = 'darwin_watchos' sdk = 'watchsimulator' @@ -144,7 +132,6 @@ class watchos_simulator_x86_64_platform(x86_64_platform): class watchos_simulator_arm64_platform(arm64_platform): - triple = 'aarch64-apple-darwin20' target = 'arm64-apple-watchos-simulator' directory = 'darwin_watchos' sdk = 'watchsimulator' @@ -152,7 +139,6 @@ class watchos_simulator_arm64_platform(arm64_platform): class watchos_device_armv7k_platform(armv7_platform): - triple = 'arm-apple-darwin11' target = 'armv7k-apple-watchos' directory = 'darwin_watchos' sdk = 'watchos' @@ -161,7 +147,6 @@ class watchos_device_armv7k_platform(armv7_platform): class watchos_device_arm64_32_platform(arm64_platform): - triple = 'aarch64-apple-darwin13' target = 'arm64_32-apple-watchos' directory = 'darwin_watchos' sdk = 'watchos' @@ -229,7 +214,15 @@ def xcrun_cmd(cmd): working_dir = os.getcwd() try: os.chdir(build_dir) - subprocess.check_call(['../configure', '-host', platform.triple], env=env) + subprocess.check_call( + [ + "../configure", + f"--host={platform.target}", + ] + ( + [] if platform.sdk == "macosx" else [f"--build={os.uname().machine}-apple-darwin"] + ), + env=env + ) finally: os.chdir(working_dir) diff --git a/src/libffi/libffi-3.4.4/include/Makefile.am b/src/libffi/libffi-3.4.6/include/Makefile.am similarity index 100% rename from src/libffi/libffi-3.4.4/include/Makefile.am rename to src/libffi/libffi-3.4.6/include/Makefile.am diff --git a/src/libffi/libffi-3.4.4/include/Makefile.in b/src/libffi/libffi-3.4.6/include/Makefile.in similarity index 99% rename from src/libffi/libffi-3.4.4/include/Makefile.in rename to src/libffi/libffi-3.4.6/include/Makefile.in index 7e3bbf0c4..ae3ad016c 100644 --- a/src/libffi/libffi-3.4.4/include/Makefile.in +++ b/src/libffi/libffi-3.4.6/include/Makefile.in @@ -182,7 +182,6 @@ am__define_uniq_tagged_files = \ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ffi.h.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LTLDFLAGS = @AM_LTLDFLAGS@ diff --git a/src/libffi/libffi-3.4.4/include/ffi.h.in b/src/libffi/libffi-3.4.6/include/ffi.h.in similarity index 95% rename from src/libffi/libffi-3.4.4/include/ffi.h.in rename to src/libffi/libffi-3.4.6/include/ffi.h.in index 227ac79ca..e5c1daef3 100644 --- a/src/libffi/libffi-3.4.4/include/ffi.h.in +++ b/src/libffi/libffi-3.4.6/include/ffi.h.in @@ -1,6 +1,6 @@ /* -----------------------------------------------------------------*-C-*- libffi @VERSION@ - - Copyright (c) 2011, 2014, 2019, 2021, 2022 Anthony Green + - Copyright (c) 2011, 2014, 2019, 2021, 2022, 2024 Anthony Green - Copyright (c) 1996-2003, 2007, 2008 Red Hat, Inc. Permission is hereby granted, free of charge, to any person @@ -140,13 +140,11 @@ typedef struct _ffi_type when using the static version of the library. Besides, as a workaround, they can define FFI_BUILDING if they *know* they are going to link with the static library. */ -#if defined _MSC_VER +#if defined _MSC_VER && !defined(FFI_STATIC_BUILD) # if defined FFI_BUILDING_DLL /* Building libffi.DLL with msvcc.sh */ # define FFI_API __declspec(dllexport) -# elif !defined FFI_BUILDING /* Importing libffi.DLL */ +# else /* Importing libffi.DLL */ # define FFI_API __declspec(dllimport) -# else /* Building/linking static library */ -# define FFI_API # endif #else # define FFI_API @@ -222,21 +220,12 @@ FFI_EXTERN ffi_type ffi_type_sint64; FFI_EXTERN ffi_type ffi_type_float; FFI_EXTERN ffi_type ffi_type_double; FFI_EXTERN ffi_type ffi_type_pointer; - -#if @HAVE_LONG_DOUBLE@ FFI_EXTERN ffi_type ffi_type_longdouble; -#else -#define ffi_type_longdouble ffi_type_double -#endif #ifdef FFI_TARGET_HAS_COMPLEX_TYPE FFI_EXTERN ffi_type ffi_type_complex_float; FFI_EXTERN ffi_type ffi_type_complex_double; -#if @HAVE_LONG_DOUBLE@ FFI_EXTERN ffi_type ffi_type_complex_longdouble; -#else -#define ffi_type_complex_longdouble ffi_type_complex_double -#endif #endif #endif /* LIBFFI_HIDE_BASIC_TYPES */ @@ -363,14 +352,6 @@ typedef struct { FFI_API void *ffi_closure_alloc (size_t size, void **code); FFI_API void ffi_closure_free (void *); -#if defined(PA_LINUX) || defined(PA_HPUX) -#define FFI_CLOSURE_PTR(X) ((void *)((unsigned int)(X) | 2)) -#define FFI_RESTORE_PTR(X) ((void *)((unsigned int)(X) & ~3)) -#else -#define FFI_CLOSURE_PTR(X) (X) -#define FFI_RESTORE_PTR(X) (X) -#endif - FFI_API ffi_status ffi_prep_closure (ffi_closure*, ffi_cif *, @@ -474,7 +455,7 @@ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, #endif /* FFI_CLOSURES */ -#if FFI_GO_CLOSURES +#ifdef FFI_GO_CLOSURES typedef struct { void *tramp; @@ -517,8 +498,14 @@ FFI_API ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type, size_t *offsets); -/* Useful for eliminating compiler warnings. */ +/* Convert between closure and function pointers. */ +#if defined(PA_LINUX) || defined(PA_HPUX) +#define FFI_FN(f) ((void (*)(void))((unsigned int)(f) | 2)) +#define FFI_CL(f) ((void *)((unsigned int)(f) & ~3)) +#else #define FFI_FN(f) ((void (*)(void))f) +#define FFI_CL(f) ((void *)(f)) +#endif /* ---- Definitions shared with assembly code ---------------------------- */ diff --git a/src/libffi/libffi-3.4.4/include/ffi_cfi.h b/src/libffi/libffi-3.4.6/include/ffi_cfi.h similarity index 100% rename from src/libffi/libffi-3.4.4/include/ffi_cfi.h rename to src/libffi/libffi-3.4.6/include/ffi_cfi.h diff --git a/src/libffi/libffi-3.4.4/include/ffi_common.h b/src/libffi/libffi-3.4.6/include/ffi_common.h similarity index 93% rename from src/libffi/libffi-3.4.4/include/ffi_common.h rename to src/libffi/libffi-3.4.6/include/ffi_common.h index 2bd31b03d..a9839b344 100644 --- a/src/libffi/libffi-3.4.4/include/ffi_common.h +++ b/src/libffi/libffi-3.4.6/include/ffi_common.h @@ -49,8 +49,10 @@ extern "C" { # endif # endif # define MAYBE_UNUSED __attribute__((__unused__)) +# define NORETURN __attribute__((__noreturn__)) #else # define MAYBE_UNUSED +# define NORETURN # if HAVE_ALLOCA_H # include # else @@ -82,9 +84,9 @@ char *alloca (); #endif #ifdef FFI_DEBUG -void ffi_assert(char *expr, char *file, int line); +NORETURN void ffi_assert(const char *expr, const char *file, int line); void ffi_stop_here(void); -void ffi_type_test(ffi_type *a, char *file, int line); +void ffi_type_test(ffi_type *a, const char *file, int line); #define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) #define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) @@ -128,6 +130,10 @@ void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN; static trampoline. */ int ffi_tramp_is_present (void *closure) FFI_HIDDEN; +/* Return a file descriptor of a temporary zero-sized file in a + writable and executable filesystem. */ +int open_temp_exec_file(void) FFI_HIDDEN; + /* Extended cif, used in callback from assembly routine */ typedef struct { diff --git a/src/libffi/libffi-3.4.4/include/tramp.h b/src/libffi/libffi-3.4.6/include/tramp.h similarity index 100% rename from src/libffi/libffi-3.4.4/include/tramp.h rename to src/libffi/libffi-3.4.6/include/tramp.h diff --git a/src/libffi/libffi-3.4.4/install-sh b/src/libffi/libffi-3.4.6/install-sh similarity index 100% rename from src/libffi/libffi-3.4.4/install-sh rename to src/libffi/libffi-3.4.6/install-sh diff --git a/src/libffi/libffi-3.4.4/libffi.map.in b/src/libffi/libffi-3.4.6/libffi.map.in similarity index 95% rename from src/libffi/libffi-3.4.4/libffi.map.in rename to src/libffi/libffi-3.4.6/libffi.map.in index de8778ae4..08c50b22d 100644 --- a/src/libffi/libffi-3.4.4/libffi.map.in +++ b/src/libffi/libffi-3.4.6/libffi.map.in @@ -33,7 +33,10 @@ LIBFFI_BASE_8.0 { ffi_raw_to_ptrarray; ffi_raw_size; +#if !FFI_NATIVE_RAW_API ffi_java_raw_call; +#endif + ffi_java_ptrarray_to_raw; ffi_java_raw_to_ptrarray; ffi_java_raw_size; @@ -62,8 +65,10 @@ LIBFFI_CLOSURE_8.0 { ffi_prep_closure_loc; ffi_prep_raw_closure; ffi_prep_raw_closure_loc; +#if !FFI_NATIVE_RAW_API ffi_prep_java_raw_closure; ffi_prep_java_raw_closure_loc; +#endif } LIBFFI_BASE_8.0; #endif diff --git a/src/libffi/libffi-3.4.4/libffi.pc.in b/src/libffi/libffi-3.4.6/libffi.pc.in similarity index 100% rename from src/libffi/libffi-3.4.4/libffi.pc.in rename to src/libffi/libffi-3.4.6/libffi.pc.in diff --git a/src/libffi/libffi-3.4.4/libffi.xcodeproj/project.pbxproj b/src/libffi/libffi-3.4.6/libffi.xcodeproj/project.pbxproj similarity index 100% rename from src/libffi/libffi-3.4.4/libffi.xcodeproj/project.pbxproj rename to src/libffi/libffi-3.4.6/libffi.xcodeproj/project.pbxproj diff --git a/src/libffi/libffi-3.4.4/libtool-ldflags b/src/libffi/libffi-3.4.6/libtool-ldflags similarity index 100% rename from src/libffi/libffi-3.4.4/libtool-ldflags rename to src/libffi/libffi-3.4.6/libtool-ldflags diff --git a/src/libffi/libffi-3.4.4/libtool-version b/src/libffi/libffi-3.4.6/libtool-version similarity index 99% rename from src/libffi/libffi-3.4.4/libtool-version rename to src/libffi/libffi-3.4.6/libtool-version index 03f54024b..3b32cb76a 100644 --- a/src/libffi/libffi-3.4.4/libtool-version +++ b/src/libffi/libffi-3.4.6/libtool-version @@ -26,4 +26,4 @@ # release, then set age to 0. # # CURRENT:REVISION:AGE -9:2:1 +9:4:1 diff --git a/src/libffi/libffi-3.4.4/ltmain.sh b/src/libffi/libffi-3.4.6/ltmain.sh similarity index 100% rename from src/libffi/libffi-3.4.4/ltmain.sh rename to src/libffi/libffi-3.4.6/ltmain.sh diff --git a/src/libffi/libffi-3.4.4/m4/asmcfi.m4 b/src/libffi/libffi-3.4.6/m4/asmcfi.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/asmcfi.m4 rename to src/libffi/libffi-3.4.6/m4/asmcfi.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_cc_maxopt.m4 b/src/libffi/libffi-3.4.6/m4/ax_cc_maxopt.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_cc_maxopt.m4 rename to src/libffi/libffi-3.4.6/m4/ax_cc_maxopt.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_cflags_warn_all.m4 b/src/libffi/libffi-3.4.6/m4/ax_cflags_warn_all.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_cflags_warn_all.m4 rename to src/libffi/libffi-3.4.6/m4/ax_cflags_warn_all.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_check_compile_flag.m4 b/src/libffi/libffi-3.4.6/m4/ax_check_compile_flag.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_check_compile_flag.m4 rename to src/libffi/libffi-3.4.6/m4/ax_check_compile_flag.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_compiler_vendor.m4 b/src/libffi/libffi-3.4.6/m4/ax_compiler_vendor.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_compiler_vendor.m4 rename to src/libffi/libffi-3.4.6/m4/ax_compiler_vendor.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_configure_args.m4 b/src/libffi/libffi-3.4.6/m4/ax_configure_args.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_configure_args.m4 rename to src/libffi/libffi-3.4.6/m4/ax_configure_args.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_enable_builddir.m4 b/src/libffi/libffi-3.4.6/m4/ax_enable_builddir.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_enable_builddir.m4 rename to src/libffi/libffi-3.4.6/m4/ax_enable_builddir.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_gcc_archflag.m4 b/src/libffi/libffi-3.4.6/m4/ax_gcc_archflag.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_gcc_archflag.m4 rename to src/libffi/libffi-3.4.6/m4/ax_gcc_archflag.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_gcc_x86_cpuid.m4 b/src/libffi/libffi-3.4.6/m4/ax_gcc_x86_cpuid.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_gcc_x86_cpuid.m4 rename to src/libffi/libffi-3.4.6/m4/ax_gcc_x86_cpuid.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_prepend_flag.m4 b/src/libffi/libffi-3.4.6/m4/ax_prepend_flag.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_prepend_flag.m4 rename to src/libffi/libffi-3.4.6/m4/ax_prepend_flag.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ax_require_defined.m4 b/src/libffi/libffi-3.4.6/m4/ax_require_defined.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ax_require_defined.m4 rename to src/libffi/libffi-3.4.6/m4/ax_require_defined.m4 diff --git a/src/libffi/libffi-3.4.4/m4/libtool.m4 b/src/libffi/libffi-3.4.6/m4/libtool.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/libtool.m4 rename to src/libffi/libffi-3.4.6/m4/libtool.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ltoptions.m4 b/src/libffi/libffi-3.4.6/m4/ltoptions.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ltoptions.m4 rename to src/libffi/libffi-3.4.6/m4/ltoptions.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ltsugar.m4 b/src/libffi/libffi-3.4.6/m4/ltsugar.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ltsugar.m4 rename to src/libffi/libffi-3.4.6/m4/ltsugar.m4 diff --git a/src/libffi/libffi-3.4.4/m4/ltversion.m4 b/src/libffi/libffi-3.4.6/m4/ltversion.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/ltversion.m4 rename to src/libffi/libffi-3.4.6/m4/ltversion.m4 diff --git a/src/libffi/libffi-3.4.4/m4/lt~obsolete.m4 b/src/libffi/libffi-3.4.6/m4/lt~obsolete.m4 similarity index 100% rename from src/libffi/libffi-3.4.4/m4/lt~obsolete.m4 rename to src/libffi/libffi-3.4.6/m4/lt~obsolete.m4 diff --git a/src/libffi/libffi-3.4.4/make_sunver.pl b/src/libffi/libffi-3.4.6/make_sunver.pl similarity index 100% rename from src/libffi/libffi-3.4.4/make_sunver.pl rename to src/libffi/libffi-3.4.6/make_sunver.pl diff --git a/src/libffi/libffi-3.4.4/man/Makefile.am b/src/libffi/libffi-3.4.6/man/Makefile.am similarity index 100% rename from src/libffi/libffi-3.4.4/man/Makefile.am rename to src/libffi/libffi-3.4.6/man/Makefile.am diff --git a/src/libffi/libffi-3.4.4/man/Makefile.in b/src/libffi/libffi-3.4.6/man/Makefile.in similarity index 99% rename from src/libffi/libffi-3.4.4/man/Makefile.in rename to src/libffi/libffi-3.4.6/man/Makefile.in index 830c84280..8f0678325 100644 --- a/src/libffi/libffi-3.4.4/man/Makefile.in +++ b/src/libffi/libffi-3.4.6/man/Makefile.in @@ -166,7 +166,6 @@ am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LTLDFLAGS = @AM_LTLDFLAGS@ diff --git a/src/libffi/libffi-3.4.4/man/ffi.3 b/src/libffi/libffi-3.4.6/man/ffi.3 similarity index 100% rename from src/libffi/libffi-3.4.4/man/ffi.3 rename to src/libffi/libffi-3.4.6/man/ffi.3 diff --git a/src/libffi/libffi-3.4.4/man/ffi_call.3 b/src/libffi/libffi-3.4.6/man/ffi_call.3 similarity index 100% rename from src/libffi/libffi-3.4.4/man/ffi_call.3 rename to src/libffi/libffi-3.4.6/man/ffi_call.3 diff --git a/src/libffi/libffi-3.4.4/man/ffi_prep_cif.3 b/src/libffi/libffi-3.4.6/man/ffi_prep_cif.3 similarity index 100% rename from src/libffi/libffi-3.4.4/man/ffi_prep_cif.3 rename to src/libffi/libffi-3.4.6/man/ffi_prep_cif.3 diff --git a/src/libffi/libffi-3.4.4/man/ffi_prep_cif_var.3 b/src/libffi/libffi-3.4.6/man/ffi_prep_cif_var.3 similarity index 100% rename from src/libffi/libffi-3.4.4/man/ffi_prep_cif_var.3 rename to src/libffi/libffi-3.4.6/man/ffi_prep_cif_var.3 diff --git a/src/libffi/libffi-3.4.4/missing b/src/libffi/libffi-3.4.6/missing similarity index 100% rename from src/libffi/libffi-3.4.4/missing rename to src/libffi/libffi-3.4.6/missing diff --git a/src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.sln b/src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.sln similarity index 100% rename from src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.sln rename to src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.sln diff --git a/src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.vcxproj b/src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.vcxproj similarity index 100% rename from src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.vcxproj rename to src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.vcxproj diff --git a/src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters b/src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters similarity index 100% rename from src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters rename to src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.vcxproj.filters diff --git a/src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.vcxproj.user b/src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.vcxproj.user similarity index 100% rename from src/libffi/libffi-3.4.4/msvc_build/aarch64/Ffi_staticLib.vcxproj.user rename to src/libffi/libffi-3.4.6/msvc_build/aarch64/Ffi_staticLib.vcxproj.user diff --git a/src/libffi/libffi-3.4.4/msvc_build/aarch64/aarch64_include/ffi.h b/src/libffi/libffi-3.4.6/msvc_build/aarch64/aarch64_include/ffi.h similarity index 99% rename from src/libffi/libffi-3.4.4/msvc_build/aarch64/aarch64_include/ffi.h rename to src/libffi/libffi-3.4.6/msvc_build/aarch64/aarch64_include/ffi.h index 8aed52555..2b0b69399 100644 --- a/src/libffi/libffi-3.4.4/msvc_build/aarch64/aarch64_include/ffi.h +++ b/src/libffi/libffi-3.4.6/msvc_build/aarch64/aarch64_include/ffi.h @@ -429,7 +429,7 @@ ffi_prep_java_raw_closure_loc (ffi_java_raw_closure*, #endif /* FFI_CLOSURES */ -#if FFI_GO_CLOSURES +#ifdef FFI_GO_CLOSURES typedef struct { void *tramp; diff --git a/src/libffi/libffi-3.4.4/msvc_build/aarch64/aarch64_include/fficonfig.h b/src/libffi/libffi-3.4.6/msvc_build/aarch64/aarch64_include/fficonfig.h similarity index 100% rename from src/libffi/libffi-3.4.4/msvc_build/aarch64/aarch64_include/fficonfig.h rename to src/libffi/libffi-3.4.6/msvc_build/aarch64/aarch64_include/fficonfig.h diff --git a/src/libffi/libffi-3.4.4/msvcc.sh b/src/libffi/libffi-3.4.6/msvcc.sh similarity index 100% rename from src/libffi/libffi-3.4.4/msvcc.sh rename to src/libffi/libffi-3.4.6/msvcc.sh diff --git a/src/libffi/libffi-3.4.4/src/aarch64/ffi.c b/src/libffi/libffi-3.4.6/src/aarch64/ffi.c similarity index 97% rename from src/libffi/libffi-3.4.4/src/aarch64/ffi.c rename to src/libffi/libffi-3.4.6/src/aarch64/ffi.c index 6544ac0fe..8661a352b 100644 --- a/src/libffi/libffi-3.4.4/src/aarch64/ffi.c +++ b/src/libffi/libffi-3.4.6/src/aarch64/ffi.c @@ -386,51 +386,64 @@ extend_hfa_type (void *dest, void *src, int h) ssize_t f = h - AARCH64_RET_S4; void *x0; +#define BTI_J "hint #36" asm volatile ( "adr %0, 0f\n" " add %0, %0, %1\n" " br %0\n" -"0: ldp s16, s17, [%3]\n" /* S4 */ +"0: "BTI_J"\n" /* S4 */ +" ldp s16, s17, [%3]\n" " ldp s18, s19, [%3, #8]\n" " b 4f\n" -" ldp s16, s17, [%3]\n" /* S3 */ +" "BTI_J"\n" /* S3 */ +" ldp s16, s17, [%3]\n" " ldr s18, [%3, #8]\n" " b 3f\n" -" ldp s16, s17, [%3]\n" /* S2 */ +" "BTI_J"\n" /* S2 */ +" ldp s16, s17, [%3]\n" " b 2f\n" " nop\n" -" ldr s16, [%3]\n" /* S1 */ +" "BTI_J"\n" /* S1 */ +" ldr s16, [%3]\n" " b 1f\n" " nop\n" -" ldp d16, d17, [%3]\n" /* D4 */ +" "BTI_J"\n" /* D4 */ +" ldp d16, d17, [%3]\n" " ldp d18, d19, [%3, #16]\n" " b 4f\n" -" ldp d16, d17, [%3]\n" /* D3 */ +" "BTI_J"\n" /* D3 */ +" ldp d16, d17, [%3]\n" " ldr d18, [%3, #16]\n" " b 3f\n" -" ldp d16, d17, [%3]\n" /* D2 */ +" "BTI_J"\n" /* D2 */ +" ldp d16, d17, [%3]\n" " b 2f\n" " nop\n" -" ldr d16, [%3]\n" /* D1 */ +" "BTI_J"\n" /* D1 */ +" ldr d16, [%3]\n" " b 1f\n" " nop\n" -" ldp q16, q17, [%3]\n" /* Q4 */ +" "BTI_J"\n" /* Q4 */ +" ldp q16, q17, [%3]\n" " ldp q18, q19, [%3, #32]\n" " b 4f\n" -" ldp q16, q17, [%3]\n" /* Q3 */ +" "BTI_J"\n" /* Q3 */ +" ldp q16, q17, [%3]\n" " ldr q18, [%3, #32]\n" " b 3f\n" -" ldp q16, q17, [%3]\n" /* Q2 */ +" "BTI_J"\n" /* Q2 */ +" ldp q16, q17, [%3]\n" " b 2f\n" " nop\n" -" ldr q16, [%3]\n" /* Q1 */ +" "BTI_J"\n" /* Q1 */ +" ldr q16, [%3]\n" " b 1f\n" "4: str q19, [%2, #48]\n" "3: str q18, [%2, #32]\n" "2: str q17, [%2, #16]\n" "1: str q16, [%2]" : "=&r"(x0) - : "r"(f * 12), "r"(dest), "r"(src) + : "r"(f * 16), "r"(dest), "r"(src) : "memory", "v16", "v17", "v18", "v19"); } #endif diff --git a/src/libffi/libffi-3.4.4/src/aarch64/ffitarget.h b/src/libffi/libffi-3.4.6/src/aarch64/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/aarch64/ffitarget.h rename to src/libffi/libffi-3.4.6/src/aarch64/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/aarch64/internal.h b/src/libffi/libffi-3.4.6/src/aarch64/internal.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/aarch64/internal.h rename to src/libffi/libffi-3.4.6/src/aarch64/internal.h diff --git a/src/libffi/libffi-3.4.4/src/aarch64/sysv.S b/src/libffi/libffi-3.4.6/src/aarch64/sysv.S similarity index 80% rename from src/libffi/libffi-3.4.4/src/aarch64/sysv.S rename to src/libffi/libffi-3.4.6/src/aarch64/sysv.S index eeaf3f851..fdd0e8b7b 100644 --- a/src/libffi/libffi-3.4.4/src/aarch64/sysv.S +++ b/src/libffi/libffi-3.4.6/src/aarch64/sysv.S @@ -40,6 +40,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #endif #endif +#ifdef __APPLE__ +# define L(X) CONCAT1(L, X) +#else +# define L(X) CONCAT1(.L, X) +#endif + #ifdef __AARCH64EB__ # define BE(X) X #else @@ -58,6 +64,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PTR_SIZE 8 #endif +#define BTI_C hint #34 +#define BTI_J hint #36 +/* + * The ELF Notes section needs to indicate if BTI is supported, as the first ELF loaded that doesn't + * declare this support disables it for the whole process. + */ +# define GNU_PROPERTY_AARCH64_BTI (1 << 0) /* Has Branch Target Identification */ .text .align 4 @@ -78,6 +91,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ cfi_startproc CNAME(ffi_call_SYSV): + BTI_C /* Sign the lr with x1 since that is where it will be stored */ SIGN_LR_WITH_REG(x1) @@ -138,78 +152,142 @@ CNAME(ffi_call_SYSV): /* Save the return value as directed. */ adr x5, 0f and w4, w4, #AARCH64_RET_MASK - add x5, x5, x4, lsl #3 + add x5, x5, x4, lsl #4 br x5 - /* Note that each table entry is 2 insns, and thus 8 bytes. + /* Note that each table entry is 4 insns, and thus 16 bytes. For integer data, note that we're storing into ffi_arg and therefore we want to extend to 64 bits; these types have two consecutive entries allocated for them. */ .align 4 -0: b 99f /* VOID */ +0: BTI_J /* VOID */ + b 99f + nop nop -1: str x0, [x3] /* INT64 */ +1: BTI_J /* INT64 */ + str x0, [x3] b 99f -2: stp x0, x1, [x3] /* INT128 */ + nop +2: BTI_J /* INT128 */ + stp x0, x1, [x3] b 99f + nop 3: brk #1000 /* UNUSED */ b 99f + nop + nop 4: brk #1000 /* UNUSED */ b 99f + nop + nop 5: brk #1000 /* UNUSED */ b 99f + nop + nop 6: brk #1000 /* UNUSED */ b 99f + nop + nop 7: brk #1000 /* UNUSED */ b 99f -8: st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] /* S4 */ + nop + nop +8: BTI_J /* S4 */ + st4 { v0.s, v1.s, v2.s, v3.s }[0], [x3] b 99f -9: st3 { v0.s, v1.s, v2.s }[0], [x3] /* S3 */ + nop +9: BTI_J /* S3 */ + st3 { v0.s, v1.s, v2.s }[0], [x3] b 99f -10: stp s0, s1, [x3] /* S2 */ + nop +10: BTI_J /* S2 */ + stp s0, s1, [x3] b 99f -11: str s0, [x3] /* S1 */ + nop +11: BTI_J + str s0, [x3] /* S1 */ b 99f -12: st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] /* D4 */ + nop +12: BTI_J /* D4 */ + st4 { v0.d, v1.d, v2.d, v3.d }[0], [x3] b 99f -13: st3 { v0.d, v1.d, v2.d }[0], [x3] /* D3 */ + nop +13: BTI_J /* D3 */ + st3 { v0.d, v1.d, v2.d }[0], [x3] b 99f -14: stp d0, d1, [x3] /* D2 */ + nop +14: BTI_J /* D2 */ + stp d0, d1, [x3] b 99f -15: str d0, [x3] /* D1 */ + nop +15: BTI_J /* D1 */ + str d0, [x3] b 99f -16: str q3, [x3, #48] /* Q4 */ nop -17: str q2, [x3, #32] /* Q3 */ +16: BTI_J /* Q4 */ + str q3, [x3, #48] + nop + nop +17: BTI_J /* Q3 */ + str q2, [x3, #32] + nop nop -18: stp q0, q1, [x3] /* Q2 */ +18: BTI_J /* Q2 */ + stp q0, q1, [x3] b 99f -19: str q0, [x3] /* Q1 */ + nop +19: BTI_J /* Q1 */ + str q0, [x3] b 99f -20: uxtb w0, w0 /* UINT8 */ + nop +20: BTI_J /* UINT8 */ + uxtb w0, w0 str x0, [x3] + nop 21: b 99f /* reserved */ nop -22: uxth w0, w0 /* UINT16 */ + nop + nop +22: BTI_J /* UINT16 */ + uxth w0, w0 str x0, [x3] + nop 23: b 99f /* reserved */ nop -24: mov w0, w0 /* UINT32 */ + nop + nop +24: BTI_J /* UINT32 */ + mov w0, w0 str x0, [x3] + nop 25: b 99f /* reserved */ nop -26: sxtb x0, w0 /* SINT8 */ + nop + nop +26: BTI_J /* SINT8 */ + sxtb x0, w0 str x0, [x3] + nop 27: b 99f /* reserved */ nop -28: sxth x0, w0 /* SINT16 */ + nop + nop +28: BTI_J /* SINT16 */ + sxth x0, w0 str x0, [x3] + nop 29: b 99f /* reserved */ nop -30: sxtw x0, w0 /* SINT32 */ + nop + nop +30: BTI_J /* SINT32 */ + sxtw x0, w0 str x0, [x3] + nop 31: b 99f /* reserved */ nop + nop + nop /* Return now that result has been populated. */ 99: @@ -246,6 +324,7 @@ CNAME(ffi_call_SYSV): .align 4 CNAME(ffi_closure_SYSV_V): cfi_startproc + BTI_C SIGN_LR stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) @@ -270,6 +349,7 @@ CNAME(ffi_closure_SYSV_V): .align 4 cfi_startproc CNAME(ffi_closure_SYSV): + BTI_C SIGN_LR stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) @@ -288,7 +368,7 @@ CNAME(ffi_closure_SYSV): ldp PTR_REG(0), PTR_REG(1), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET] /* load cif, fn */ ldr PTR_REG(2), [x17, #FFI_TRAMPOLINE_CLOSURE_OFFSET+PTR_SIZE*2] /* load user_data */ #ifdef FFI_GO_CLOSURES -.Ldo_closure: +L(do_closure): #endif add x3, sp, #16 /* load context */ add x4, sp, #ffi_closure_SYSV_FS /* load stack */ @@ -299,73 +379,135 @@ CNAME(ffi_closure_SYSV): /* Load the return value as directed. */ adr x1, 0f and w0, w0, #AARCH64_RET_MASK - add x1, x1, x0, lsl #3 + add x1, x1, x0, lsl #4 add x3, sp, #16+CALL_CONTEXT_SIZE br x1 - /* Note that each table entry is 2 insns, and thus 8 bytes. */ + /* Note that each table entry is 4 insns, and thus 16 bytes. */ .align 4 -0: b 99f /* VOID */ +0: BTI_J /* VOID */ + b 99f + nop nop -1: ldr x0, [x3] /* INT64 */ +1: BTI_J /* INT64 */ + ldr x0, [x3] b 99f -2: ldp x0, x1, [x3] /* INT128 */ + nop +2: BTI_J /* INT128 */ + ldp x0, x1, [x3] b 99f + nop 3: brk #1000 /* UNUSED */ nop + nop + nop 4: brk #1000 /* UNUSED */ nop + nop + nop 5: brk #1000 /* UNUSED */ nop + nop + nop 6: brk #1000 /* UNUSED */ nop + nop + nop 7: brk #1000 /* UNUSED */ nop -8: ldr s3, [x3, #12] /* S4 */ nop -9: ldr s2, [x3, #8] /* S3 */ nop -10: ldp s0, s1, [x3] /* S2 */ +8: BTI_J /* S4 */ + ldr s3, [x3, #12] + nop + nop +9: BTI_J /* S3 */ + ldr s2, [x3, #8] + nop + nop +10: BTI_J /* S2 */ + ldp s0, s1, [x3] b 99f -11: ldr s0, [x3] /* S1 */ + nop +11: BTI_J /* S1 */ + ldr s0, [x3] b 99f -12: ldr d3, [x3, #24] /* D4 */ nop -13: ldr d2, [x3, #16] /* D3 */ +12: BTI_J /* D4 */ + ldr d3, [x3, #24] + nop + nop +13: BTI_J /* D3 */ + ldr d2, [x3, #16] + nop nop -14: ldp d0, d1, [x3] /* D2 */ +14: BTI_J /* D2 */ + ldp d0, d1, [x3] b 99f -15: ldr d0, [x3] /* D1 */ + nop +15: BTI_J /* D1 */ + ldr d0, [x3] b 99f -16: ldr q3, [x3, #48] /* Q4 */ nop -17: ldr q2, [x3, #32] /* Q3 */ +16: BTI_J /* Q4 */ + ldr q3, [x3, #48] + nop + nop +17: BTI_J /* Q3 */ + ldr q2, [x3, #32] nop -18: ldp q0, q1, [x3] /* Q2 */ + nop +18: BTI_J /* Q2 */ + ldp q0, q1, [x3] b 99f -19: ldr q0, [x3] /* Q1 */ + nop +19: BTI_J /* Q1 */ + ldr q0, [x3] b 99f -20: ldrb w0, [x3, #BE(7)] /* UINT8 */ + nop +20: BTI_J /* UINT8 */ + ldrb w0, [x3, #BE(7)] b 99f + nop 21: brk #1000 /* reserved */ nop -22: ldrh w0, [x3, #BE(6)] /* UINT16 */ + nop + nop +22: BTI_J /* UINT16 */ + ldrh w0, [x3, #BE(6)] b 99f + nop 23: brk #1000 /* reserved */ nop -24: ldr w0, [x3, #BE(4)] /* UINT32 */ + nop + nop +24: BTI_J /* UINT32 */ + ldr w0, [x3, #BE(4)] b 99f + nop 25: brk #1000 /* reserved */ nop -26: ldrsb x0, [x3, #BE(7)] /* SINT8 */ + nop + nop +26: BTI_J /* SINT8 */ + ldrsb x0, [x3, #BE(7)] b 99f + nop 27: brk #1000 /* reserved */ nop -28: ldrsh x0, [x3, #BE(6)] /* SINT16 */ + nop + nop +28: BTI_J /* SINT16 */ + ldrsh x0, [x3, #BE(6)] b 99f + nop 29: brk #1000 /* reserved */ nop -30: ldrsw x0, [x3, #BE(4)] /* SINT32 */ + nop + nop +30: BTI_J /* SINT32 */ + ldrsw x0, [x3, #BE(4)] + nop nop 31: /* reserved */ 99: ldp x29, x30, [sp], #ffi_closure_SYSV_FS @@ -479,6 +621,7 @@ CNAME(ffi_closure_trampoline_table_page): .align 4 CNAME(ffi_go_closure_SYSV_V): cfi_startproc + BTI_C stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) cfi_rel_offset (x29, 0) @@ -502,6 +645,7 @@ CNAME(ffi_go_closure_SYSV_V): .align 4 cfi_startproc CNAME(ffi_go_closure_SYSV): + BTI_C stp x29, x30, [sp, #-ffi_closure_SYSV_FS]! cfi_adjust_cfa_offset (ffi_closure_SYSV_FS) cfi_rel_offset (x29, 0) @@ -518,7 +662,7 @@ CNAME(ffi_go_closure_SYSV): /* Load ffi_closure_inner arguments. */ ldp PTR_REG(0), PTR_REG(1), [x18, #PTR_SIZE]/* load cif, fn */ mov x2, x18 /* load user_data */ - b .Ldo_closure + b L(do_closure) cfi_endproc .globl CNAME(ffi_go_closure_SYSV) @@ -533,5 +677,17 @@ CNAME(ffi_go_closure_SYSV): #if defined __ELF__ && defined __linux__ .section .note.GNU-stack,"",%progbits + + .pushsection .note.gnu.property, "a"; + .balign 8; + .long 4; + .long 0x10; + .long 0x5; + .asciz "GNU"; + .long 0xc0000000; /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ + .long 4; + .long GNU_PROPERTY_AARCH64_BTI; + .long 0; + .popsection; #endif diff --git a/src/libffi/libffi-3.4.4/src/aarch64/win64_armasm.S b/src/libffi/libffi-3.4.6/src/aarch64/win64_armasm.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/aarch64/win64_armasm.S rename to src/libffi/libffi-3.4.6/src/aarch64/win64_armasm.S diff --git a/src/libffi/libffi-3.4.4/src/alpha/ffi.c b/src/libffi/libffi-3.4.6/src/alpha/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/alpha/ffi.c rename to src/libffi/libffi-3.4.6/src/alpha/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/alpha/ffitarget.h b/src/libffi/libffi-3.4.6/src/alpha/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/alpha/ffitarget.h rename to src/libffi/libffi-3.4.6/src/alpha/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/alpha/internal.h b/src/libffi/libffi-3.4.6/src/alpha/internal.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/alpha/internal.h rename to src/libffi/libffi-3.4.6/src/alpha/internal.h diff --git a/src/libffi/libffi-3.4.4/src/alpha/osf.S b/src/libffi/libffi-3.4.6/src/alpha/osf.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/alpha/osf.S rename to src/libffi/libffi-3.4.6/src/alpha/osf.S diff --git a/src/libffi/libffi-3.4.6/src/arc/arcompact.S b/src/libffi/libffi-3.4.6/src/arc/arcompact.S new file mode 100644 index 000000000..1d7f1a1fc --- /dev/null +++ b/src/libffi/libffi-3.4.6/src/arc/arcompact.S @@ -0,0 +1,210 @@ +/* ----------------------------------------------------------------------- + arcompact.S - Copyright (c) 2013 Synposys, Inc. (www.synopsys.com) + + ARCompact Foreign Function Interface + + 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 RENESAS TECHNOLOGY 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. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM +#include +#include +#ifdef HAVE_MACHINE_ASM_H +#include +#else +#define CNAME(x) x +#define ENTRY(x) .globl CNAME(x)` .type CNAME(x),%function` CNAME(x): +#endif + +#if __SIZEOF_POINTER__ == 8 +#define PTRS 8 +#define FLTS 8 +#define LARG ldl +#define SARG stl +#define ADDPTR addl +#define MOVPTR movl_s +#else +#define PTRS 4 +#define FLTS 4 +#define LARG ld +#define SARG st +#define ADDPTR add +#define MOVPTR mov_s +#endif + +#define FRAME_LEN (8 * PTRS + 16) + +.text + +ENTRY(ffi_call_asm) + .cfi_startproc + + /* Save registers. */ + .cfi_def_cfa r1, FRAME_LEN + SARG fp, [r1, FRAME_LEN - 2*PTRS] + .cfi_offset fp, -2*PTRS + SARG blink, [r1, FRAME_LEN - 1*PTRS] + .cfi_offset blink, -1*PTRS + ADDPTR fp, r1, FRAME_LEN + MOVPTR sp, r0 + .cfi_def_cfa fp, 0 + + /* Load arguments. */ + MOVPTR r11, r2 /* fn */ + MOVPTR r12, r3 /* closure */ + + /* Save arguments. */ + LARG r0, [fp, -FRAME_LEN+0*PTRS] + LARG r1, [fp, -FRAME_LEN+1*PTRS] + LARG r2, [fp, -FRAME_LEN+2*PTRS] + LARG r3, [fp, -FRAME_LEN+3*PTRS] + LARG r4, [fp, -FRAME_LEN+4*PTRS] + LARG r5, [fp, -FRAME_LEN+5*PTRS] + LARG r6, [fp, -FRAME_LEN+6*PTRS] + LARG r7, [fp, -FRAME_LEN+7*PTRS] + + /* Call the function. */ + jl [r11] + + /* Save return value (r0/r1) */ + SARG r0, [fp, -FRAME_LEN+0*PTRS] + SARG r1, [fp, -FRAME_LEN+1*PTRS] + + /* Restore and return. */ + add sp, fp, -FRAME_LEN + .cfi_def_cfa sp, FRAME_LEN + LARG blink, [fp, -1*PTRS] + .cfi_restore blink + LARG fp, [fp, -2*PTRS] + .cfi_restore fp + j_s [blink] + .cfi_endproc + .size ffi_call_asm, .-ffi_call_asm + +/* + ffi_closure_asm. Expects address of the passed-in ffi_closure in r8. + void ffi_closure_inner (ffi_cif *cif, + void (*fun) (ffi_cif *, void *, void **, void *), + void *user_data, + size_t *stackargs, struct call_context *regargs) +*/ + +ENTRY(ffi_closure_asm) + .cfi_startproc + + ADDPTR sp, sp, -FRAME_LEN + .cfi_def_cfa_offset FRAME_LEN + + /* Make a frame. */ + SARG fp, [sp, FRAME_LEN-2*PTRS] + .cfi_offset fp, -2*PTRS + SARG blink, [sp, FRAME_LEN-1*PTRS] + .cfi_offset blink, -1*PTRS + ADDPTR fp, sp, FRAME_LEN + + /* Save arguments. */ + SARG r0, [sp, 0*PTRS] + SARG r1, [sp, 1*PTRS] + SARG r2, [sp, 2*PTRS] + SARG r3, [sp, 3*PTRS] + SARG r4, [sp, 4*PTRS] + SARG r5, [sp, 5*PTRS] + SARG r6, [sp, 6*PTRS] + SARG r7, [sp, 7*PTRS] + + /* Enter C. */ + LARG r0, [r8, FFI_TRAMPOLINE_SIZE+0*PTRS] + LARG r1, [r8, FFI_TRAMPOLINE_SIZE+1*PTRS] + LARG r2, [r8, FFI_TRAMPOLINE_SIZE+2*PTRS] + ADDPTR r3, sp, FRAME_LEN + MOVPTR r4, sp + + /* Call the C code. */ + bl ffi_closure_inner + + /* Return values. */ + LARG r0, [sp, 0*PTRS] + LARG r1, [sp, 1*PTRS] + + /* Restore and return. */ + LARG blink, [sp, FRAME_LEN-1*PTRS] + .cfi_restore blink + LARG fp, [sp, FRAME_LEN-2*PTRS] + .cfi_restore fp + ADDPTR sp, sp, FRAME_LEN + .cfi_def_cfa_offset 0 + j_s [blink] + .cfi_endproc + .size ffi_closure_asm, .-ffi_closure_asm + +/* + ffi_go_closure_asm. Expects address of the passed-in ffi_go_closure in r12. + void ffi_closure_inner (ffi_cif *cif, + void (*fun) (ffi_cif *, void *, void **, void *), + void *user_data, + size_t *stackargs, struct call_context *regargs) +*/ + +ENTRY(ffi_go_closure_asm) + .cfi_startproc + + ADDPTR sp, sp, -FRAME_LEN + .cfi_def_cfa_offset FRAME_LEN + + /* make a frame */ + SARG fp, [sp, FRAME_LEN-2*PTRS] + .cfi_offset fp, -2*PTRS + SARG blink, [sp, FRAME_LEN-1*PTRS] + .cfi_offset blink, -1*PTRS + ADDPTR fp, sp, FRAME_LEN + + /* save arguments */ + SARG r0, [sp, 0*PTRS] + SARG r1, [sp, 1*PTRS] + SARG r2, [sp, 2*PTRS] + SARG r3, [sp, 3*PTRS] + SARG r4, [sp, 4*PTRS] + SARG r5, [sp, 5*PTRS] + SARG r6, [sp, 6*PTRS] + SARG r7, [sp, 7*PTRS] + + /* enter C */ + LARG r0, [r12, 1*PTRS] + LARG r1, [r12, 2*PTRS] + MOVPTR r2, r12 + ADDPTR r3, sp, FRAME_LEN + MOVPTR r4, sp + + bl ffi_closure_inner + + /* Return values. */ + LARG r0, [sp, 0*PTRS] + LARG r1, [sp, 1*PTRS] + + + LARG blink, [sp, FRAME_LEN-1*PTRS] + .cfi_restore blink + LARG fp, [sp, FRAME_LEN-2*PTRS] + .cfi_restore fp + ADDPTR sp, sp, FRAME_LEN + .cfi_def_cfa_offset 0 + j_s [blink] + .cfi_endproc + .size ffi_go_closure_asm, .-ffi_go_closure_asm diff --git a/src/libffi/libffi-3.4.6/src/arc/ffi.c b/src/libffi/libffi-3.4.6/src/arc/ffi.c new file mode 100644 index 000000000..d72927487 --- /dev/null +++ b/src/libffi/libffi-3.4.6/src/arc/ffi.c @@ -0,0 +1,443 @@ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 2013 Synopsys, Inc. (www.synopsys.com) + + ARC Foreign Function Interface + + 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 RENESAS TECHNOLOGY 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. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#include + +#define NARGREG 8 +#define STKALIGN 4 +#define MAXCOPYARG (2 * sizeof(double)) + +typedef struct call_context +{ + size_t r[8]; + /* used by the assembly code to in-place construct its own stack frame */ + char frame[16]; +} call_context; + +typedef struct call_builder +{ + call_context *aregs; + int used_integer; + //int used_float; + size_t *used_stack; + void *struct_stack; +} call_builder; + +/* integer (not pointer) less than ABI XLEN */ +/* FFI_TYPE_INT does not appear to be used */ +#if defined(__ARC64_ARCH64__) +#define IS_INT(type) ((type) >= FFI_TYPE_UINT8 && (type) <= FFI_TYPE_SINT64) +#else +#define IS_INT(type) ((type) >= FFI_TYPE_UINT8 && (type) <= FFI_TYPE_SINT32) +#endif + +/* for little endian ARC, the code is in fact stored as mixed endian for + performance reasons */ +#if __BIG_ENDIAN__ +#define CODE_ENDIAN(x) (x) +#else +#define CODE_ENDIAN(x) ( (((uint32_t) (x)) << 16) | (((uint32_t) (x)) >> 16)) +#endif + +/* Perform machine dependent cif processing. */ +ffi_status +ffi_prep_cif_machdep (ffi_cif * cif) +{ + /* Set the return type flag. */ + switch (cif->rtype->type) + { + case FFI_TYPE_VOID: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_STRUCT: + cif->flags = (unsigned) cif->rtype->type; + break; + + case FFI_TYPE_SINT64: + case FFI_TYPE_UINT64: + case FFI_TYPE_DOUBLE: + cif->flags = FFI_TYPE_DOUBLE; + break; + + case FFI_TYPE_FLOAT: + default: + cif->flags = FFI_TYPE_INT; + break; + } + + return FFI_OK; +} + +/* allocates a single register, float register, or XLEN-sized stack slot to a datum */ +static void marshal_atom(call_builder *cb, int type, void *data) { + size_t value = 0; + switch (type) { + case FFI_TYPE_UINT8: value = *(uint8_t *)data; break; + case FFI_TYPE_SINT8: value = *(int8_t *)data; break; + case FFI_TYPE_UINT16: value = *(uint16_t *)data; break; + case FFI_TYPE_SINT16: value = *(int16_t *)data; break; + /* 32-bit quantities are always sign-extended in the ABI */ + case FFI_TYPE_UINT32: value = *(int32_t *)data; break; + case FFI_TYPE_SINT32: value = *(int32_t *)data; break; +#if defined(__ARC64_ARCH64__) + case FFI_TYPE_UINT64: value = *(uint64_t *)data; break; + case FFI_TYPE_SINT64: value = *(int64_t *)data; break; +#endif + case FFI_TYPE_POINTER: value = *(size_t *)data; break; + default: FFI_ASSERT(0); break; + } + + if (cb->used_integer == NARGREG) { + *cb->used_stack++ = value; + } else { + cb->aregs->r[cb->used_integer++] = value; + } +} + +/* adds an argument to a call, or a not by reference return value */ +static void marshal(call_builder *cb, ffi_type *type, int var, void *data) { + size_t realign[2]; + +#if (defined(__ARC64_ARCH64__) || defined(__ARC64_ARCH32__)) + if (type->size > 2 * __SIZEOF_POINTER__) { + if (var) { + marshal_atom(cb, FFI_TYPE_POINTER, &data); + } else { + /* copy to stack and pass by reference */ + data = memcpy (cb->struct_stack, data, type->size); + cb->struct_stack = (size_t *) FFI_ALIGN ((char *) cb->struct_stack + type->size, __SIZEOF_POINTER__); + marshal_atom(cb, FFI_TYPE_POINTER, &data); + } + } +#else + if (type->type == FFI_TYPE_STRUCT) { + if (var) { + if (type->size > 0) + marshal_atom(cb, FFI_TYPE_POINTER, data); + } else { + int i; + + for (i = 0; i < type->size; i += sizeof(size_t)) { + marshal_atom(cb, FFI_TYPE_POINTER, data); + data += sizeof(size_t); + } + } + } +#endif + else if (IS_INT(type->type) || type->type == FFI_TYPE_POINTER) { + marshal_atom(cb, type->type, data); + } else { + memcpy(realign, data, type->size); + if (type->size > 0) + marshal_atom(cb, FFI_TYPE_POINTER, realign); + if (type->size > __SIZEOF_POINTER__) + marshal_atom(cb, FFI_TYPE_POINTER, realign + 1); + } +} + +static void unmarshal_atom(call_builder *cb, int type, void *data) { + size_t value; + + if (cb->used_integer == NARGREG) { + value = *cb->used_stack++; + } else { + value = cb->aregs->r[cb->used_integer++]; + } + + switch (type) { + case FFI_TYPE_UINT8: *(uint8_t *)data = value; break; + case FFI_TYPE_SINT8: *(uint8_t *)data = value; break; + case FFI_TYPE_UINT16: *(uint16_t *)data = value; break; + case FFI_TYPE_SINT16: *(uint16_t *)data = value; break; + case FFI_TYPE_UINT32: *(uint32_t *)data = value; break; + case FFI_TYPE_SINT32: *(uint32_t *)data = value; break; +#if defined(__ARC64_ARCH64__) + case FFI_TYPE_UINT64: *(uint64_t *)data = value; break; + case FFI_TYPE_SINT64: *(uint64_t *)data = value; break; +#endif + case FFI_TYPE_POINTER: *(size_t *)data = value; break; + default: FFI_ASSERT(0); break; + } +} + +/* for arguments passed by reference returns the pointer, otherwise the arg is copied (up to MAXCOPYARG bytes) */ +static void *unmarshal(call_builder *cb, ffi_type *type, int var, void *data) { + size_t realign[2]; + void *pointer; + +#if defined(__ARC64_ARCH64__) + if (type->size > 2 * __SIZEOF_POINTER__) { + /* pass by reference */ + unmarshal_atom(cb, FFI_TYPE_POINTER, (char*)&pointer); + return pointer; + } +#elif defined(__ARC64_ARCH32__) + if (type->type == FFI_TYPE_STRUCT) { + if (type->size > 2 * __SIZEOF_POINTER__) { + unmarshal_atom(cb, FFI_TYPE_POINTER, &realign[0]); + memcpy(data, (const void*)realign[0], type->size); + return data; + } else { + int i; + void *pdata = data; + + for (i = 0; i < type->size; i += sizeof(size_t)) { + unmarshal_atom(cb, FFI_TYPE_POINTER, pdata); + pdata += sizeof(size_t); + } + return data; + } + } +#else + if (type->type == FFI_TYPE_STRUCT) { + + if (var) { + int i; + void *pdata = data; + + for (i = 0; i < type->size; i += sizeof(size_t)) { + unmarshal_atom(cb, FFI_TYPE_POINTER, pdata); + pdata += sizeof(size_t); + } + return data; + } else { + if (type->size > 0) + unmarshal_atom(cb, FFI_TYPE_POINTER, &realign[0]); + memcpy(data, (const void*)realign[0], type->size); + return data; + } + } +#endif + else if (IS_INT(type->type) || type->type == FFI_TYPE_POINTER) { + unmarshal_atom(cb, type->type, data); + return data; + } else { + if (type->size > 0) + unmarshal_atom(cb, FFI_TYPE_POINTER, realign); + if (type->size > __SIZEOF_POINTER__) + unmarshal_atom(cb, FFI_TYPE_POINTER, realign + 1); + memcpy(data, realign, type->size); + return data; + } +} + +static int passed_by_ref(ffi_type *type, int var) { + if (type->type == FFI_TYPE_STRUCT) + return 1; + + return type->size > 2 * __SIZEOF_POINTER__; +} + +/* Low level routine for calling functions */ +extern void ffi_call_asm (void *stack, struct call_context *regs, + void (*fn) (void), void *closure) FFI_HIDDEN; + +static void +ffi_call_int (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue, + void *closure) +{ + int return_by_ref = passed_by_ref(cif->rtype, 0); + + /* Allocate space for stack arg parameters. */ + size_t arg_bytes = FFI_ALIGN(2 * sizeof(size_t) * cif->nargs, STKALIGN); + /* Allocate space for copies of big structures. */ + size_t struct_bytes = FFI_ALIGN(cif->bytes, STKALIGN); + // size_t rval_bytes = 0; + // if (rvalue == NULL && cif->rtype->size > 2*__SIZEOF_POINTER__) + // rval_bytes = FFI_ALIGN(cif->rtype->size, STKALIGN); + size_t alloc_size = arg_bytes + /*rval_bytes +*/ struct_bytes + sizeof(call_context); + size_t alloc_base = (size_t)alloca(alloc_size); + + // if (rval_bytes) + // rvalue = (void*)(alloc_base + arg_bytes); + + call_builder cb; + cb.used_integer = 0; + cb.aregs = (call_context*)(alloc_base + arg_bytes /*+ rval_bytes*/ + struct_bytes); + cb.used_stack = (void*)alloc_base; + cb.struct_stack = (void *)(alloc_base + arg_bytes /*+ rval_bytes*/); + + // if (cif->rtype->type == FFI_TYPE_STRUCT) + // marshal(&cb, &ffi_type_pointer, 0, &rvalue); + + if (return_by_ref) + marshal(&cb, &ffi_type_pointer, 0, &rvalue); + + int i; + for (i = 0; i < cif->nargs; i++) + marshal(&cb, cif->arg_types[i], 0, avalue[i]); + + ffi_call_asm ((void *) alloc_base, cb.aregs, fn, closure); + + cb.used_integer = 0; + if (!return_by_ref && rvalue) + { + if (IS_INT(cif->rtype->type) + && cif->rtype->size < sizeof (ffi_arg)) + { + /* Integer types smaller than ffi_arg need to be extended. */ + switch (cif->rtype->type) { + case FFI_TYPE_SINT8: + case FFI_TYPE_SINT16: + case FFI_TYPE_SINT32: + unmarshal_atom (&cb, (sizeof (ffi_arg) > 4 + ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32), + rvalue); + break; + case FFI_TYPE_UINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_UINT32: + unmarshal_atom (&cb, (sizeof (ffi_arg) > 4 + ? FFI_TYPE_UINT64 : FFI_TYPE_UINT32), + rvalue); + break; + } + } + else + unmarshal(&cb, cif->rtype, 0, rvalue); + } +} + +void +ffi_call (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue) +{ + ffi_call_int(cif, fn, rvalue, avalue, NULL); +} + +void +ffi_call_go (ffi_cif *cif, void (*fn) (void), void *rvalue, + void **avalue, void *closure) +{ + ffi_call_int(cif, fn, rvalue, avalue, closure); +} + +extern void ffi_closure_asm(void) FFI_HIDDEN; + +ffi_status +ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif, + void (*fun) (ffi_cif *, void *, void **, void *), + void *user_data, void *codeloc) +{ + uint32_t *tramp = (uint32_t *) & (closure->tramp[0]); + size_t address_ffi_closure = (size_t) ffi_closure_asm; + + switch (cif->abi) + { +#if defined(__ARC64_ARCH64__) + case FFI_ARC64: + FFI_ASSERT (tramp == codeloc); + tramp[0] = CODE_ENDIAN (0x580a1fc0); /* movl r8, pcl */ + tramp[1] = CODE_ENDIAN (0x5c0b1f80); /* movhl r12, limm */ + tramp[2] = CODE_ENDIAN ((uint32_t)(address_ffi_closure >> 32)); + tramp[3] = CODE_ENDIAN (0x5c051f8c); /* orl r12, r12, limm */ + tramp[4] = CODE_ENDIAN ((uint32_t)(address_ffi_closure & 0xffffffff)); + tramp[5] = CODE_ENDIAN (0x20200300); /* j [r12] */ + break; +#else + case FFI_ARCOMPACT: + FFI_ASSERT (tramp == codeloc); + tramp[0] = CODE_ENDIAN (0x200a1fc0); /* mov r8, pcl */ + tramp[1] = CODE_ENDIAN (0x20200f80); /* j [long imm] */ + tramp[2] = CODE_ENDIAN (ffi_closure_asm); + break; +#endif + + default: + return FFI_BAD_ABI; + } + + closure->cif = cif; + closure->fun = fun; + closure->user_data = user_data; + cacheflush (codeloc, FFI_TRAMPOLINE_SIZE, BCACHE); + + return FFI_OK; +} + +extern void ffi_go_closure_asm (void) FFI_HIDDEN; + +ffi_status +ffi_prep_go_closure (ffi_go_closure *closure, ffi_cif *cif, + void (*fun) (ffi_cif *, void *, void **, void *)) +{ + if (cif->abi <= FFI_FIRST_ABI || cif->abi >= FFI_LAST_ABI) + return FFI_BAD_ABI; + + closure->tramp = (void *) ffi_go_closure_asm; + closure->cif = cif; + closure->fun = fun; + + return FFI_OK; +} + +/* Called by the assembly code with aregs pointing to saved argument registers + and stack pointing to the stacked arguments. Return values passed in + registers will be reloaded from aregs. */ +void FFI_HIDDEN +ffi_closure_inner (ffi_cif *cif, + void (*fun) (ffi_cif *, void *, void **, void *), + void *user_data, + size_t *stack, call_context *aregs) +{ + void **avalue = alloca(cif->nargs * sizeof(void*)); + /* storage for arguments which will be copied by unmarshal(). We could + theoretically avoid the copies in many cases and use at most 128 bytes + of memory, but allocating disjoint storage for each argument is + simpler. */ + char *astorage = alloca(cif->bytes); + char *ptr = astorage; + void *rvalue; + call_builder cb; + int i; + + cb.aregs = aregs; + cb.used_integer = 0; + cb.used_stack = stack; + + /* handle hidden argument */ + if (cif->flags == FFI_TYPE_STRUCT) + unmarshal(&cb, &ffi_type_pointer, 0, &rvalue); + else + rvalue = alloca(cif->rtype->size); + + for (i = 0; i < cif->nargs; i++) { + avalue[i] = unmarshal(&cb, cif->arg_types[i], 1, ptr); + ptr += cif->arg_types[i]->size; + } + + fun (cif, rvalue, avalue, user_data); + + if (cif->rtype->type != FFI_TYPE_VOID) { + cb.used_integer = 0; + marshal(&cb, cif->rtype, 1, rvalue); + } +} diff --git a/src/libffi/libffi-3.4.4/src/arc/ffitarget.h b/src/libffi/libffi-3.4.6/src/arc/ffitarget.h similarity index 89% rename from src/libffi/libffi-3.4.4/src/arc/ffitarget.h rename to src/libffi/libffi-3.4.6/src/arc/ffitarget.h index bf8311bc8..5b36902e7 100644 --- a/src/libffi/libffi-3.4.4/src/arc/ffitarget.h +++ b/src/libffi/libffi-3.4.6/src/arc/ffitarget.h @@ -40,14 +40,28 @@ typedef signed long ffi_sarg; typedef enum ffi_abi { FFI_FIRST_ABI = 0, +#if __SIZEOF_POINTER__ == 8 + FFI_ARC64, +#else FFI_ARCOMPACT, +#endif FFI_LAST_ABI, +#if __SIZEOF_POINTER__ == 8 + FFI_DEFAULT_ABI = FFI_ARC64 +#else FFI_DEFAULT_ABI = FFI_ARCOMPACT +#endif } ffi_abi; #endif #define FFI_CLOSURES 1 +#define FFI_GO_CLOSURES 1 +#if __SIZEOF_POINTER__ == 8 +#define FFI_TRAMPOLINE_SIZE 24 +#else #define FFI_TRAMPOLINE_SIZE 12 +#endif + #define FFI_NATIVE_RAW_API 0 #endif diff --git a/src/libffi/libffi-3.4.4/src/arm/ffi.c b/src/libffi/libffi-3.4.6/src/arm/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/arm/ffi.c rename to src/libffi/libffi-3.4.6/src/arm/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/arm/ffitarget.h b/src/libffi/libffi-3.4.6/src/arm/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/arm/ffitarget.h rename to src/libffi/libffi-3.4.6/src/arm/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/arm/internal.h b/src/libffi/libffi-3.4.6/src/arm/internal.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/arm/internal.h rename to src/libffi/libffi-3.4.6/src/arm/internal.h diff --git a/src/libffi/libffi-3.4.4/src/arm/sysv.S b/src/libffi/libffi-3.4.6/src/arm/sysv.S similarity index 96% rename from src/libffi/libffi-3.4.4/src/arm/sysv.S rename to src/libffi/libffi-3.4.6/src/arm/sysv.S index fb36213c6..e4272a103 100644 --- a/src/libffi/libffi-3.4.4/src/arm/sysv.S +++ b/src/libffi/libffi-3.4.6/src/arm/sysv.S @@ -142,13 +142,8 @@ ARM_FUNC_START(ffi_call_VFP) cmp r3, #3 @ load only d0 if possible ite le -#ifdef __clang__ - vldrle d0, [r0] - vldmgt r0, {d0-d7} -#else ldcle p11, cr0, [r0] @ vldrle d0, [r0] ldcgt p11, cr0, [r0], {16} @ vldmgt r0, {d0-d7} -#endif add r0, r0, #64 @ discard the vfp register args /* FALLTHRU */ ARM_FUNC_END(ffi_call_VFP) @@ -193,25 +188,13 @@ ARM_FUNC_START(ffi_call_SYSV) #endif 0: E(ARM_TYPE_VFP_S) -#ifdef __clang__ - vstr s0, [r2] -#else stc p10, cr0, [r2] @ vstr s0, [r2] -#endif pop {fp,pc} E(ARM_TYPE_VFP_D) -#ifdef __clang__ - vstr d0, [r2] -#else stc p11, cr0, [r2] @ vstr d0, [r2] -#endif pop {fp,pc} E(ARM_TYPE_VFP_N) -#ifdef __clang__ - vstm r2, {d0-d3} -#else stc p11, cr0, [r2], {8} @ vstm r2, {d0-d3} -#endif pop {fp,pc} E(ARM_TYPE_INT64) str r1, [r2, #4] @@ -320,11 +303,7 @@ ARM_FUNC_START(ffi_closure_VFP) add ip, sp, #16 sub sp, sp, #64+32 @ allocate frame cfi_adjust_cfa_offset(64+32) -#ifdef __clang__ - vstm sp, {d0-d7} -#else stc p11, cr0, [sp], {16} @ vstm sp, {d0-d7} -#endif stmdb sp!, {ip,lr} /* See above. */ @@ -358,25 +337,13 @@ ARM_FUNC_START_LOCAL(ffi_closure_ret) cfi_rel_offset(lr, 4) 0: E(ARM_TYPE_VFP_S) -#ifdef __clang__ - vldr s0, [r2] -#else ldc p10, cr0, [r2] @ vldr s0, [r2] -#endif b call_epilogue E(ARM_TYPE_VFP_D) -#ifdef __clang__ - vldr d0, [r2] -#else ldc p11, cr0, [r2] @ vldr d0, [r2] -#endif b call_epilogue E(ARM_TYPE_VFP_N) -#ifdef __clang__ - vldm r2, {d0-d3} -#else ldc p11, cr0, [r2], {8} @ vldm r2, {d0-d3} -#endif b call_epilogue E(ARM_TYPE_INT64) ldr r1, [r2, #4] diff --git a/src/libffi/libffi-3.4.4/src/arm/sysv_msvc_arm32.S b/src/libffi/libffi-3.4.6/src/arm/sysv_msvc_arm32.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/arm/sysv_msvc_arm32.S rename to src/libffi/libffi-3.4.6/src/arm/sysv_msvc_arm32.S diff --git a/src/libffi/libffi-3.4.4/src/avr32/ffi.c b/src/libffi/libffi-3.4.6/src/avr32/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/avr32/ffi.c rename to src/libffi/libffi-3.4.6/src/avr32/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/avr32/ffitarget.h b/src/libffi/libffi-3.4.6/src/avr32/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/avr32/ffitarget.h rename to src/libffi/libffi-3.4.6/src/avr32/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/avr32/sysv.S b/src/libffi/libffi-3.4.6/src/avr32/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/avr32/sysv.S rename to src/libffi/libffi-3.4.6/src/avr32/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/bfin/ffi.c b/src/libffi/libffi-3.4.6/src/bfin/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/bfin/ffi.c rename to src/libffi/libffi-3.4.6/src/bfin/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/bfin/ffitarget.h b/src/libffi/libffi-3.4.6/src/bfin/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/bfin/ffitarget.h rename to src/libffi/libffi-3.4.6/src/bfin/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/bfin/sysv.S b/src/libffi/libffi-3.4.6/src/bfin/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/bfin/sysv.S rename to src/libffi/libffi-3.4.6/src/bfin/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/closures.c b/src/libffi/libffi-3.4.6/src/closures.c similarity index 98% rename from src/libffi/libffi-3.4.4/src/closures.c rename to src/libffi/libffi-3.4.6/src/closures.c index 9aafbec4b..67a94a822 100644 --- a/src/libffi/libffi-3.4.4/src/closures.c +++ b/src/libffi/libffi-3.4.6/src/closures.c @@ -31,6 +31,8 @@ #define _GNU_SOURCE 1 #endif +#ifndef __EMSCRIPTEN__ + #include #include #include @@ -597,7 +599,7 @@ open_temp_exec_file_memfd (const char *name) /* Open a temporary file name, and immediately unlink it. */ static int -open_temp_exec_file_name (char *name, int flags) +open_temp_exec_file_name (char *name, int flags MAYBE_UNUSED) { int fd; @@ -793,9 +795,9 @@ open_temp_exec_file (void) Failure to allocate the space will cause SIGBUS to be thrown when the mapping is subsequently written to. */ static int -allocate_space (int fd, off_t offset, off_t len) +allocate_space (int fd, off_t len) { - static size_t page_size; + static long page_size; /* Obtain system page size. */ if (!page_size) @@ -836,7 +838,7 @@ dlmmap_locked (void *start, size_t length, int prot, int flags, off_t offset) offset = execsize; - if (allocate_space (execfd, offset, length)) + if (allocate_space (execfd, length)) return MFAIL; flags &= ~(MAP_PRIVATE | MAP_ANONYMOUS); @@ -993,23 +995,23 @@ ffi_closure_alloc (size_t size, void **code) if (!code) return NULL; - ptr = FFI_CLOSURE_PTR (dlmalloc (size)); + ptr = dlmalloc (size); if (ptr) { msegmentptr seg = segment_holding (gm, ptr); - *code = add_segment_exec_offset (ptr, seg); + *code = FFI_FN (add_segment_exec_offset (ptr, seg)); if (!ffi_tramp_is_supported ()) return ptr; ftramp = ffi_tramp_alloc (0); if (ftramp == NULL) { - dlfree (FFI_RESTORE_PTR (ptr)); + dlfree (ptr); return NULL; } - *code = ffi_tramp_get_addr (ftramp); + *code = FFI_FN (ffi_tramp_get_addr (ftramp)); ((ffi_closure *) ptr)->ftramp = ftramp; } @@ -1050,7 +1052,7 @@ ffi_closure_free (void *ptr) if (ffi_tramp_is_supported ()) ffi_tramp_free (((ffi_closure *) ptr)->ftramp); - dlfree (FFI_RESTORE_PTR (ptr)); + dlfree (ptr); } int @@ -1070,16 +1072,20 @@ ffi_tramp_is_present (void *ptr) void * ffi_closure_alloc (size_t size, void **code) { + void *c; + if (!code) return NULL; - return *code = FFI_CLOSURE_PTR (malloc (size)); + c = malloc (size); + *code = FFI_FN (c); + return c; } void ffi_closure_free (void *ptr) { - free (FFI_RESTORE_PTR (ptr)); + free (ptr); } void * @@ -1098,3 +1104,4 @@ ffi_tramp_is_present (__attribute__((unused)) void *ptr) #endif /* FFI_CLOSURES */ #endif /* NetBSD with PROT_MPROTECT */ +#endif /* __EMSCRIPTEN__ */ diff --git a/src/libffi/libffi-3.4.4/src/cris/ffi.c b/src/libffi/libffi-3.4.6/src/cris/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/cris/ffi.c rename to src/libffi/libffi-3.4.6/src/cris/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/cris/ffitarget.h b/src/libffi/libffi-3.4.6/src/cris/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/cris/ffitarget.h rename to src/libffi/libffi-3.4.6/src/cris/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/cris/sysv.S b/src/libffi/libffi-3.4.6/src/cris/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/cris/sysv.S rename to src/libffi/libffi-3.4.6/src/cris/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/csky/ffi.c b/src/libffi/libffi-3.4.6/src/csky/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/csky/ffi.c rename to src/libffi/libffi-3.4.6/src/csky/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/csky/ffitarget.h b/src/libffi/libffi-3.4.6/src/csky/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/csky/ffitarget.h rename to src/libffi/libffi-3.4.6/src/csky/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/csky/sysv.S b/src/libffi/libffi-3.4.6/src/csky/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/csky/sysv.S rename to src/libffi/libffi-3.4.6/src/csky/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/debug.c b/src/libffi/libffi-3.4.6/src/debug.c similarity index 94% rename from src/libffi/libffi-3.4.4/src/debug.c rename to src/libffi/libffi-3.4.6/src/debug.c index f3172b1ef..63321dc01 100644 --- a/src/libffi/libffi-3.4.4/src/debug.c +++ b/src/libffi/libffi-3.4.6/src/debug.c @@ -38,7 +38,7 @@ void ffi_stop_here(void) /* This function should only be called via the FFI_ASSERT() macro */ -void ffi_assert(char *expr, char *file, int line) +NORETURN void ffi_assert(const char *expr, const char *file, int line) { fprintf(stderr, "ASSERTION FAILURE: %s at %s:%d\n", expr, file, line); ffi_stop_here(); @@ -47,7 +47,7 @@ void ffi_assert(char *expr, char *file, int line) /* Perform a sanity check on an ffi_type structure */ -void ffi_type_test(ffi_type *a, char *file, int line) +void ffi_type_test(ffi_type *a, const char *file, int line) { FFI_ASSERT_AT(a != NULL, file, line); diff --git a/src/libffi/libffi-3.4.4/src/dlmalloc.c b/src/libffi/libffi-3.4.6/src/dlmalloc.c similarity index 99% rename from src/libffi/libffi-3.4.4/src/dlmalloc.c rename to src/libffi/libffi-3.4.6/src/dlmalloc.c index 6f4a5f6c4..c61ef9240 100644 --- a/src/libffi/libffi-3.4.4/src/dlmalloc.c +++ b/src/libffi/libffi-3.4.6/src/dlmalloc.c @@ -4452,7 +4452,7 @@ struct mallinfo dlmallinfo(void) { } #endif /* NO_MALLINFO */ -void dlmalloc_stats() { +void dlmalloc_stats(void) { internal_malloc_stats(gm); } diff --git a/src/libffi/libffi-3.4.4/src/frv/eabi.S b/src/libffi/libffi-3.4.6/src/frv/eabi.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/frv/eabi.S rename to src/libffi/libffi-3.4.6/src/frv/eabi.S diff --git a/src/libffi/libffi-3.4.4/src/frv/ffi.c b/src/libffi/libffi-3.4.6/src/frv/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/frv/ffi.c rename to src/libffi/libffi-3.4.6/src/frv/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/frv/ffitarget.h b/src/libffi/libffi-3.4.6/src/frv/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/frv/ffitarget.h rename to src/libffi/libffi-3.4.6/src/frv/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/ia64/ffi.c b/src/libffi/libffi-3.4.6/src/ia64/ffi.c similarity index 98% rename from src/libffi/libffi-3.4.4/src/ia64/ffi.c rename to src/libffi/libffi-3.4.6/src/ia64/ffi.c index b1d04c3e7..1395f26a8 100644 --- a/src/libffi/libffi-3.4.4/src/ia64/ffi.c +++ b/src/libffi/libffi-3.4.6/src/ia64/ffi.c @@ -38,7 +38,11 @@ /* A 64-bit pointer value. In LP64 mode, this is effectively a plain pointer. In ILP32 mode, it's a pointer that's been extended to 64 bits by "addp4". */ +#ifdef __hpux +typedef void *PTR64; +#else // some other unix typedef void *PTR64 __attribute__((mode(DI))); +#endif /* Memory image of fp register contents. This is the implementation specific format used by ldf.fill/stf.spill. All we care about is @@ -76,14 +80,22 @@ endian_adjust (void *addr, size_t len) point types without type conversions. Type conversion to long double breaks the denorm support. */ +#ifdef __hpux +#define stf_spill(addr, value) +#else #define stf_spill(addr, value) \ asm ("stf.spill %0 = %1%P0" : "=m" (*addr) : "f"(value)); +#endif /* Load a value from ADDR, which is in the current cpu implementation's fp spill format. As above, this must also be a macro. */ +#ifdef __hpux +#define ldf_fill(result, addr) +#else #define ldf_fill(result, addr) \ asm ("ldf.fill %0 = %1%P1" : "=f"(result) : "m"(*addr)); +#endif /* Return the size of the C type associated with with TYPE. Which will be one of the FFI_IA64_TYPE_HFA_* values. */ diff --git a/src/libffi/libffi-3.4.4/src/ia64/ffitarget.h b/src/libffi/libffi-3.4.6/src/ia64/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/ia64/ffitarget.h rename to src/libffi/libffi-3.4.6/src/ia64/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/ia64/ia64_flags.h b/src/libffi/libffi-3.4.6/src/ia64/ia64_flags.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/ia64/ia64_flags.h rename to src/libffi/libffi-3.4.6/src/ia64/ia64_flags.h diff --git a/src/libffi/libffi-3.4.4/src/ia64/unix.S b/src/libffi/libffi-3.4.6/src/ia64/unix.S similarity index 96% rename from src/libffi/libffi-3.4.4/src/ia64/unix.S rename to src/libffi/libffi-3.4.6/src/ia64/unix.S index e2547e02b..04908368c 100644 --- a/src/libffi/libffi-3.4.4/src/ia64/unix.S +++ b/src/libffi/libffi-3.4.6/src/ia64/unix.S @@ -36,6 +36,12 @@ .pred.safe_across_calls p1-p5,p16-p63 .text +/* HPUX assembler needs to see these symbols, otherwise compilation + fails */ +#ifdef __hpux + .global memcpy + .global ffi_closure_unix_inner +#endif /* int ffi_call_unix (struct ia64_args *stack, PTR64 rvalue, void (*fn)(void), int flags); @@ -104,7 +110,12 @@ ffi_call_unix: mov ar.pfs = loc0 addl r18 = @ltoffx(.Lst_table), gp ;; + /* default assembler on HP-UX does not support LDXMOV */ +#ifdef __hpux + ld8 r18 = [r18] +#else ld8.mov r18 = [r18], .Lst_table +#endif mov b0 = loc1 ;; shladd r18 = r16, 3, r18 @@ -357,7 +368,11 @@ ffi_closure_unix: addl r18 = @ltoffx(.Lld_table), gp mov ar.pfs = loc0 ;; - ld8.mov r18 = [r18], .Lld_table +#ifdef __hpux + ld8 r18 = [r18] +#else + ld8.mov r18 = [r18], .Lst_table +#endif mov b0 = loc1 ;; shladd r18 = r16, 3, r18 @@ -515,8 +530,11 @@ ffi_closure_unix: ;; .endp ffi_closure_unix - +#ifdef __hpux + .rodata +#else .section .rodata +#endif .align 8 .Lst_table: data8 @pcrel(.Lst_void) // FFI_TYPE_VOID diff --git a/src/libffi/libffi-3.4.4/src/java_raw_api.c b/src/libffi/libffi-3.4.6/src/java_raw_api.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/java_raw_api.c rename to src/libffi/libffi-3.4.6/src/java_raw_api.c diff --git a/src/libffi/libffi-3.4.4/src/kvx/asm.h b/src/libffi/libffi-3.4.6/src/kvx/asm.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/kvx/asm.h rename to src/libffi/libffi-3.4.6/src/kvx/asm.h diff --git a/src/libffi/libffi-3.4.4/src/kvx/ffi.c b/src/libffi/libffi-3.4.6/src/kvx/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/kvx/ffi.c rename to src/libffi/libffi-3.4.6/src/kvx/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/kvx/ffitarget.h b/src/libffi/libffi-3.4.6/src/kvx/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/kvx/ffitarget.h rename to src/libffi/libffi-3.4.6/src/kvx/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/kvx/sysv.S b/src/libffi/libffi-3.4.6/src/kvx/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/kvx/sysv.S rename to src/libffi/libffi-3.4.6/src/kvx/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/loongarch64/ffi.c b/src/libffi/libffi-3.4.6/src/loongarch64/ffi.c similarity index 99% rename from src/libffi/libffi-3.4.4/src/loongarch64/ffi.c rename to src/libffi/libffi-3.4.6/src/loongarch64/ffi.c index 140be3bc3..93c337749 100644 --- a/src/libffi/libffi-3.4.4/src/loongarch64/ffi.c +++ b/src/libffi/libffi-3.4.6/src/loongarch64/ffi.c @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -58,7 +59,9 @@ */ typedef struct call_context { +#if !defined(__loongarch_soft_float) ABI_FLOAT fa[8]; +#endif size_t a[10]; } call_context; diff --git a/src/libffi/libffi-3.4.4/src/loongarch64/ffitarget.h b/src/libffi/libffi-3.4.6/src/loongarch64/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/loongarch64/ffitarget.h rename to src/libffi/libffi-3.4.6/src/loongarch64/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/loongarch64/sysv.S b/src/libffi/libffi-3.4.6/src/loongarch64/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/loongarch64/sysv.S rename to src/libffi/libffi-3.4.6/src/loongarch64/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/m32r/ffi.c b/src/libffi/libffi-3.4.6/src/m32r/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/m32r/ffi.c rename to src/libffi/libffi-3.4.6/src/m32r/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/m32r/ffitarget.h b/src/libffi/libffi-3.4.6/src/m32r/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/m32r/ffitarget.h rename to src/libffi/libffi-3.4.6/src/m32r/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/m32r/sysv.S b/src/libffi/libffi-3.4.6/src/m32r/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/m32r/sysv.S rename to src/libffi/libffi-3.4.6/src/m32r/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/m68k/ffi.c b/src/libffi/libffi-3.4.6/src/m68k/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/m68k/ffi.c rename to src/libffi/libffi-3.4.6/src/m68k/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/m68k/ffitarget.h b/src/libffi/libffi-3.4.6/src/m68k/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/m68k/ffitarget.h rename to src/libffi/libffi-3.4.6/src/m68k/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/m68k/sysv.S b/src/libffi/libffi-3.4.6/src/m68k/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/m68k/sysv.S rename to src/libffi/libffi-3.4.6/src/m68k/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/m88k/ffi.c b/src/libffi/libffi-3.4.6/src/m88k/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/m88k/ffi.c rename to src/libffi/libffi-3.4.6/src/m88k/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/m88k/ffitarget.h b/src/libffi/libffi-3.4.6/src/m88k/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/m88k/ffitarget.h rename to src/libffi/libffi-3.4.6/src/m88k/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/m88k/obsd.S b/src/libffi/libffi-3.4.6/src/m88k/obsd.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/m88k/obsd.S rename to src/libffi/libffi-3.4.6/src/m88k/obsd.S diff --git a/src/libffi/libffi-3.4.4/src/metag/ffi.c b/src/libffi/libffi-3.4.6/src/metag/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/metag/ffi.c rename to src/libffi/libffi-3.4.6/src/metag/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/metag/ffitarget.h b/src/libffi/libffi-3.4.6/src/metag/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/metag/ffitarget.h rename to src/libffi/libffi-3.4.6/src/metag/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/metag/sysv.S b/src/libffi/libffi-3.4.6/src/metag/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/metag/sysv.S rename to src/libffi/libffi-3.4.6/src/metag/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/microblaze/ffi.c b/src/libffi/libffi-3.4.6/src/microblaze/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/microblaze/ffi.c rename to src/libffi/libffi-3.4.6/src/microblaze/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/microblaze/ffitarget.h b/src/libffi/libffi-3.4.6/src/microblaze/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/microblaze/ffitarget.h rename to src/libffi/libffi-3.4.6/src/microblaze/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/microblaze/sysv.S b/src/libffi/libffi-3.4.6/src/microblaze/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/microblaze/sysv.S rename to src/libffi/libffi-3.4.6/src/microblaze/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/mips/ffi.c b/src/libffi/libffi-3.4.6/src/mips/ffi.c similarity index 98% rename from src/libffi/libffi-3.4.4/src/mips/ffi.c rename to src/libffi/libffi-3.4.6/src/mips/ffi.c index e7043258f..5c8c6bc5d 100644 --- a/src/libffi/libffi-3.4.4/src/mips/ffi.c +++ b/src/libffi/libffi-3.4.6/src/mips/ffi.c @@ -647,9 +647,9 @@ static ffi_status ffi_prep_cif_machdep_int(ffi_cif *cif, unsigned nfixedargs) case FFI_TYPE_POINTER: if (cif->abi == FFI_N32_SOFT_FLOAT || cif->abi == FFI_N32) - cif->flags += FFI_TYPE_UINT32 << (FFI_FLAG_BITS * 8); + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); else - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 8); break; case FFI_TYPE_FLOAT: @@ -661,7 +661,7 @@ static ffi_status ffi_prep_cif_machdep_int(ffi_cif *cif, unsigned nfixedargs) /* else fall through */ case FFI_TYPE_DOUBLE: if (soft_float) - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 8); else cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); break; @@ -715,8 +715,16 @@ static ffi_status ffi_prep_cif_machdep_int(ffi_cif *cif, unsigned nfixedargs) } break; } + case FFI_TYPE_UINT32: + /* In the N32 or N64 ABI unsigned 32-bit integer should be + *sign*-extended. */ + cif->flags += FFI_TYPE_SINT32 << (FFI_FLAG_BITS * 8); + break; + case FFI_TYPE_SINT64: + cif->flags += FFI_TYPE_UINT64 << (FFI_FLAG_BITS * 8); + break; default: - cif->flags += FFI_TYPE_INT << (FFI_FLAG_BITS * 8); + cif->flags += cif->rtype->type << (FFI_FLAG_BITS * 8); break; } } diff --git a/src/libffi/libffi-3.4.4/src/mips/ffitarget.h b/src/libffi/libffi-3.4.6/src/mips/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/mips/ffitarget.h rename to src/libffi/libffi-3.4.6/src/mips/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/mips/n32.S b/src/libffi/libffi-3.4.6/src/mips/n32.S similarity index 93% rename from src/libffi/libffi-3.4.4/src/mips/n32.S rename to src/libffi/libffi-3.4.6/src/mips/n32.S index e1938d114..df58e800a 100644 --- a/src/libffi/libffi-3.4.4/src/mips/n32.S +++ b/src/libffi/libffi-3.4.6/src/mips/n32.S @@ -236,19 +236,54 @@ callit: # Shift the return type flag over SRL t6, 8*FFI_FLAG_BITS - beq t6, FFI_TYPE_SINT32, retint - bne t6, FFI_TYPE_INT, retuint32 -retint: + bne t6, FFI_TYPE_UINT64, retsint32 + +retuint64: jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) - REG_S v0, 0(t4) + sd v0, 0(t4) b epilogue -retuint32: - bne t6, FFI_TYPE_UINT32, retfloat +retsint32: + bne t6, FFI_TYPE_SINT32, retuint16 jal t9 REG_L t4, 4*FFI_SIZEOF_ARG($fp) - sw v0, 0(t4) + sll v0, v0, 0 + sd v0, 0(t4) + b epilogue + +retuint16: + bne t6, FFI_TYPE_UINT16, retsint16 + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + andi v0, v0, 0xffff + sd v0, 0(t4) + b epilogue + +retsint16: + bne t6, FFI_TYPE_SINT16, retuint8 + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + dsll v0, v0, 48 + dsra v0, v0, 48 + sd v0, 0(t4) + b epilogue + +retuint8: + bne t6, FFI_TYPE_UINT8, retsint8 + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + andi v0, v0, 0xff + sd v0, 0(t4) + b epilogue + +retsint8: + bne t6, FFI_TYPE_SINT8, retfloat + jal t9 + REG_L t4, 4*FFI_SIZEOF_ARG($fp) + sd v0, 0(t4) + dsll v0, v0, 56 + dsra v0, v0, 56 b epilogue retfloat: @@ -585,19 +620,35 @@ $do_closure: jalr t9 +cls_retuint64: # Return flags are in v0 - bne v0, FFI_TYPE_SINT32, cls_retuint32 + bne v0, FFI_TYPE_UINT64, cls_retsint32 + ld v0, V0_OFF2($sp) + b cls_epilogue + +cls_retsint32: + bne v0, FFI_TYPE_SINT32, cls_retsint16 lw v0, V0_OFF2($sp) b cls_epilogue -cls_retuint32: - bne v0, FFI_TYPE_UINT32, cls_retint - lwu v0, V0_OFF2($sp) +cls_retsint16: + bne v0, FFI_TYPE_SINT16, cls_retuint16 + lh v0, V0_OFF2($sp) b cls_epilogue -cls_retint: - bne v0, FFI_TYPE_INT, cls_retfloat - REG_L v0, V0_OFF2($sp) +cls_retuint16: + bne v0, FFI_TYPE_UINT16, cls_retsint8 + lhu v0, V0_OFF2($sp) + b cls_epilogue + +cls_retsint8: + bne v0, FFI_TYPE_SINT8, cls_retuint8 + lb v0, V0_OFF2($sp) + b cls_epilogue + +cls_retuint8: + bne v0, FFI_TYPE_UINT8, cls_retfloat + lbu v0, V0_OFF2($sp) b cls_epilogue cls_retfloat: diff --git a/src/libffi/libffi-3.4.4/src/mips/o32.S b/src/libffi/libffi-3.4.6/src/mips/o32.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/mips/o32.S rename to src/libffi/libffi-3.4.6/src/mips/o32.S diff --git a/src/libffi/libffi-3.4.4/src/moxie/eabi.S b/src/libffi/libffi-3.4.6/src/moxie/eabi.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/moxie/eabi.S rename to src/libffi/libffi-3.4.6/src/moxie/eabi.S diff --git a/src/libffi/libffi-3.4.4/src/moxie/ffi.c b/src/libffi/libffi-3.4.6/src/moxie/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/moxie/ffi.c rename to src/libffi/libffi-3.4.6/src/moxie/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/moxie/ffitarget.h b/src/libffi/libffi-3.4.6/src/moxie/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/moxie/ffitarget.h rename to src/libffi/libffi-3.4.6/src/moxie/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/nios2/ffi.c b/src/libffi/libffi-3.4.6/src/nios2/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/nios2/ffi.c rename to src/libffi/libffi-3.4.6/src/nios2/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/nios2/ffitarget.h b/src/libffi/libffi-3.4.6/src/nios2/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/nios2/ffitarget.h rename to src/libffi/libffi-3.4.6/src/nios2/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/nios2/sysv.S b/src/libffi/libffi-3.4.6/src/nios2/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/nios2/sysv.S rename to src/libffi/libffi-3.4.6/src/nios2/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/or1k/ffi.c b/src/libffi/libffi-3.4.6/src/or1k/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/or1k/ffi.c rename to src/libffi/libffi-3.4.6/src/or1k/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/or1k/ffitarget.h b/src/libffi/libffi-3.4.6/src/or1k/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/or1k/ffitarget.h rename to src/libffi/libffi-3.4.6/src/or1k/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/or1k/sysv.S b/src/libffi/libffi-3.4.6/src/or1k/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/or1k/sysv.S rename to src/libffi/libffi-3.4.6/src/or1k/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/pa/ffi.c b/src/libffi/libffi-3.4.6/src/pa/ffi.c similarity index 93% rename from src/libffi/libffi-3.4.4/src/pa/ffi.c rename to src/libffi/libffi-3.4.6/src/pa/ffi.c index 95e669473..f6012397e 100644 --- a/src/libffi/libffi-3.4.4/src/pa/ffi.c +++ b/src/libffi/libffi-3.4.6/src/pa/ffi.c @@ -56,27 +56,12 @@ static inline int ffi_struct_type(ffi_type *t) size_t sz = t->size; /* Small structure results are passed in registers, - larger ones are passed by pointer. Note that - small structures of size 2, 4 and 8 differ from - the corresponding integer types in that they have - different alignment requirements. */ - - if (sz <= 1) - return FFI_TYPE_UINT8; - else if (sz == 2) - return FFI_TYPE_SMALL_STRUCT2; - else if (sz == 3) - return FFI_TYPE_SMALL_STRUCT3; - else if (sz == 4) - return FFI_TYPE_SMALL_STRUCT4; - else if (sz == 5) - return FFI_TYPE_SMALL_STRUCT5; - else if (sz == 6) - return FFI_TYPE_SMALL_STRUCT6; - else if (sz == 7) - return FFI_TYPE_SMALL_STRUCT7; - else if (sz <= 8) - return FFI_TYPE_SMALL_STRUCT8; + larger ones are passed by pointer. Note that small + structures differ from the corresponding integer + types in that they have different alignment requirements. */ + + if (sz <= 8) + return -sz; else return FFI_TYPE_STRUCT; /* else, we pass it by pointer. */ } @@ -376,10 +361,26 @@ extern void ffi_call_pa32(void (*)(UINT32 *, extended_cif *, unsigned), void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { extended_cif ecif; + size_t i, nargs = cif->nargs; + ffi_type **arg_types = cif->arg_types; ecif.cif = cif; ecif.avalue = avalue; + /* If we have any large structure arguments, make a copy so we are passing + by value. */ + for (i = 0; i < nargs; i++) + { + ffi_type *at = arg_types[i]; + int size = at->size; + if (at->type == FFI_TYPE_STRUCT && size > 8) + { + char *argcopy = alloca (size); + memcpy (argcopy, avalue[i], size); + avalue[i] = argcopy; + } + } + /* If the return value is a struct and we don't have a return value address then we need to make one. */ @@ -429,7 +430,6 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack) int i, avn; unsigned int slot = FIRST_ARG_SLOT; register UINT32 r28 asm("r28"); - ffi_closure *c = (ffi_closure *)FFI_RESTORE_PTR (closure); cif = closure->cif; @@ -532,7 +532,7 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack) } /* Invoke the closure. */ - (c->fun) (cif, rvalue, avalue, c->user_data); + (closure->fun) (cif, rvalue, avalue, closure->user_data); debug(3, "after calling function, ret[0] = %08x, ret[1] = %08x\n", u.ret[0], u.ret[1]); @@ -541,16 +541,16 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack) switch (cif->flags) { case FFI_TYPE_UINT8: - *(stack - FIRST_ARG_SLOT) = (UINT8)(u.ret[0] >> 24); + *(stack - FIRST_ARG_SLOT) = (UINT8)u.ret[0]; break; case FFI_TYPE_SINT8: - *(stack - FIRST_ARG_SLOT) = (SINT8)(u.ret[0] >> 24); + *(stack - FIRST_ARG_SLOT) = (SINT8)u.ret[0]; break; case FFI_TYPE_UINT16: - *(stack - FIRST_ARG_SLOT) = (UINT16)(u.ret[0] >> 16); + *(stack - FIRST_ARG_SLOT) = (UINT16)u.ret[0]; break; case FFI_TYPE_SINT16: - *(stack - FIRST_ARG_SLOT) = (SINT16)(u.ret[0] >> 16); + *(stack - FIRST_ARG_SLOT) = (SINT16)u.ret[0]; break; case FFI_TYPE_INT: case FFI_TYPE_SINT32: @@ -575,6 +575,7 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack) /* Don't need a return value, done by caller. */ break; + case FFI_TYPE_SMALL_STRUCT1: case FFI_TYPE_SMALL_STRUCT2: case FFI_TYPE_SMALL_STRUCT3: case FFI_TYPE_SMALL_STRUCT4: @@ -633,8 +634,6 @@ ffi_prep_closure_loc (ffi_closure* closure, void *user_data, void *codeloc) { - ffi_closure *c = (ffi_closure *)FFI_RESTORE_PTR (closure); - /* The layout of a function descriptor. A function pointer with the PLABEL bit set points to a function descriptor. */ struct pa32_fd @@ -660,14 +659,14 @@ ffi_prep_closure_loc (ffi_closure* closure, fd = (struct pa32_fd *)((UINT32)ffi_closure_pa32 & ~3); /* Setup trampoline. */ - tramp = (struct ffi_pa32_trampoline_struct *)c->tramp; + tramp = (struct ffi_pa32_trampoline_struct *)closure->tramp; tramp->code_pointer = fd->code_pointer; tramp->fake_gp = (UINT32)codeloc & ~3; tramp->real_gp = fd->gp; - c->cif = cif; - c->user_data = user_data; - c->fun = fun; + closure->cif = cif; + closure->user_data = user_data; + closure->fun = fun; return FFI_OK; } diff --git a/src/libffi/libffi-3.4.4/src/pa/ffitarget.h b/src/libffi/libffi-3.4.6/src/pa/ffitarget.h similarity index 77% rename from src/libffi/libffi-3.4.4/src/pa/ffitarget.h rename to src/libffi/libffi-3.4.6/src/pa/ffitarget.h index df1209eb1..dae854a69 100644 --- a/src/libffi/libffi-3.4.4/src/pa/ffitarget.h +++ b/src/libffi/libffi-3.4.6/src/pa/ffitarget.h @@ -54,7 +54,6 @@ typedef enum ffi_abi { #endif #ifdef PA64_HPUX -#error "PA64_HPUX FFI is not yet implemented" FFI_PA64, FFI_LAST_ABI, FFI_DEFAULT_ABI = FFI_PA64 @@ -68,13 +67,28 @@ typedef enum ffi_abi { #define FFI_CLOSURES 1 #define FFI_NATIVE_RAW_API 0 +#if defined(PA64_HPUX) +#define FFI_TRAMPOLINE_SIZE 32 +#else #define FFI_TRAMPOLINE_SIZE 12 +#endif + +#define FFI_TYPE_SMALL_STRUCT1 -1 +#define FFI_TYPE_SMALL_STRUCT2 -2 +#define FFI_TYPE_SMALL_STRUCT3 -3 +#define FFI_TYPE_SMALL_STRUCT4 -4 +#define FFI_TYPE_SMALL_STRUCT5 -5 +#define FFI_TYPE_SMALL_STRUCT6 -6 +#define FFI_TYPE_SMALL_STRUCT7 -7 +#define FFI_TYPE_SMALL_STRUCT8 -8 + +/* linux.S and hpux32.S expect FFI_TYPE_COMPLEX is the last generic type. */ +#define FFI_PA_TYPE_LAST FFI_TYPE_COMPLEX + +/* If new generic types are added, the jump tables in linux.S and hpux32.S + likely need updating. */ +#if FFI_TYPE_LAST != FFI_PA_TYPE_LAST +# error "You likely have broken jump tables" +#endif -#define FFI_TYPE_SMALL_STRUCT2 -1 -#define FFI_TYPE_SMALL_STRUCT3 -2 -#define FFI_TYPE_SMALL_STRUCT4 -3 -#define FFI_TYPE_SMALL_STRUCT5 -4 -#define FFI_TYPE_SMALL_STRUCT6 -5 -#define FFI_TYPE_SMALL_STRUCT7 -6 -#define FFI_TYPE_SMALL_STRUCT8 -7 #endif diff --git a/src/libffi/libffi-3.4.4/src/pa/hpux32.S b/src/libffi/libffi-3.4.6/src/pa/hpux32.S similarity index 88% rename from src/libffi/libffi-3.4.4/src/pa/hpux32.S rename to src/libffi/libffi-3.4.6/src/pa/hpux32.S index d0e5f6952..1629c0356 100644 --- a/src/libffi/libffi-3.4.4/src/pa/hpux32.S +++ b/src/libffi/libffi-3.4.6/src/pa/hpux32.S @@ -109,52 +109,104 @@ L$CFI13 /* Prepare to store the result; we need to recover flags and rvalue. */ ldw -48(%r3), %r21 ; r21 <- flags - ldw -52(%r3), %r20 ; r20 <- rvalue - /* Store the result according to the return type. The most - likely types should come first. */ + /* Adjust flags range from [-8, 15] to [0, 23]. */ + addi 8, %r21, %r21 -L$checkint - comib,<>,n FFI_TYPE_INT, %r21, L$checkint8 - b L$done - stw %ret0, 0(%r20) + blr %r21, %r0 + ldw -52(%r3), %r20 ; r20 <- rvalue -L$checkint8 - comib,<>,n FFI_TYPE_UINT8, %r21, L$checkint16 + /* Giant jump table */ + /* 8-byte small struct */ + b,n L$smst8 + nop + /* 7-byte small struct */ + b,n L$smst7 + nop + /* 6-byte small struct */ + b,n L$smst6 + nop + /* 5-byte small struct */ + b,n L$smst5 + nop + /* 4-byte small struct */ + b,n L$smst4 + nop + /* 3-byte small struct */ + b,n L$smst3 + nop + /* 2-byte small struct */ + b,n L$smst2 + nop + /* 1-byte small struct */ b L$done stb %ret0, 0(%r20) - -L$checkint16 - comib,<>,n FFI_TYPE_UINT16, %r21, L$checkdbl + /* void */ + b,n L$done + nop + /* int */ b L$done - sth %ret0, 0(%r20) - -L$checkdbl - comib,<>,n FFI_TYPE_DOUBLE, %r21, L$checkfloat + stw %ret0, 0(%r20) + /* float */ + b L$done + fstw %fr4L,0(%r20) + /* double */ b L$done fstd %fr4,0(%r20) - -L$checkfloat - comib,<>,n FFI_TYPE_FLOAT, %r21, L$checkll + /* long double */ + b,n L$done + nop + /* unsigned int8 */ b L$done - fstw %fr4L,0(%r20) + stw %ret0, 0(%r20) + /* signed int8 */ + b L$done + stw %ret0, 0(%r20) + /* unsigned int16 */ + b L$done + stw %ret0, 0(%r20) + /* signed int16 */ + b L$done + stw %ret0, 0(%r20) + /* unsigned int32 */ + b L$done + stw %ret0, 0(%r20) + /* signed int32 */ + b L$done + stw %ret0, 0(%r20) + /* unsigned int64 */ + b,n L$uint64 + nop + /* signed int64 */ + b,n L$sint64 + nop + /* large struct */ + b,n L$done + nop + /* pointer */ + b L$done + stw %ret0, 0(%r20) + /* complex */ + b,n L$done + nop + + /* Store the result according to the return type. The most + likely types should come first. */ -L$checkll - comib,<>,n FFI_TYPE_UINT64, %r21, L$checksmst2 +L$uint64 +L$sint64 stw %ret0, 0(%r20) b L$done stw %ret1, 4(%r20) -L$checksmst2 - comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, L$checksmst3 +L$smst2 /* 2-byte structs are returned in ret0 as ????xxyy. */ extru %ret0, 23, 8, %r22 stbs,ma %r22, 1(%r20) b L$done stb %ret0, 0(%r20) -L$checksmst3 - comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, L$checksmst4 +L$smst3 /* 3-byte structs are returned in ret0 as ??xxyyzz. */ extru %ret0, 15, 8, %r22 stbs,ma %r22, 1(%r20) @@ -163,8 +215,7 @@ L$checksmst3 b L$done stb %ret0, 0(%r20) -L$checksmst4 - comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, L$checksmst5 +L$smst4 /* 4-byte structs are returned in ret0 as wwxxyyzz. */ extru %ret0, 7, 8, %r22 stbs,ma %r22, 1(%r20) @@ -175,8 +226,7 @@ L$checksmst4 b L$done stb %ret0, 0(%r20) -L$checksmst5 - comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, L$checksmst6 +L$smst5 /* 5 byte values are returned right justified: ret0 ret1 5: ??????aa bbccddee */ @@ -190,8 +240,7 @@ L$checksmst5 b L$done stb %ret1, 0(%r20) -L$checksmst6 - comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, L$checksmst7 +L$smst6 /* 6 byte values are returned right justified: ret0 ret1 6: ????aabb ccddeeff */ @@ -207,8 +256,7 @@ L$checksmst6 b L$done stb %ret1, 0(%r20) -L$checksmst7 - comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, L$checksmst8 +L$smst7 /* 7 byte values are returned right justified: ret0 ret1 7: ??aabbcc ddeeffgg */ @@ -226,8 +274,7 @@ L$checksmst7 b L$done stb %ret1, 0(%r20) -L$checksmst8 - comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, L$done +L$smst8 /* 8 byte values are returned right justified: ret0 ret1 8: aabbccdd eeffgghh */ diff --git a/src/libffi/libffi-3.4.6/src/pa/hpux64.S b/src/libffi/libffi-3.4.6/src/pa/hpux64.S new file mode 100644 index 000000000..6a82b57ec --- /dev/null +++ b/src/libffi/libffi-3.4.6/src/pa/hpux64.S @@ -0,0 +1,681 @@ +/* ----------------------------------------------------------------------- + hpux64.S - (c) 2005-2022 John David Anglin + + HPUX PA 64-Bit Foreign Function Interface + + 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 AUTHOR 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. + ----------------------------------------------------------------------- */ + +#define LIBFFI_ASM +#include +#include + + .LEVEL 2.0w + .text + .align 4 + + /* void ffi_call_pa64(void (*)(char *, extended_cif *), + extended_cif *ecif, + unsigned bytes, + unsigned flags, + unsigned *rvalue, + void (*fn)()); + */ + + .export ffi_call_pa64,code + .import ffi_prep_args_pa64,code + + .align 4 + +L$FB1 +ffi_call_pa64 + .proc + .callinfo FRAME=48,CALLS,SAVE_RP,ENTRY_GR=4 + .entry + std %rp, -16(%sp) + copy %r3, %r1 +L$CFI11 + copy %sp, %r3 +L$CFI12 + std,ma %r1, 48(%sp) + + /* Setup the stack for calling prep_args... + We want the stack to look like this: + + [ Previous stack ] <- %r3 + + [ 48-byte register save area ] + + [ Stack space for call arguments ] <- %r4 + + [ 16-byte rame marker ] + + [ 128-byte stack for calling prep_args ] <- %sp + */ + + std %r4, 8(%r3) ; save r4 +L$CFI13 + std %r23, 16(%r3) ; save flags we need it later + std %r22, 24(%r3) ; save rvalue + std %r21, 32(%r3) ; save fn pointer + + copy %sp, %r4 + copy %r4, %r26 ; argument stack pointer + addl %r24, %sp, %sp ; allocate argument space + + ldo 112(%sp), %r29 ; arg pointer for prep args + + /* Call prep_args: + %arg0(stack) -- set up above to point to call arguments + %arg1(ecif) -- same as incoming param + %arg2(bytes) -- same as incoming param */ + bl ffi_prep_args_pa64,%r2 + ldo 128(%sp), %sp + ldo -128(%sp), %sp + + /* Load the arguments that should be passed in registers + The fp args were loaded by the prep_args function. */ + ldd 0(%r4), %r26 + ldd 8(%r4), %r25 + ldd 16(%r4), %r24 + ldd 24(%r4), %r23 + ldd 32(%r4), %r22 + ldd 40(%r4), %r21 + ldd 48(%r4), %r20 + ldd 56(%r4), %r19 + + ldd 24(%r3), %ret0 ; %ret0 <- rvalue + + ldd 32(%r3), %r1 ; %r1 <- function pointer + ldd 16(%r1), %rp ; fn address + ldd 24(%r1), %dp ; New gp + bve,l (%rp), %r2 ; Call the user function + ldo 64(%r4), %r29 ; Argument pointer + + /* Prepare to store the result; recover flags and rvalue. */ + ldd 16(%r3), %r21 ; r21 <- flags + extrd,s %r21, 63, 32, %r21 ; sign extend flags for blr + + /* Adjust flags range from [-16, 15] to [0, 31]. */ + addi 16, %r21, %r21 + + blr %r21, %r0 + ldd 24(%r3), %r20 ; r20 <- rvalue + + /* Giant jump table */ + /* 16-byte small struct */ + b,n L$smst16 + nop + /* 15-byte small struct */ + b,n L$smst15 + nop + /* 14-byte small struct */ + b,n L$smst14 + nop + /* 13-byte small struct */ + b,n L$smst13 + nop + /* 12-byte small struct */ + b,n L$smst12 + nop + /* 11-byte small struct */ + b,n L$smst11 + nop + /* 10-byte small struct */ + b,n L$smst10 + nop + /* 9-byte small struct */ + b,n L$smst9 + nop + /* 8-byte small struct */ + b,n L$smst8 + nop + /* 7-byte small struct */ + b,n L$smst7 + nop + /* 6-byte small struct */ + b,n L$smst6 + nop + /* 5-byte small struct */ + b,n L$smst5 + nop + /* 4-byte small struct */ + b,n L$smst4 + nop + /* 3-byte small struct */ + b,n L$smst3 + nop + /* 2-byte small struct */ + b,n L$smst2 + nop + /* 1-byte small struct */ + b,n L$smst1 + nop + /* void */ + b,n L$done + nop + /* int */ + b L$done + std %ret0, 0(%r20) + /* float */ + b L$done + fstw %fr4R, 0(%r20) + /* double */ + b L$done + fstd %fr4, 0(%r20) + /* long double */ + b,n L$longdouble + nop + /* unsigned int8 */ + b L$done + std %ret0, 0(%r20) + /* signed int8 */ + b L$done + std %ret0, 0(%r20) + /* unsigned int16 */ + b L$done + std %ret0, 0(%r20) + /* signed int16 */ + b L$done + std %ret0, 0(%r20) + /* unsigned int32 */ + b L$done + std %ret0, 0(%r20) + /* signed int32 */ + b L$done + std %ret0, 0(%r20) + /* unsigned int64 */ + b L$done + std %ret0, 0(%r20) + /* signed int64 */ + b L$done + std %ret0, 0(%r20) + /* large struct */ + b,n L$done + nop + /* pointer */ + b L$done + std %ret0, 0(%r20) + /* complex */ + b,n L$done + nop + +L$longdouble + std %ret0, 0(%r20) + b L$done + std %ret1, 8(%r20) + + /* We need to copy byte-by-byte the exact number bytes + in the struct to avoid clobbering other data. */ +L$smst1 + extrd,u %ret0, 7, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst2 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst3 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst4 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst5 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst6 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst7 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst8 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + b L$done + stb %ret0, 0(%r20) + +L$smst9 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst10 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst11 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 23, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst12 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 31, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst13 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 39, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst14 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 47, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst15 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 55, 8, %r22 + b L$done + stb %r22, 0(%r20) + +L$smst16 + extrd,u %ret0, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret0, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb,ma %ret0, 1(%r20) + extrd,u %ret1, 7, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 15, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 23, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 31, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 39, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 47, 8, %r22 + stb,ma %r22, 1(%r20) + extrd,u %ret1, 55, 8, %r22 + stb,ma %r22, 1(%r20) + stb %ret1, 0(%r20) + +L$done + /* all done, restore registers and return */ + copy %r4, %sp + ldd 8(%r3), %r4 + ldd -16(%r3), %rp + bve (%rp) + ldd,mb -48(%sp), %r3 + .exit + .procend +L$FE1 + .size ffi_call_pa64, .-ffi_call_pa64 + + /* void ffi_closure_pa64(void); + Called with closure argument in %r21 */ + + .export ffi_closure_pa64,code + .import ffi_closure_inner_pa64,code + .align 4 +L$FB2 +ffi_closure_pa64 + .proc + .callinfo FRAME=128,CALLS,SAVE_RP,ENTRY_GR=3 + .entry + + std %rp, -16(%sp) + copy %r3, %r1 +L$CFI21 + copy %sp, %r3 +L$CFI22 + std,ma %r1, 128(%sp) +L$CFI23 + + /* Put arguments onto the stack and call ffi_closure_inner. */ + std %r26, -64(%r29) + std %r25, -56(%r29) + std %r24, -48(%r29) + std %r23, -40(%r29) + std %r22, -32(%r29) + std %r21, -24(%r29) + std %r20, -16(%r29) + std %r19, -8(%r29) + + /* Load and save start of argument stack. */ + ldo -64(%r29), %r25 + std %r25, 8(%r3) + + /* Setup arg pointer. */ + ldo -16(%sp), %ret1 + + /* Retrieve closure pointer and real gp. */ + copy %dp, %r26 + bl ffi_closure_inner_pa64, %r2 + ldd 0(%dp), %dp + + /* Retrieve start of argument stack. */ + ldd 8(%r3), %r1 + + /* Restore r3 and op stack. */ + ldd,mb -128(%sp), %r3 + + /* Load return address. */ + ldd -16(%sp), %rp + + /* Load return values from first and second stack slots. */ + ldd 0(%r1), %ret0 + bve (%rp) + ldd 8(%r1), %ret1 + + .exit + .procend + .end +L$FE2: + .size ffi_closure_pa64, .-ffi_closure_pa64 + + .section .eh_frame,"aw",@progbits +L$frame1: + .word L$ECIE1-L$SCIE1 ;# Length of Common Information Entry +L$SCIE1: + .word 0x0 ;# CIE Identifier Tag + .byte 0x3 ;# CIE Version + .stringz "" ;# CIE Augmentation + .uleb128 0x1 ;# CIE Code Alignment Factor + .sleb128 8 ;# CIE Data Alignment Factor + .byte 0x2 ;# CIE RA Column + .byte 0xc ;# DW_CFA_def_cfa + .uleb128 0x1e + .uleb128 0x0 + .align 8 +L$ECIE1: +L$SFDE1: + .word L$EFDE1-L$ASFDE1 ;# FDE Length +L$ASFDE1: + .word L$ASFDE1-L$frame1 ;# FDE CIE offset + .dword L$FB1 ;# FDE initial location + .dword L$FE1-L$FB1 ;# FDE address range + + .byte 0x4 ;# DW_CFA_advance_loc4 + .word L$CFI11-L$FB1 + .byte 0x9 ;# DW_CFA_register: r3 in r1 + .uleb128 0x3 + .uleb128 0x1 + .byte 0x11 ;# DW_CFA_offset_extended_sf: r2 at cfa-16 + .uleb128 0x2 + .sleb128 -2 + .byte 0x4 ;# DW_CFA_advance_loc4 + .word L$CFI12-L$CFI11 + .byte 0xd ;# DW_CFA_def_cfa_register: r3 + .uleb128 0x3 + + .byte 0x4 ;# DW_CFA_advance_loc4 + .word L$CFI13-L$CFI12 + .byte 0x83 ;# DW_CFA_offset: r3 at cfa+0 + .uleb128 0 + .byte 0x84 ;# DW_CFA_offset: r4 at cfa+8 + .uleb128 1 + + .align 8 +L$EFDE1: + +L$SFDE2: + .word L$EFDE2-L$ASFDE2 ;# FDE Length +L$ASFDE2: + .word L$ASFDE2-L$frame1 ;# FDE CIE offset + .dword L$FB2 ;# FDE initial location + .dword L$FE2-L$FB2 ;# FDE address range + .byte 0x4 ;# DW_CFA_advance_loc4 + .word L$CFI21-L$FB2 + .byte 0x9 ;# DW_CFA_register: r3 in r1 + .uleb128 0x3 + .uleb128 0x1 + .byte 0x11 ;# DW_CFA_offset_extended_sf: r2 at cfa-16 + .uleb128 0x2 + .sleb128 -2 + + .byte 0x4 ;# DW_CFA_advance_loc4 + .word L$CFI22-L$CFI21 + .byte 0xd ;# DW_CFA_def_cfa_register: r3 + .uleb128 0x3 + + .byte 0x4 ;# DW_CFA_advance_loc4 + .word L$CFI23-L$CFI22 + .byte 0x83 ;# DW_CFA_offset: r3 at cfa+0 + .uleb128 0 + + .align 8 +L$EFDE2: diff --git a/src/libffi/libffi-3.4.4/src/pa/linux.S b/src/libffi/libffi-3.4.6/src/pa/linux.S similarity index 88% rename from src/libffi/libffi-3.4.4/src/pa/linux.S rename to src/libffi/libffi-3.4.6/src/pa/linux.S index 33ef0b137..2d3b03604 100644 --- a/src/libffi/libffi-3.4.4/src/pa/linux.S +++ b/src/libffi/libffi-3.4.6/src/pa/linux.S @@ -103,51 +103,103 @@ ffi_call_pa32: /* Prepare to store the result; we need to recover flags and rvalue. */ ldw -48(%r3), %r21 /* r21 <- flags */ - ldw -52(%r3), %r20 /* r20 <- rvalue */ - /* Store the result according to the return type. */ + /* Adjust flags range from [-8, 15] to [0, 23]. */ + addi 8, %r21, %r21 -.Lcheckint: - comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8 - b .Ldone - stw %ret0, 0(%r20) + blr %r21, %r0 + ldw -52(%r3), %r20 /* r20 <- rvalue */ -.Lcheckint8: - comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16 + /* Giant jump table */ + /* 8-byte small struct */ + b,n .Lsmst8 + nop + /* 7-byte small struct */ + b,n .Lsmst7 + nop + /* 6-byte small struct */ + b,n .Lsmst6 + nop + /* 5-byte small struct */ + b,n .Lsmst5 + nop + /* 4-byte small struct */ + b,n .Lsmst4 + nop + /* 3-byte small struct */ + b,n .Lsmst3 + nop + /* 2-byte small struct */ + b,n .Lsmst2 + nop + /* 1-byte small struct */ b .Ldone stb %ret0, 0(%r20) - -.Lcheckint16: - comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl + /* void */ + b,n .Ldone + nop + /* int */ b .Ldone - sth %ret0, 0(%r20) - -.Lcheckdbl: - comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat + stw %ret0, 0(%r20) + /* float */ + b .Ldone + fstw %fr4L,0(%r20) + /* double */ b .Ldone fstd %fr4,0(%r20) - -.Lcheckfloat: - comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll + /* long double */ b .Ldone - fstw %fr4L,0(%r20) + fstd %fr4,0(%r20) + /* unsigned int8 */ + b .Ldone + stw %ret0, 0(%r20) + /* sint8 */ + b .Ldone + stw %ret0, 0(%r20) + /* unsigned int16 */ + b .Ldone + stw %ret0, 0(%r20) + /* sint16 */ + b .Ldone + stw %ret0, 0(%r20) + /* unsigned int32 */ + b .Ldone + stw %ret0, 0(%r20) + /* sint32 */ + b .Ldone + stw %ret0, 0(%r20) + /* unsigned int64 */ + b,n .Luint64 + nop + /* signed int64 */ + b,n .Lsint64 + nop + /* large struct */ + b,n .Ldone + nop + /* pointer */ + b .Ldone + stw %ret0, 0(%r20) + /* complex */ + b,n .Ldone + nop + + /* Store the result according to the return type. */ -.Lcheckll: - comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2 +.Luint64: +.Lsint64: stw %ret0, 0(%r20) b .Ldone stw %ret1, 4(%r20) -.Lchecksmst2: - comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3 +.Lsmst2: /* 2-byte structs are returned in ret0 as ????xxyy. */ extru %ret0, 23, 8, %r22 stbs,ma %r22, 1(%r20) b .Ldone stb %ret0, 0(%r20) -.Lchecksmst3: - comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4 +.Lsmst3: /* 3-byte structs are returned in ret0 as ??xxyyzz. */ extru %ret0, 15, 8, %r22 stbs,ma %r22, 1(%r20) @@ -156,8 +208,7 @@ ffi_call_pa32: b .Ldone stb %ret0, 0(%r20) -.Lchecksmst4: - comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5 +.Lsmst4: /* 4-byte structs are returned in ret0 as wwxxyyzz. */ extru %ret0, 7, 8, %r22 stbs,ma %r22, 1(%r20) @@ -168,8 +219,7 @@ ffi_call_pa32: b .Ldone stb %ret0, 0(%r20) -.Lchecksmst5: - comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6 +.Lsmst5: /* 5 byte values are returned right justified: ret0 ret1 5: ??????aa bbccddee */ @@ -183,8 +233,7 @@ ffi_call_pa32: b .Ldone stb %ret1, 0(%r20) -.Lchecksmst6: - comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7 +.Lsmst6: /* 6 byte values are returned right justified: ret0 ret1 6: ????aabb ccddeeff */ @@ -200,8 +249,7 @@ ffi_call_pa32: b .Ldone stb %ret1, 0(%r20) -.Lchecksmst7: - comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8 +.Lsmst7: /* 7 byte values are returned right justified: ret0 ret1 7: ??aabbcc ddeeffgg */ @@ -219,8 +267,7 @@ ffi_call_pa32: b .Ldone stb %ret1, 0(%r20) -.Lchecksmst8: - comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone +.Lsmst8: /* 8 byte values are returned right justified: ret0 ret1 8: aabbccdd eeffgghh */ diff --git a/src/libffi/libffi-3.4.4/src/powerpc/aix.S b/src/libffi/libffi-3.4.6/src/powerpc/aix.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/aix.S rename to src/libffi/libffi-3.4.6/src/powerpc/aix.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/aix_closure.S b/src/libffi/libffi-3.4.6/src/powerpc/aix_closure.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/aix_closure.S rename to src/libffi/libffi-3.4.6/src/powerpc/aix_closure.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/asm.h b/src/libffi/libffi-3.4.6/src/powerpc/asm.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/asm.h rename to src/libffi/libffi-3.4.6/src/powerpc/asm.h diff --git a/src/libffi/libffi-3.4.4/src/powerpc/darwin.S b/src/libffi/libffi-3.4.6/src/powerpc/darwin.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/darwin.S rename to src/libffi/libffi-3.4.6/src/powerpc/darwin.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/darwin_closure.S b/src/libffi/libffi-3.4.6/src/powerpc/darwin_closure.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/darwin_closure.S rename to src/libffi/libffi-3.4.6/src/powerpc/darwin_closure.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ffi.c b/src/libffi/libffi-3.4.6/src/powerpc/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/ffi.c rename to src/libffi/libffi-3.4.6/src/powerpc/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ffi_darwin.c b/src/libffi/libffi-3.4.6/src/powerpc/ffi_darwin.c similarity index 96% rename from src/libffi/libffi-3.4.4/src/powerpc/ffi_darwin.c rename to src/libffi/libffi-3.4.6/src/powerpc/ffi_darwin.c index 64bb94dfa..afb6750a5 100644 --- a/src/libffi/libffi-3.4.4/src/powerpc/ffi_darwin.c +++ b/src/libffi/libffi-3.4.6/src/powerpc/ffi_darwin.c @@ -623,38 +623,50 @@ darwin_adjust_aggregate_sizes (ffi_type *s) } /* Adjust the size of S to be correct for AIX. - Word-align double unless it is the first member of a structure. */ + Word-align double unless it is the first member of a structure recursively. + Return non-zero if we found a recursive first member aggregate of interest. */ -static void -aix_adjust_aggregate_sizes (ffi_type *s) +static int +aix_adjust_aggregate_sizes (ffi_type *s, int outer_most_type_or_first_member) { - int i; + int i, nested_first_member=0, final_align, rc=0; if (s->type != FFI_TYPE_STRUCT) - return; + return 0; s->size = 0; for (i = 0; s->elements[i] != NULL; i++) { - ffi_type *p; + ffi_type p; int align; - - p = s->elements[i]; - aix_adjust_aggregate_sizes (p); - align = p->alignment; - if (i != 0 && p->type == FFI_TYPE_DOUBLE) - align = 4; - s->size = FFI_ALIGN(s->size, align) + p->size; + + /* nested aggregates layout differently on AIX, so take a copy of the type */ + p = *(s->elements[i]); + if (i == 0) + nested_first_member = aix_adjust_aggregate_sizes(&p, outer_most_type_or_first_member); + else + aix_adjust_aggregate_sizes(&p, 0); + align = p.alignment; + if (i != 0 && p.type == FFI_TYPE_DOUBLE) + align = 4; + s->size = FFI_ALIGN(s->size, align) + p.size; } - - s->size = FFI_ALIGN(s->size, s->alignment); - - if (s->elements[0]->type == FFI_TYPE_UINT64 - || s->elements[0]->type == FFI_TYPE_SINT64 - || s->elements[0]->type == FFI_TYPE_DOUBLE - || s->elements[0]->alignment == 8) - s->alignment = s->alignment > 8 ? s->alignment : 8; - /* Do not add additional tail padding. */ + + final_align=s->alignment; + if ((s->elements[0]->type == FFI_TYPE_UINT64 + || s->elements[0]->type == FFI_TYPE_SINT64 + || s->elements[0]->type == FFI_TYPE_DOUBLE + || s->elements[0]->alignment == 8 || nested_first_member)) { + final_align = s->alignment > 8 ? s->alignment : 8; + rc=1; + /* still use the adjusted alignment to calculate tail padding, but don't adjust the types alignment if + we aren't in the recursive first position */ + if (outer_most_type_or_first_member) + s->alignment=final_align; + } + + s->size = FFI_ALIGN(s->size, final_align); + return rc; } /* Perform machine dependent cif processing. */ @@ -682,9 +694,9 @@ ffi_prep_cif_machdep (ffi_cif *cif) if (cif->abi == FFI_AIX) { - aix_adjust_aggregate_sizes (cif->rtype); + aix_adjust_aggregate_sizes (cif->rtype, 1); for (i = 0; i < cif->nargs; i++) - aix_adjust_aggregate_sizes (cif->arg_types[i]); + aix_adjust_aggregate_sizes (cif->arg_types[i], 1); } /* Space for the frame pointer, callee's LR, CR, etc, and for diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ffi_linux64.c b/src/libffi/libffi-3.4.6/src/powerpc/ffi_linux64.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/ffi_linux64.c rename to src/libffi/libffi-3.4.6/src/powerpc/ffi_linux64.c diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ffi_powerpc.h b/src/libffi/libffi-3.4.6/src/powerpc/ffi_powerpc.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/ffi_powerpc.h rename to src/libffi/libffi-3.4.6/src/powerpc/ffi_powerpc.h diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ffi_sysv.c b/src/libffi/libffi-3.4.6/src/powerpc/ffi_sysv.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/ffi_sysv.c rename to src/libffi/libffi-3.4.6/src/powerpc/ffi_sysv.c diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ffitarget.h b/src/libffi/libffi-3.4.6/src/powerpc/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/ffitarget.h rename to src/libffi/libffi-3.4.6/src/powerpc/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/powerpc/linux64.S b/src/libffi/libffi-3.4.6/src/powerpc/linux64.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/linux64.S rename to src/libffi/libffi-3.4.6/src/powerpc/linux64.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/linux64_closure.S b/src/libffi/libffi-3.4.6/src/powerpc/linux64_closure.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/linux64_closure.S rename to src/libffi/libffi-3.4.6/src/powerpc/linux64_closure.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/ppc_closure.S b/src/libffi/libffi-3.4.6/src/powerpc/ppc_closure.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/ppc_closure.S rename to src/libffi/libffi-3.4.6/src/powerpc/ppc_closure.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/sysv.S b/src/libffi/libffi-3.4.6/src/powerpc/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/sysv.S rename to src/libffi/libffi-3.4.6/src/powerpc/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/powerpc/t-aix b/src/libffi/libffi-3.4.6/src/powerpc/t-aix similarity index 100% rename from src/libffi/libffi-3.4.4/src/powerpc/t-aix rename to src/libffi/libffi-3.4.6/src/powerpc/t-aix diff --git a/src/libffi/libffi-3.4.4/src/prep_cif.c b/src/libffi/libffi-3.4.6/src/prep_cif.c similarity index 99% rename from src/libffi/libffi-3.4.4/src/prep_cif.c rename to src/libffi/libffi-3.4.6/src/prep_cif.c index 2d0f2521f..0e2d58e5e 100644 --- a/src/libffi/libffi-3.4.4/src/prep_cif.c +++ b/src/libffi/libffi-3.4.6/src/prep_cif.c @@ -234,7 +234,7 @@ ffi_status ffi_prep_cif_var(ffi_cif *cif, { ffi_status rc; size_t int_size = ffi_type_sint.size; - int i; + unsigned int i; rc = ffi_prep_cif_core(cif, abi, 1, nfixedargs, ntotalargs, rtype, atypes); diff --git a/src/libffi/libffi-3.4.4/src/raw_api.c b/src/libffi/libffi-3.4.6/src/raw_api.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/raw_api.c rename to src/libffi/libffi-3.4.6/src/raw_api.c diff --git a/src/libffi/libffi-3.4.4/src/riscv/ffi.c b/src/libffi/libffi-3.4.6/src/riscv/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/riscv/ffi.c rename to src/libffi/libffi-3.4.6/src/riscv/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/riscv/ffitarget.h b/src/libffi/libffi-3.4.6/src/riscv/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/riscv/ffitarget.h rename to src/libffi/libffi-3.4.6/src/riscv/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/riscv/sysv.S b/src/libffi/libffi-3.4.6/src/riscv/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/riscv/sysv.S rename to src/libffi/libffi-3.4.6/src/riscv/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/s390/ffi.c b/src/libffi/libffi-3.4.6/src/s390/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/s390/ffi.c rename to src/libffi/libffi-3.4.6/src/s390/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/s390/ffitarget.h b/src/libffi/libffi-3.4.6/src/s390/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/s390/ffitarget.h rename to src/libffi/libffi-3.4.6/src/s390/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/s390/internal.h b/src/libffi/libffi-3.4.6/src/s390/internal.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/s390/internal.h rename to src/libffi/libffi-3.4.6/src/s390/internal.h diff --git a/src/libffi/libffi-3.4.4/src/s390/sysv.S b/src/libffi/libffi-3.4.6/src/s390/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/s390/sysv.S rename to src/libffi/libffi-3.4.6/src/s390/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/sh/ffi.c b/src/libffi/libffi-3.4.6/src/sh/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/sh/ffi.c rename to src/libffi/libffi-3.4.6/src/sh/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/sh/ffitarget.h b/src/libffi/libffi-3.4.6/src/sh/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/sh/ffitarget.h rename to src/libffi/libffi-3.4.6/src/sh/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/sh/sysv.S b/src/libffi/libffi-3.4.6/src/sh/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/sh/sysv.S rename to src/libffi/libffi-3.4.6/src/sh/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/sh64/ffi.c b/src/libffi/libffi-3.4.6/src/sh64/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/sh64/ffi.c rename to src/libffi/libffi-3.4.6/src/sh64/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/sh64/ffitarget.h b/src/libffi/libffi-3.4.6/src/sh64/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/sh64/ffitarget.h rename to src/libffi/libffi-3.4.6/src/sh64/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/sh64/sysv.S b/src/libffi/libffi-3.4.6/src/sh64/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/sh64/sysv.S rename to src/libffi/libffi-3.4.6/src/sh64/sysv.S diff --git a/src/libffi/libffi-3.4.4/src/sparc/ffi.c b/src/libffi/libffi-3.4.6/src/sparc/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/sparc/ffi.c rename to src/libffi/libffi-3.4.6/src/sparc/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/sparc/ffi64.c b/src/libffi/libffi-3.4.6/src/sparc/ffi64.c similarity index 99% rename from src/libffi/libffi-3.4.4/src/sparc/ffi64.c rename to src/libffi/libffi-3.4.6/src/sparc/ffi64.c index 5ae43e87d..7a9dc3283 100644 --- a/src/libffi/libffi-3.4.4/src/sparc/ffi64.c +++ b/src/libffi/libffi-3.4.6/src/sparc/ffi64.c @@ -382,13 +382,19 @@ ffi_prep_args_v9(ffi_cif *cif, unsigned long *argp, void *rvalue, void **avalue) *argp++ = *(SINT32 *)a; break; case FFI_TYPE_UINT32: - case FFI_TYPE_FLOAT: *argp++ = *(UINT32 *)a; break; case FFI_TYPE_SINT64: case FFI_TYPE_UINT64: case FFI_TYPE_POINTER: + *argp++ = *(UINT64 *)a; + break; + case FFI_TYPE_FLOAT: + flags |= SPARC_FLAG_FP_ARGS; + *argp++ = *(UINT32 *)a; + break; case FFI_TYPE_DOUBLE: + flags |= SPARC_FLAG_FP_ARGS; *argp++ = *(UINT64 *)a; break; diff --git a/src/libffi/libffi-3.4.4/src/sparc/ffitarget.h b/src/libffi/libffi-3.4.6/src/sparc/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/sparc/ffitarget.h rename to src/libffi/libffi-3.4.6/src/sparc/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/sparc/internal.h b/src/libffi/libffi-3.4.6/src/sparc/internal.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/sparc/internal.h rename to src/libffi/libffi-3.4.6/src/sparc/internal.h diff --git a/src/libffi/libffi-3.4.4/src/sparc/v8.S b/src/libffi/libffi-3.4.6/src/sparc/v8.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/sparc/v8.S rename to src/libffi/libffi-3.4.6/src/sparc/v8.S diff --git a/src/libffi/libffi-3.4.4/src/sparc/v9.S b/src/libffi/libffi-3.4.6/src/sparc/v9.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/sparc/v9.S rename to src/libffi/libffi-3.4.6/src/sparc/v9.S diff --git a/src/libffi/libffi-3.4.4/src/tile/ffi.c b/src/libffi/libffi-3.4.6/src/tile/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/tile/ffi.c rename to src/libffi/libffi-3.4.6/src/tile/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/tile/ffitarget.h b/src/libffi/libffi-3.4.6/src/tile/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/tile/ffitarget.h rename to src/libffi/libffi-3.4.6/src/tile/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/tile/tile.S b/src/libffi/libffi-3.4.6/src/tile/tile.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/tile/tile.S rename to src/libffi/libffi-3.4.6/src/tile/tile.S diff --git a/src/libffi/libffi-3.4.4/src/tramp.c b/src/libffi/libffi-3.4.6/src/tramp.c similarity index 98% rename from src/libffi/libffi-3.4.4/src/tramp.c rename to src/libffi/libffi-3.4.6/src/tramp.c index b9d273a1a..8ec084868 100644 --- a/src/libffi/libffi-3.4.4/src/tramp.c +++ b/src/libffi/libffi-3.4.6/src/tramp.c @@ -39,6 +39,10 @@ #ifdef __linux__ #define _GNU_SOURCE 1 #endif + +#include +#include + #include #include #include @@ -266,7 +270,7 @@ ffi_tramp_get_temp_file (void) * trampoline table to make sure that the temporary file can be mapped. */ count = write(tramp_globals.fd, tramp_globals.text, tramp_globals.map_size); - if (count == tramp_globals.map_size && tramp_table_alloc ()) + if (count >=0 && (size_t)count == tramp_globals.map_size && tramp_table_alloc ()) return 1; close (tramp_globals.fd); @@ -303,7 +307,7 @@ ffi_tramp_lock(void) } static void -ffi_tramp_unlock() +ffi_tramp_unlock(void) { pthread_mutex_unlock (&tramp_globals_mutex); } @@ -374,6 +378,8 @@ tramp_table_unmap (struct tramp_table *table) static int ffi_tramp_init (void) { + long page_size; + if (tramp_globals.status == TRAMP_GLOBALS_PASSED) return 1; @@ -396,7 +402,8 @@ ffi_tramp_init (void) &tramp_globals.map_size); tramp_globals.ntramp = tramp_globals.map_size / tramp_globals.size; - if (sysconf (_SC_PAGESIZE) > tramp_globals.map_size) + page_size = sysconf (_SC_PAGESIZE); + if (page_size >= 0 && (size_t)page_size > tramp_globals.map_size) return 0; if (ffi_tramp_init_os ()) diff --git a/src/libffi/libffi-3.4.4/src/types.c b/src/libffi/libffi-3.4.6/src/types.c similarity index 95% rename from src/libffi/libffi-3.4.4/src/types.c rename to src/libffi/libffi-3.4.6/src/types.c index 9ec27f6cf..c1c27f38d 100644 --- a/src/libffi/libffi-3.4.4/src/types.c +++ b/src/libffi/libffi-3.4.6/src/types.c @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------- - types.c - Copyright (c) 1996, 1998 Red Hat, Inc. - + types.c - Copyright (c) 1996, 1998, 2024 Red Hat, Inc. + Predefined ffi_types needed by libffi. Permission is hereby granted, free of charge, to any person obtaining @@ -87,7 +87,7 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); #endif #ifdef __alpha__ -/* Even if we're not configured to default to 128-bit long double, +/* Even if we're not configured to default to 128-bit long double, maintain binary compatibility, as -mlong-double-128 can be used at any time. */ /* Validate the hard-coded number below. */ @@ -95,14 +95,12 @@ FFI_TYPEDEF(double, double, FFI_TYPE_DOUBLE, const); # error FFI_TYPE_LONGDOUBLE out of date # endif const ffi_type ffi_type_longdouble = { 16, 16, 4, NULL }; -#elif FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE +#else FFI_TYPEDEF(longdouble, long double, FFI_TYPE_LONGDOUBLE, FFI_LDBL_CONST); #endif #ifdef FFI_TARGET_HAS_COMPLEX_TYPE FFI_COMPLEX_TYPEDEF(float, float, const); FFI_COMPLEX_TYPEDEF(double, double, const); -#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE FFI_COMPLEX_TYPEDEF(longdouble, long double, FFI_LDBL_CONST); #endif -#endif diff --git a/src/libffi/libffi-3.4.4/src/vax/elfbsd.S b/src/libffi/libffi-3.4.6/src/vax/elfbsd.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/vax/elfbsd.S rename to src/libffi/libffi-3.4.6/src/vax/elfbsd.S diff --git a/src/libffi/libffi-3.4.4/src/vax/ffi.c b/src/libffi/libffi-3.4.6/src/vax/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/vax/ffi.c rename to src/libffi/libffi-3.4.6/src/vax/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/vax/ffitarget.h b/src/libffi/libffi-3.4.6/src/vax/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/vax/ffitarget.h rename to src/libffi/libffi-3.4.6/src/vax/ffitarget.h diff --git a/src/libffi/libffi-3.4.6/src/wasm32/ffi.c b/src/libffi/libffi-3.4.6/src/wasm32/ffi.c new file mode 100644 index 000000000..1a8c9aea7 --- /dev/null +++ b/src/libffi/libffi-3.4.6/src/wasm32/ffi.c @@ -0,0 +1,947 @@ +/* ----------------------------------------------------------------------- + ffi.c - Copyright (c) 2018-2023 Hood Chatham, Brion Vibber, Kleis Auke Wolthuizen, and others. + + wasm32/emscripten Foreign Function Interface + + 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. + ----------------------------------------------------------------------- */ + +#include +#include + +#include +#include + +#include + +#ifdef DEBUG_F +#define LOG_DEBUG(args...) \ + console.warn(`====LIBFFI(line __LINE__)`, args) +#else +#define LOG_DEBUG(args...) 0 +#endif + +#define EM_JS_MACROS(ret, name, args, body...) EM_JS(ret, name, args, body) + +#if WASM_BIGINT +EM_JS_DEPS(libffi, "$getWasmTableEntry,$setWasmTableEntry,$getEmptyTableSlot,$convertJsFunctionToWasm"); +#define CALL_FUNCTION_POINTER(ptr, args...) \ + (LOG_DEBUG("CALL_FUNC_PTR", ptr, args), \ + getWasmTableEntry(ptr).apply(null, args)) + +#define JS_FUNCTION_TO_WASM convertJsFunctionToWasm +#else +EM_JS_DEPS(libffi, "$getWasmTableEntry,$setWasmTableEntry,$getEmptyTableSlot,$convertJsFunctionToWasm,$dynCall,$generateFuncType,$uleb128Encode"); +#define CALL_FUNCTION_POINTER(ptr, args...) \ + (LOG_DEBUG("CALL_FUNC_PTR", sig, ptr, args), \ + dynCall(sig, ptr, args)) + +#define JS_FUNCTION_TO_WASM createLegalizerWrapper +#endif + +// Signature calculations are not needed if WASM_BIGINT is present. +#if WASM_BIGINT +#define SIG(sig) +#else +#define SIG(sig) sig +#endif + +#define DEREF_U8(addr, offset) HEAPU8[addr + offset] +#define DEREF_S8(addr, offset) HEAP8[addr + offset] +#define DEREF_U16(addr, offset) HEAPU16[(addr >> 1) + offset] +#define DEREF_S16(addr, offset) HEAP16[(addr >> 1) + offset] +#define DEREF_U32(addr, offset) HEAPU32[(addr >> 2) + offset] +#define DEREF_S32(addr, offset) HEAP32[(addr >> 2) + offset] + +#define DEREF_F32(addr, offset) HEAPF32[(addr >> 2) + offset] +#define DEREF_F64(addr, offset) HEAPF64[(addr >> 3) + offset] + +#if WASM_BIGINT +// We have HEAPU64 in this case. +#define DEREF_U64(addr, offset) HEAPU64[(addr >> 3) + offset] +#endif + + +#define CHECK_FIELD_OFFSET(struct, field, offset) \ + _Static_assert( \ + offsetof(struct, field) == offset, \ + "Memory layout of '" #struct "' has changed: '" #field "' is in an unexpected location"); + +CHECK_FIELD_OFFSET(ffi_cif, abi, 4*0); +CHECK_FIELD_OFFSET(ffi_cif, nargs, 4*1); +CHECK_FIELD_OFFSET(ffi_cif, arg_types, 4*2); +CHECK_FIELD_OFFSET(ffi_cif, rtype, 4*3); +CHECK_FIELD_OFFSET(ffi_cif, nfixedargs, 4*6); + +#define CIF__ABI(addr) DEREF_U32(addr, 0) +#define CIF__NARGS(addr) DEREF_U32(addr, 1) +#define CIF__ARGTYPES(addr) DEREF_U32(addr, 2) +#define CIF__RTYPE(addr) DEREF_U32(addr, 3) +#define CIF__NFIXEDARGS(addr) DEREF_U32(addr, 6) + +CHECK_FIELD_OFFSET(ffi_type, size, 0); +CHECK_FIELD_OFFSET(ffi_type, alignment, 4); +CHECK_FIELD_OFFSET(ffi_type, type, 6); +CHECK_FIELD_OFFSET(ffi_type, elements, 8); + +#define FFI_TYPE__SIZE(addr) DEREF_U32(addr, 0) +#define FFI_TYPE__ALIGN(addr) DEREF_U16(addr + 4, 0) +#define FFI_TYPE__TYPEID(addr) DEREF_U16(addr + 6, 0) +#define FFI_TYPE__ELEMENTS(addr) DEREF_U32(addr + 8, 0) + +#define ALIGN_ADDRESS(addr, align) (addr &= (~((align) - 1))) +#define STACK_ALLOC(stack, size, align) ((stack -= (size)), ALIGN_ADDRESS(stack, align)) + +// Most wasm runtimes support at most 1000 Js trampoline args. +#define MAX_ARGS 1000 + +#include + +#define VARARGS_FLAG 1 + +#define FFI_OK_MACRO 0 +_Static_assert(FFI_OK_MACRO == FFI_OK, "FFI_OK must be 0"); + +#define FFI_BAD_TYPEDEF_MACRO 1 +_Static_assert(FFI_BAD_TYPEDEF_MACRO == FFI_BAD_TYPEDEF, "FFI_BAD_TYPEDEF must be 1"); + +ffi_status FFI_HIDDEN +ffi_prep_cif_machdep(ffi_cif *cif) +{ + if (cif->abi != FFI_WASM32_EMSCRIPTEN) + return FFI_BAD_ABI; + // This is called after ffi_prep_cif_machdep_var so we need to avoid + // overwriting cif->nfixedargs. + if (!(cif->flags & VARARGS_FLAG)) + cif->nfixedargs = cif->nargs; + if (cif->nargs > MAX_ARGS) + return FFI_BAD_TYPEDEF; + if (cif->rtype->type == FFI_TYPE_COMPLEX) + return FFI_BAD_TYPEDEF; + // If they put the COMPLEX type into a struct we won't notice, but whatever. + for (int i = 0; i < cif->nargs; i++) + if (cif->arg_types[i]->type == FFI_TYPE_COMPLEX) + return FFI_BAD_TYPEDEF; + return FFI_OK; +} + +ffi_status FFI_HIDDEN +ffi_prep_cif_machdep_var(ffi_cif *cif, unsigned nfixedargs, unsigned ntotalargs) +{ + cif->flags |= VARARGS_FLAG; + cif->nfixedargs = nfixedargs; + // The varargs takes up one extra argument + if (cif->nfixedargs + 1 > MAX_ARGS) + return FFI_BAD_TYPEDEF; + return FFI_OK; +} + +/** + * A Javascript helper function. This takes an argument typ which is a wasm + * pointer to an ffi_type object. It returns a pair a type and a type id. + * + * - If it is not a struct, return its type and its typeid field. + * - If it is a struct of size >= 2, return the type and its typeid (which + * will be FFI_TYPE_STRUCT) + * - If it is a struct of size 0, return FFI_TYPE_VOID (????? this is broken) + * - If it is a struct of size 1, replace it with the single field and apply + * the same logic again to that. + * + * By always unboxing structs up front, we can avoid messy casework later. + */ +EM_JS_MACROS( +void, +unbox_small_structs, (ffi_type type_ptr), { + var type_id = FFI_TYPE__TYPEID(type_ptr); + while (type_id === FFI_TYPE_STRUCT) { + // Don't unbox single element structs if they are bigger than 16 bytes. This + // is a work around for the fact that Python will give incorrect values for + // the size of the field in these cases: it says that the struct has pointer + // size and alignment and are of type pointer, even though it is more + // accurately a struct and has a larger size. Keeping it as a struct here + // will let us get the ABI right (which is in fact that the true argument is + // a pointer to the stack... so maybe Python issn't so wrong??) + // + // See the Python comment here: + // https://github.com/python/cpython/blob/a16a9f978f42b8a09297c1efbf33877f6388c403/Modules/_ctypes/stgdict.c#L718-L779 + if (FFI_TYPE__SIZE(type_ptr) > 16) { + break; + } + var elements = FFI_TYPE__ELEMENTS(type_ptr); + var first_element = DEREF_U32(elements, 0); + if (first_element === 0) { + type_id = FFI_TYPE_VOID; + break; + } else if (DEREF_U32(elements, 1) === 0) { + type_ptr = first_element; + type_id = FFI_TYPE__TYPEID(first_element); + } else { + break; + } + } + return [type_ptr, type_id]; +}) + +EM_JS_MACROS( +void, +ffi_call_js, (ffi_cif *cif, ffi_fp fn, void *rvalue, void **avalue), +{ + var abi = CIF__ABI(cif); + var nargs = CIF__NARGS(cif); + var nfixedargs = CIF__NFIXEDARGS(cif); + var arg_types_ptr = CIF__ARGTYPES(cif); + var rtype_unboxed = unbox_small_structs(CIF__RTYPE(cif)); + var rtype_ptr = rtype_unboxed[0]; + var rtype_id = rtype_unboxed[1]; + var orig_stack_ptr = stackSave(); + var cur_stack_ptr = orig_stack_ptr; + + var args = []; + // Does our onwards call return by argument or normally? We return by argument + // no matter what. + var ret_by_arg = false; + + if (rtype_id === FFI_TYPE_COMPLEX) { + throw new Error('complex ret marshalling nyi'); + } + if (rtype_id < 0 || rtype_id > FFI_TYPE_LAST) { + throw new Error('Unexpected rtype ' + rtype_id); + } + // If the return type is a struct with multiple entries or a long double, the + // function takes an extra first argument which is a pointer to return value. + // Conveniently, we've already received a pointer to return value, so we can + // just use this. We also mark a flag that we don't need to convert the return + // value of the dynamic call back to C. + if (rtype_id === FFI_TYPE_LONGDOUBLE || rtype_id === FFI_TYPE_STRUCT) { + args.push(rvalue); + ret_by_arg = true; + } + + SIG(var sig = ""); + +#if !WASM_BIGINT + switch(rtype_id) { + case FFI_TYPE_VOID: + SIG(sig = 'v'); + break; + case FFI_TYPE_STRUCT: + case FFI_TYPE_LONGDOUBLE: + SIG(sig = 'vi'); + break; + case FFI_TYPE_INT: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + SIG(sig = 'i'); + break; + case FFI_TYPE_FLOAT: + SIG(sig = 'f'); + break; + case FFI_TYPE_DOUBLE: + SIG(sig = 'd'); + break; + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + SIG(sig = 'j'); + break; + } +#endif + + // Accumulate a Javascript list of arguments for the Javascript wrapper for + // the wasm function. The Javascript wrapper does a type conversion from + // Javascript to C automatically, here we manually do the inverse conversion + // from C to Javascript. + for (var i = 0; i < nfixedargs; i++) { + var arg_ptr = DEREF_U32(avalue, i); + var arg_unboxed = unbox_small_structs(DEREF_U32(arg_types_ptr, i)); + var arg_type_ptr = arg_unboxed[0]; + var arg_type_id = arg_unboxed[1]; + + // It's okay here to always use unsigned integers as long as the size is 32 + // or 64 bits. Smaller sizes get extended to 32 bits differently according + // to whether they are signed or unsigned. + switch (arg_type_id) { + case FFI_TYPE_INT: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT32: + case FFI_TYPE_POINTER: + args.push(DEREF_U32(arg_ptr, 0)); + SIG(sig += 'i'); + break; + case FFI_TYPE_FLOAT: + args.push(DEREF_F32(arg_ptr, 0)); + SIG(sig += 'f'); + break; + case FFI_TYPE_DOUBLE: + args.push(DEREF_F64(arg_ptr, 0)); + SIG(sig += 'd'); + break; + case FFI_TYPE_UINT8: + args.push(DEREF_U8(arg_ptr, 0)); + SIG(sig += 'i'); + break; + case FFI_TYPE_SINT8: + args.push(DEREF_S8(arg_ptr, 0)); + SIG(sig += 'i'); + break; + case FFI_TYPE_UINT16: + args.push(DEREF_U16(arg_ptr, 0)); + SIG(sig += 'i'); + break; + case FFI_TYPE_SINT16: + args.push(DEREF_S16(arg_ptr, 0)); + SIG(sig += 'i'); + break; + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + #if WASM_BIGINT + args.push(DEREF_U64(arg_ptr, 0)); + #else + args.push(DEREF_U32(arg_ptr, 0)); + args.push(DEREF_U32(arg_ptr, 1)); + #endif + SIG(sig += 'j'); + break; + case FFI_TYPE_LONGDOUBLE: + // long double is passed as a pair of BigInts. + #if WASM_BIGINT + args.push(DEREF_U64(arg_ptr, 0)); + args.push(DEREF_U64(arg_ptr, 1)); + #else + args.push(DEREF_U32(arg_ptr, 0)); + args.push(DEREF_U32(arg_ptr, 1)); + args.push(DEREF_U32(arg_ptr, 2)); + args.push(DEREF_U32(arg_ptr, 3)); + #endif + SIG(sig += "jj"); + break; + case FFI_TYPE_STRUCT: + // Nontrivial structs are passed by pointer. + // Have to copy the struct onto the stack though because C ABI says it's + // call by value. + var size = FFI_TYPE__SIZE(arg_type_ptr); + var align = FFI_TYPE__ALIGN(arg_type_ptr); + STACK_ALLOC(cur_stack_ptr, size, align); + HEAP8.subarray(cur_stack_ptr, cur_stack_ptr+size).set(HEAP8.subarray(arg_ptr, arg_ptr + size)); + args.push(cur_stack_ptr); + SIG(sig += 'i'); + break; + case FFI_TYPE_COMPLEX: + throw new Error('complex marshalling nyi'); + default: + throw new Error('Unexpected type ' + arg_type_id); + } + } + + // Wasm functions can't directly manipulate the callstack, so varargs + // arguments have to go on a separate stack. A varags function takes one extra + // argument which is a pointer to where on the separate stack the args are + // located. Because stacks are allocated backwards, we have to loop over the + // varargs backwards. + // + // We don't have any way of knowing how many args were actually passed, so we + // just always copy extra nonsense past the end. The ownwards call will know + // not to look at it. + if (nfixedargs != nargs) { + SIG(sig += 'i'); + var struct_arg_info = []; + for (var i = nargs - 1; i >= nfixedargs; i--) { + var arg_ptr = DEREF_U32(avalue, i); + var arg_unboxed = unbox_small_structs(DEREF_U32(arg_types_ptr, i)); + var arg_type_ptr = arg_unboxed[0]; + var arg_type_id = arg_unboxed[1]; + switch (arg_type_id) { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + STACK_ALLOC(cur_stack_ptr, 1, 1); + DEREF_U8(cur_stack_ptr, 0) = DEREF_U8(arg_ptr, 0); + break; + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + STACK_ALLOC(cur_stack_ptr, 2, 2); + DEREF_U16(cur_stack_ptr, 0) = DEREF_U16(arg_ptr, 0); + break; + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_FLOAT: + STACK_ALLOC(cur_stack_ptr, 4, 4); + DEREF_U32(cur_stack_ptr, 0) = DEREF_U32(arg_ptr, 0); + break; + case FFI_TYPE_DOUBLE: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + STACK_ALLOC(cur_stack_ptr, 8, 8); + DEREF_U32(cur_stack_ptr, 0) = DEREF_U32(arg_ptr, 0); + DEREF_U32(cur_stack_ptr, 1) = DEREF_U32(arg_ptr, 1); + break; + case FFI_TYPE_LONGDOUBLE: + STACK_ALLOC(cur_stack_ptr, 16, 8); + DEREF_U32(cur_stack_ptr, 0) = DEREF_U32(arg_ptr, 0); + DEREF_U32(cur_stack_ptr, 1) = DEREF_U32(arg_ptr, 1); + DEREF_U32(cur_stack_ptr, 2) = DEREF_U32(arg_ptr, 2); + DEREF_U32(cur_stack_ptr, 3) = DEREF_U32(arg_ptr, 3); + break; + case FFI_TYPE_STRUCT: + // Again, struct must be passed by pointer. + // But ABI is by value, so have to copy struct onto stack. + // Currently arguments are going onto stack so we can't put it there now. Come back for this. + STACK_ALLOC(cur_stack_ptr, 4, 4); + struct_arg_info.push([cur_stack_ptr, arg_ptr, FFI_TYPE__SIZE(arg_type_ptr), FFI_TYPE__ALIGN(arg_type_ptr)]); + break; + case FFI_TYPE_COMPLEX: + throw new Error('complex arg marshalling nyi'); + default: + throw new Error('Unexpected argtype ' + arg_type_id); + } + } + // extra normal argument which is the pointer to the varargs. + args.push(cur_stack_ptr); + // Now allocate variable struct args on stack too. + for (var i = 0; i < struct_arg_info.length; i++) { + var struct_info = struct_arg_info[i]; + var arg_target = struct_info[0]; + var arg_ptr = struct_info[1]; + var size = struct_info[2]; + var align = struct_info[3]; + STACK_ALLOC(cur_stack_ptr, size, align); + HEAP8.subarray(cur_stack_ptr, cur_stack_ptr+size).set(HEAP8.subarray(arg_ptr, arg_ptr + size)); + DEREF_U32(arg_target, 0) = cur_stack_ptr; + } + } + stackRestore(cur_stack_ptr); + stackAlloc(0); // stackAlloc enforces alignment invariants on the stack pointer + var result = CALL_FUNCTION_POINTER(fn, args); + // Put the stack pointer back (we moved it if there were any struct args or we + // made a varargs call) + stackRestore(orig_stack_ptr); + + // We need to return by argument. If return value was a nontrivial struct or + // long double, the onwards call already put the return value in rvalue + if (ret_by_arg) { + return; + } + + // Otherwise the result was automatically converted from C into Javascript and + // we need to manually convert it back to C. + switch (rtype_id) { + case FFI_TYPE_VOID: + break; + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + DEREF_U32(rvalue, 0) = result; + break; + case FFI_TYPE_FLOAT: + DEREF_F32(rvalue, 0) = result; + break; + case FFI_TYPE_DOUBLE: + DEREF_F64(rvalue, 0) = result; + break; + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + DEREF_U8(rvalue, 0) = result; + break; + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + DEREF_U16(rvalue, 0) = result; + break; + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + #if WASM_BIGINT + DEREF_U64(rvalue, 0) = result; + #else + DEREF_U32(rvalue, 0) = result; + DEREF_U32(rvalue, 1) = getTempRet0(); + #endif + break; + case FFI_TYPE_COMPLEX: + throw new Error('complex ret marshalling nyi'); + default: + throw new Error('Unexpected rtype ' + rtype_id); + } +}); + +void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { + ffi_call_js(cif, fn, rvalue, avalue); +} + +CHECK_FIELD_OFFSET(ffi_closure, ftramp, 4*0); +CHECK_FIELD_OFFSET(ffi_closure, cif, 4*1); +CHECK_FIELD_OFFSET(ffi_closure, fun, 4*2); +CHECK_FIELD_OFFSET(ffi_closure, user_data, 4*3); + +#define CLOSURE__wrapper(addr) DEREF_U32(addr, 0) +#define CLOSURE__cif(addr) DEREF_U32(addr, 1) +#define CLOSURE__fun(addr) DEREF_U32(addr, 2) +#define CLOSURE__user_data(addr) DEREF_U32(addr, 3) + +EM_JS_MACROS(void *, ffi_closure_alloc_js, (size_t size, void **code), { + var closure = _malloc(size); + var index = getEmptyTableSlot(); + DEREF_U32(code, 0) = index; + CLOSURE__wrapper(closure) = index; + return closure; +}) + +void * __attribute__ ((visibility ("default"))) +ffi_closure_alloc(size_t size, void **code) { + return ffi_closure_alloc_js(size, code); +} + +EM_JS_MACROS(void, ffi_closure_free_js, (void *closure), { + var index = CLOSURE__wrapper(closure); + freeTableIndexes.push(index); + _free(closure); +}) + +void __attribute__ ((visibility ("default"))) +ffi_closure_free(void *closure) { + return ffi_closure_free_js(closure); +} + +#if !WASM_BIGINT + +// When !WASM_BIGINT, we assume there is no JS bigint integration, so JavaScript +// functions cannot take 64 bit integer arguments. +// +// We need to make our own wasm legalizer adaptor that splits 64 bit integer +// arguments and then calls the JavaScript trampoline, then the JavaScript +// trampoline reassembles them, calls the closure, then splits the result (if +// it's a 64 bit integer) and the adaptor puts it back together. +// +// This is basically the reverse of the Emscripten function +// createDyncallWrapper. +EM_JS(void, createLegalizerWrapper, (int trampoline, int sig), { + if(!sig.includes("j")) { + return convertJsFunctionToWasm(trampoline, sig); + } + var sections = []; + var prelude = [ + 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm") + 0x01, 0x00, 0x00, 0x00, // version: 1 + ]; + sections.push(prelude); + var wrappersig = [ + // if return type is j, we will put the upper 32 bits into tempRet0. + sig[0].replace("j", "i"), + // in the rest of the argument list, one 64 bit integer is legalized into + // two 32 bit integers. + sig.slice(1).replace(/j/g, "ii"), + ].join(""); + + var typeSectionBody = [ + 0x03, // number of types = 3 + ]; + generateFuncType(wrappersig, typeSectionBody); // The signature of the wrapper we are generating + generateFuncType(sig, typeSectionBody); // the signature of the function pointer we will call + generateFuncType("i", typeSectionBody); // the signature of getTempRet0 + + var typeSection = [0x01 /* Type section code */]; + uleb128Encode(typeSectionBody.length, typeSection); // length of section in bytes + typeSection.push.apply(typeSection, typeSectionBody); + sections.push(typeSection); + + var importSection = [ + 0x02, // import section code + 0x0d, // length of section in bytes + 0x02, // number of imports = 2 + // Import the getTempRet0 function, which we will call "r" + 0x01, 0x65, // name "e" + 0x01, 0x72, // name "r" + 0x00, // importing a function + 0x02, // type 2 = () -> i32 + // Import the wrapped function, which we will call "f" + 0x01, 0x65, // name "e" + 0x01, 0x66, // name "f" + 0x00, // importing a function + 0x00, // type 0 = wrappersig + ]; + sections.push(importSection); + + var functionSection = [ + 0x03, // function section code + 0x02, // length of section in bytes + 0x01, // number of functions = 1 + 0x01, // type 1 = sig + ]; + sections.push(functionSection); + + var exportSection = [ + 0x07, // export section code + 0x05, // length of section in bytes + 0x01, // One export + 0x01, 0x66, // name "f" + 0x00, // type: function + 0x02, // function index 2 = the wrapper function + ]; + sections.push(exportSection); + + var convert_code = []; + convert_code.push(0x00); // no local variables (except the arguments) + + function localGet(j) { + convert_code.push(0x20); // local.get + uleb128Encode(j, convert_code); + } + + for (var i = 1; i < sig.length; i++) { + if (sig[i] == "j") { + localGet(i - 1); + convert_code.push( + 0xa7 // i32.wrap_i64 + ); + localGet(i - 1); + convert_code.push( + 0x42, 0x20, // i64.const 32 + 0x88, // i64.shr_u + 0xa7 // i32.wrap_i64 + ); + } else { + localGet(i - 1); + } + } + convert_code.push( + 0x10, 0x01 // call f + ); + if (sig[0] === "j") { + // Need to reassemble a 64 bit integer. Lower 32 bits is on stack. Upper 32 + // bits we get from getTempRet0 + convert_code.push( + 0xad, // i64.extend_i32_unsigned + 0x10, 0x00, // Call function 0 (r = getTempRet0) + // join lower 32 bits and upper 32 bits + 0xac, // i64.extend_i32_signed + 0x42, 0x20, // i64.const 32 + 0x86, // i64.shl, + 0x84 // i64.or + ); + } + convert_code.push(0x0b); // end + + var codeBody = [0x01]; // one code + uleb128Encode(convert_code.length, codeBody); + codeBody.push.apply(codeBody, convert_code); + var codeSection = [0x0a /* Code section code */]; + uleb128Encode(codeBody.length, codeSection); + codeSection.push.apply(codeSection, codeBody); + sections.push(codeSection); + + var bytes = new Uint8Array([].concat.apply([], sections)); + // We can compile this wasm module synchronously because it is small. + var module = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module, { + e: { + r: getTempRet0, + f: trampoline, + }, + }); + return instance.exports.f; +}); +#endif + +EM_JS_MACROS( +ffi_status, +ffi_prep_closure_loc_js, +(ffi_closure *closure, ffi_cif *cif, void *fun, void *user_data, void *codeloc), +{ + var abi = CIF__ABI(cif); + var nargs = CIF__NARGS(cif); + var nfixedargs = CIF__NFIXEDARGS(cif); + var arg_types_ptr = CIF__ARGTYPES(cif); + var rtype_unboxed = unbox_small_structs(CIF__RTYPE(cif)); + var rtype_ptr = rtype_unboxed[0]; + var rtype_id = rtype_unboxed[1]; + + // First construct the signature of the javascript trampoline we are going to create. + // Important: this is the signature for calling us, the onward call always has sig viiii. + var sig; + var ret_by_arg = false; + switch (rtype_id) { + case FFI_TYPE_VOID: + sig = 'v'; + break; + case FFI_TYPE_STRUCT: + case FFI_TYPE_LONGDOUBLE: + // Return via a first pointer argument. + sig = 'vi'; + ret_by_arg = true; + break; + case FFI_TYPE_INT: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + sig = 'i'; + break; + case FFI_TYPE_FLOAT: + sig = 'f'; + break; + case FFI_TYPE_DOUBLE: + sig = 'd'; + break; + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + sig = 'j'; + break; + case FFI_TYPE_COMPLEX: + throw new Error('complex ret marshalling nyi'); + default: + throw new Error('Unexpected rtype ' + rtype_id); + } + var unboxed_arg_type_id_list = []; + var unboxed_arg_type_info_list = []; + for (var i = 0; i < nargs; i++) { + var arg_unboxed = unbox_small_structs(DEREF_U32(arg_types_ptr, i)); + var arg_type_ptr = arg_unboxed[0]; + var arg_type_id = arg_unboxed[1]; + unboxed_arg_type_id_list.push(arg_type_id); + unboxed_arg_type_info_list.push([FFI_TYPE__SIZE(arg_type_ptr), FFI_TYPE__ALIGN(arg_type_ptr)]); + } + for (var i = 0; i < nfixedargs; i++) { + switch (unboxed_arg_type_id_list[i]) { + case FFI_TYPE_INT: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + case FFI_TYPE_STRUCT: + sig += 'i'; + break; + case FFI_TYPE_FLOAT: + sig += 'f'; + break; + case FFI_TYPE_DOUBLE: + sig += 'd'; + break; + case FFI_TYPE_LONGDOUBLE: + sig += 'jj'; + break; + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + sig += 'j'; + break; + case FFI_TYPE_COMPLEX: + throw new Error('complex marshalling nyi'); + default: + throw new Error('Unexpected argtype ' + arg_type_id); + } + } + if (nfixedargs < nargs) { + // extra pointer to varargs stack + sig += "i"; + } + LOG_DEBUG("CREATE_CLOSURE", "sig:", sig); + function trampoline() { + var args = Array.prototype.slice.call(arguments); + var size = 0; + var orig_stack_ptr = stackSave(); + var cur_ptr = orig_stack_ptr; + var ret_ptr; + var jsarg_idx = 0; + // Should we return by argument or not? The onwards call returns by argument + // no matter what. (Warning: ret_by_arg means the opposite in ffi_call) + if (ret_by_arg) { + ret_ptr = args[jsarg_idx++]; + } else { + // We might return 4 bytes or 8 bytes, allocate 8 just in case. + STACK_ALLOC(cur_ptr, 8, 8); + ret_ptr = cur_ptr; + } + cur_ptr -= 4 * nargs; + var args_ptr = cur_ptr; + var carg_idx = 0; + // Here we either have the actual argument, or a pair of BigInts for long + // double, or a pointer to struct. We have to store into args_ptr[i] a + // pointer to the ith argument. If the argument is a struct, just store the + // pointer. Otherwise allocate stack space and copy the js argument onto the + // stack. + for (; carg_idx < nfixedargs; carg_idx++) { + // jsarg_idx might start out as 0 or 1 depending on ret_by_arg + // it advances an extra time for long double + var cur_arg = args[jsarg_idx++]; + var arg_type_info = unboxed_arg_type_info_list[carg_idx]; + var arg_size = arg_type_info[0]; + var arg_align = arg_type_info[1]; + var arg_type_id = unboxed_arg_type_id_list[carg_idx]; + switch (arg_type_id) { + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + // Bad things happen if we don't align to 4 here + STACK_ALLOC(cur_ptr, 1, 4); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + DEREF_U8(cur_ptr, 0) = cur_arg; + break; + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + // Bad things happen if we don't align to 4 here + STACK_ALLOC(cur_ptr, 2, 4); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + DEREF_U16(cur_ptr, 0) = cur_arg; + break; + case FFI_TYPE_INT: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_POINTER: + STACK_ALLOC(cur_ptr, 4, 4); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + DEREF_U32(cur_ptr, 0) = cur_arg; + break; + case FFI_TYPE_STRUCT: + // cur_arg is already a pointer to struct + // copy it onto stack to pass by value + STACK_ALLOC(cur_ptr, arg_size, arg_align); + HEAP8.subarray(cur_ptr, cur_ptr + arg_size).set(HEAP8.subarray(cur_arg, cur_arg + arg_size)); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + break; + case FFI_TYPE_FLOAT: + STACK_ALLOC(cur_ptr, 4, 4); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + DEREF_F32(cur_ptr, 0) = cur_arg; + break; + case FFI_TYPE_DOUBLE: + STACK_ALLOC(cur_ptr, 8, 8); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + DEREF_F64(cur_ptr, 0) = cur_arg; + break; + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + STACK_ALLOC(cur_ptr, 8, 8); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + #if WASM_BIGINT + DEREF_U64(cur_ptr, 0) = cur_arg; + #else + // Bigint arg was split by legalizer adaptor + DEREF_U32(cur_ptr, 0) = cur_arg; + cur_arg = args[jsarg_idx++]; + DEREF_U32(cur_ptr, 1) = cur_arg; + #endif + break; + case FFI_TYPE_LONGDOUBLE: + STACK_ALLOC(cur_ptr, 16, 8); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + #if WASM_BIGINT + DEREF_U64(cur_ptr, 0) = cur_arg; + cur_arg = args[jsarg_idx++]; + DEREF_U64(cur_ptr, 1) = cur_arg; + #else + // Was split by legalizer adaptor + DEREF_U32(cur_ptr, 0) = cur_arg; + cur_arg = args[jsarg_idx++]; + DEREF_U32(cur_ptr, 1) = cur_arg; + cur_arg = args[jsarg_idx++]; + DEREF_U32(cur_ptr, 2) = cur_arg; + cur_arg = args[jsarg_idx++]; + DEREF_U32(cur_ptr, 3) = cur_arg; + #endif + break; + } + } + // If its a varargs call, last js argument is a pointer to the varargs. + var varargs = args[args.length - 1]; + // We have no way of knowing how many varargs were actually provided, this + // fills the rest of the stack space allocated with nonsense. The onward + // call will know to ignore the nonsense. + + // We either have a pointer to the argument if the argument is not a struct + // or a pointer to pointer to struct. We need to store a pointer to the + // argument into args_ptr[i] + for (; carg_idx < nargs; carg_idx++) { + var arg_type_id = unboxed_arg_type_id_list[carg_idx]; + var arg_type_info = unboxed_arg_type_info_list[carg_idx]; + var arg_size = arg_type_info[0]; + var arg_align = arg_type_info[1]; + if (arg_type_id === FFI_TYPE_STRUCT) { + // In this case varargs is a pointer to pointer to struct so we need to + // deref once + var struct_ptr = DEREF_U32(varargs, 0); + STACK_ALLOC(cur_ptr, arg_size, arg_align); + HEAP8.subarray(cur_ptr, cur_ptr + arg_size).set(HEAP8.subarray(struct_ptr, struct_ptr + arg_size)); + DEREF_U32(args_ptr, carg_idx) = cur_ptr; + } else { + DEREF_U32(args_ptr, carg_idx) = varargs; + } + varargs += 4; + } + stackRestore(cur_ptr); + stackAlloc(0); // stackAlloc enforces alignment invariants on the stack pointer + LOG_DEBUG("CALL_CLOSURE", "closure:", closure, "fptr", CLOSURE__fun(closure), "cif", CLOSURE__cif(closure)); + getWasmTableEntry(CLOSURE__fun(closure))( + CLOSURE__cif(closure), ret_ptr, args_ptr, + CLOSURE__user_data(closure) + ); + stackRestore(orig_stack_ptr); + + // If we aren't supposed to return by argument, figure out what to return. + if (!ret_by_arg) { + switch (sig[0]) { + case "i": + return DEREF_U32(ret_ptr, 0); + case "j": + #if WASM_BIGINT + return DEREF_U64(ret_ptr, 0); + #else + // Split the return i64, set the upper 32 bits into tempRet0 and return + // the lower 32 bits. + setTempRet0(DEREF_U32(ret_ptr, 1)); + return DEREF_U32(ret_ptr, 0); + #endif + case "d": + return DEREF_F64(ret_ptr, 0); + case "f": + return DEREF_F32(ret_ptr, 0); + } + } + } + try { + var wasm_trampoline = JS_FUNCTION_TO_WASM(trampoline, sig); + } catch(e) { + return FFI_BAD_TYPEDEF_MACRO; + } + setWasmTableEntry(codeloc, wasm_trampoline); + CLOSURE__cif(closure) = cif; + CLOSURE__fun(closure) = fun; + CLOSURE__user_data(closure) = user_data; + return FFI_OK_MACRO; +}) + +// EM_JS does not correctly handle function pointer arguments, so we need a +// helper +ffi_status ffi_prep_closure_loc(ffi_closure *closure, ffi_cif *cif, + void (*fun)(ffi_cif *, void *, void **, void *), + void *user_data, void *codeloc) { + if (cif->abi != FFI_WASM32_EMSCRIPTEN) + return FFI_BAD_ABI; + return ffi_prep_closure_loc_js(closure, cif, (void *)fun, user_data, + codeloc); +} diff --git a/src/libffi/libffi-3.4.6/src/wasm32/ffitarget.h b/src/libffi/libffi-3.4.6/src/wasm32/ffitarget.h new file mode 100644 index 000000000..ac78b7433 --- /dev/null +++ b/src/libffi/libffi-3.4.6/src/wasm32/ffitarget.h @@ -0,0 +1,62 @@ +/* -----------------------------------------------------------------*-C-*- + ffitarget.h - Copyright (c) 2018-2023 Hood Chatham, Brion Vibber, Kleis Auke Wolthuizen, and others. + + Target configuration macros for wasm32. + + 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. + + ----------------------------------------------------------------------- */ + +#ifndef LIBFFI_TARGET_H +#define LIBFFI_TARGET_H + +#ifndef LIBFFI_H +#error "Please do not include ffitarget.h directly into your source. Use ffi.h instead." +#endif + +/* ---- Generic type definitions ----------------------------------------- */ + +typedef unsigned long ffi_arg; +typedef signed long ffi_sarg; + +// TODO: https://github.com/emscripten-core/emscripten/issues/9868 +typedef void (*ffi_fp)(void); + +typedef enum ffi_abi { + FFI_FIRST_ABI = 0, + FFI_WASM32, // "raw", no structures, varargs, or closures (not implemented!) + FFI_WASM32_EMSCRIPTEN, // structures, varargs, and split 64-bit params + FFI_LAST_ABI, +#ifdef __EMSCRIPTEN__ + FFI_DEFAULT_ABI = FFI_WASM32_EMSCRIPTEN +#else + FFI_DEFAULT_ABI = FFI_WASM32 +#endif +} ffi_abi; + +#define FFI_CLOSURES 1 +// #define FFI_GO_CLOSURES 0 +#define FFI_TRAMPOLINE_SIZE 4 +// #define FFI_NATIVE_RAW_API 0 +#define FFI_TARGET_SPECIFIC_VARIADIC 1 +#define FFI_EXTRA_CIF_FIELDS unsigned int nfixedargs + +#endif diff --git a/src/libffi/libffi-3.4.4/src/x86/asmnames.h b/src/libffi/libffi-3.4.6/src/x86/asmnames.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/asmnames.h rename to src/libffi/libffi-3.4.6/src/x86/asmnames.h diff --git a/src/libffi/libffi-3.4.4/src/x86/ffi.c b/src/libffi/libffi-3.4.6/src/x86/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/ffi.c rename to src/libffi/libffi-3.4.6/src/x86/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/x86/ffi64.c b/src/libffi/libffi-3.4.6/src/x86/ffi64.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/ffi64.c rename to src/libffi/libffi-3.4.6/src/x86/ffi64.c diff --git a/src/libffi/libffi-3.4.4/src/x86/ffitarget.h b/src/libffi/libffi-3.4.6/src/x86/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/ffitarget.h rename to src/libffi/libffi-3.4.6/src/x86/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/x86/ffiw64.c b/src/libffi/libffi-3.4.6/src/x86/ffiw64.c similarity index 99% rename from src/libffi/libffi-3.4.4/src/x86/ffiw64.c rename to src/libffi/libffi-3.4.6/src/x86/ffiw64.c index 827165868..2be8b9927 100644 --- a/src/libffi/libffi-3.4.4/src/x86/ffiw64.c +++ b/src/libffi/libffi-3.4.6/src/x86/ffiw64.c @@ -227,7 +227,7 @@ EFI64(ffi_prep_closure_loc)(ffi_closure* closure, ffi_cif* cif, void (*fun)(ffi_cif*, void*, void**, void*), void *user_data, - void *codeloc) + void *codeloc MAYBE_UNUSED) { static const unsigned char trampoline[FFI_TRAMPOLINE_SIZE - 8] = { /* endbr64 */ diff --git a/src/libffi/libffi-3.4.4/src/x86/internal.h b/src/libffi/libffi-3.4.6/src/x86/internal.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/internal.h rename to src/libffi/libffi-3.4.6/src/x86/internal.h diff --git a/src/libffi/libffi-3.4.4/src/x86/internal64.h b/src/libffi/libffi-3.4.6/src/x86/internal64.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/internal64.h rename to src/libffi/libffi-3.4.6/src/x86/internal64.h diff --git a/src/libffi/libffi-3.4.4/src/x86/sysv.S b/src/libffi/libffi-3.4.6/src/x86/sysv.S similarity index 90% rename from src/libffi/libffi-3.4.4/src/x86/sysv.S rename to src/libffi/libffi-3.4.6/src/x86/sysv.S index 7110f02f5..c7a0fb51b 100644 --- a/src/libffi/libffi-3.4.4/src/x86/sysv.S +++ b/src/libffi/libffi-3.4.6/src/x86/sysv.S @@ -888,10 +888,27 @@ ENDF(C(ffi_closure_raw_THISCALL)) #endif /* !FFI_NO_RAW_API */ #ifdef X86_DARWIN -# define COMDAT(X) \ - .section __TEXT,__text,coalesced,pure_instructions; \ +/* The linker in use on earlier Darwin needs weak definitions to be + placed in a coalesced section. That section should not be called + __TEXT,__text since that would be re-defining the attributes of the + .text section (which is an error for earlier tools). Here we use + '__textcoal_nt' which is what GCC emits for this. + Later linker versions are happy to use a normal section and, after + Darwin12 / OSX 10.8, the tools warn that using coalesced sections + for this is deprecated so we must switch to avoid build fails and/or + deprecation warnings. */ +# if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1080 +# define COMDAT(X) \ + .section __TEXT,__textcoal_nt,coalesced,pure_instructions; \ + .weak_definition X; \ + FFI_HIDDEN(X) +# else +# define COMDAT(X) \ + .text; \ .weak_definition X; \ FFI_HIDDEN(X) +# endif #elif defined __ELF__ && !(defined(__sun__) && defined(__svr4__)) # define COMDAT(X) \ .section .text.X,"axG",@progbits,X,comdat; \ @@ -916,7 +933,37 @@ ENDF(C(__x86.get_pc_thunk.dx)) #endif /* DARWIN || HIDDEN */ #endif /* __PIC__ */ -/* Sadly, OSX cctools-as doesn't understand .cfi directives at all. */ +/* Sadly, OSX cctools-as does not understand .cfi directives at all so + we build an eh frame by hand. */ + +#ifdef __APPLE__ +/* The cctools assembler will try to make a difference between two local + symbols into a relocation against, which will not work in the eh (produces + link-time fails). + To avoid this, we compute the symbol difference with a .set directive and + then substitute this value. */ +# define LEN(N, P) .set Llen$N$P,L(N)-L(P); .long Llen$N$P +/* Note, this assume DW_CFA_advance_loc1 fits into 7 bits. */ +# define ADV(N, P) .set Ladv$N$P,L(N)-L(P); .byte 2, Ladv$N$P +/* For historical reasons, the EH reg numbers for SP and FP are swapped from + the DWARF ones for 32b Darwin. */ +# define SP 5 +# define FP 4 +# define ENC 0x10 +#else +# define LEN(N, P) .long L(N)-L(P) +/* Assume DW_CFA_advance_loc1 fits. */ +# define ADV(N, P) .byte 2, L(N)-L(P) +# define SP 4 +# define FP 5 +# define ENC 0x1b +#endif + +#ifdef HAVE_AS_X86_PCREL +# define PCREL(X) X-. +#else +# define PCREL(X) X@rel +#endif #ifdef __APPLE__ .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support @@ -928,17 +975,11 @@ EHFrame0: #else .section .eh_frame,EH_FRAME_FLAGS,@progbits #endif - -#ifdef HAVE_AS_X86_PCREL -# define PCREL(X) X - . -#else -# define PCREL(X) X@rel +#ifndef __APPLE__ +/* EH sections are already suitably aligned on Darwin. */ + .balign 4 #endif -/* Simplify advancing between labels. Assume DW_CFA_advance_loc1 fits. */ -#define ADV(N, P) .byte 2, L(N)-L(P) - - .balign 4 L(CIE): .set L(set0),L(ECIE)-L(SCIE) .long L(set0) /* CIE Length */ @@ -950,8 +991,8 @@ L(SCIE): .byte 0x7c /* CIE Data Alignment Factor */ .byte 0x8 /* CIE RA Column */ .byte 1 /* Augmentation size */ - .byte 0x1b /* FDE Encoding (pcrel sdata4) */ - .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp offset 4 */ + .byte ENC /* FDE Encoding (pcrel abs/4byte) */ + .byte 0xc, SP, 4 /* DW_CFA_def_cfa, %esp offset 4 */ .byte 0x80+8, 1 /* DW_CFA_offset, %eip offset 1*-4 */ .balign 4 L(ECIE): @@ -959,20 +1000,20 @@ L(ECIE): .set L(set1),L(EFDE1)-L(SFDE1) .long L(set1) /* FDE Length */ L(SFDE1): - .long L(SFDE1)-L(CIE) /* FDE CIE offset */ + LEN(SFDE1, CIE) /* FDE CIE offset */ .long PCREL(L(UW0)) /* Initial location */ - .long L(UW5)-L(UW0) /* Address range */ + LEN(UW5, UW0) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW1, UW0) - .byte 0xc, 5, 8 /* DW_CFA_def_cfa, %ebp 8 */ - .byte 0x80+5, 2 /* DW_CFA_offset, %ebp 2*-4 */ + .byte 0xc, FP, 8 /* DW_CFA_def_cfa, %ebp 8 */ + .byte 0x80+FP, 2 /* DW_CFA_offset, %ebp 2*-4 */ ADV(UW2, UW1) .byte 0x80+3, 0 /* DW_CFA_offset, %ebx 0*-4 */ ADV(UW3, UW2) .byte 0xa /* DW_CFA_remember_state */ - .byte 0xc, 4, 4 /* DW_CFA_def_cfa, %esp 4 */ + .byte 0xc, SP, 4 /* DW_CFA_def_cfa, %esp 4 */ .byte 0xc0+3 /* DW_CFA_restore, %ebx */ - .byte 0xc0+5 /* DW_CFA_restore, %ebp */ + .byte 0xc0+FP /* DW_CFA_restore, %ebp */ ADV(UW4, UW3) .byte 0xb /* DW_CFA_restore_state */ .balign 4 @@ -981,9 +1022,9 @@ L(EFDE1): .set L(set2),L(EFDE2)-L(SFDE2) .long L(set2) /* FDE Length */ L(SFDE2): - .long L(SFDE2)-L(CIE) /* FDE CIE offset */ + LEN(SFDE2, CIE) /* FDE CIE offset */ .long PCREL(L(UW6)) /* Initial location */ - .long L(UW8)-L(UW6) /* Address range */ + LEN(UW8,UW6) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW7, UW6) .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ @@ -993,9 +1034,9 @@ L(EFDE2): .set L(set3),L(EFDE3)-L(SFDE3) .long L(set3) /* FDE Length */ L(SFDE3): - .long L(SFDE3)-L(CIE) /* FDE CIE offset */ + LEN(SFDE3, CIE) /* FDE CIE offset */ .long PCREL(L(UW9)) /* Initial location */ - .long L(UW11)-L(UW9) /* Address range */ + LEN(UW11, UW9) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW10, UW9) .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ @@ -1005,9 +1046,9 @@ L(EFDE3): .set L(set4),L(EFDE4)-L(SFDE4) .long L(set4) /* FDE Length */ L(SFDE4): - .long L(SFDE4)-L(CIE) /* FDE CIE offset */ + LEN(SFDE4, CIE) /* FDE CIE offset */ .long PCREL(L(UW12)) /* Initial location */ - .long L(UW20)-L(UW12) /* Address range */ + LEN(UW20, UW12) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW13, UW12) .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ @@ -1033,9 +1074,9 @@ L(EFDE4): .set L(set5),L(EFDE5)-L(SFDE5) .long L(set5) /* FDE Length */ L(SFDE5): - .long L(SFDE5)-L(CIE) /* FDE CIE offset */ + LEN(SFDE5, CIE) /* FDE CIE offset */ .long PCREL(L(UW21)) /* Initial location */ - .long L(UW23)-L(UW21) /* Address range */ + LEN(UW23, UW21) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW22, UW21) .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ @@ -1045,9 +1086,9 @@ L(EFDE5): .set L(set6),L(EFDE6)-L(SFDE6) .long L(set6) /* FDE Length */ L(SFDE6): - .long L(SFDE6)-L(CIE) /* FDE CIE offset */ + LEN(SFDE6, CIE) /* FDE CIE offset */ .long PCREL(L(UW24)) /* Initial location */ - .long L(UW26)-L(UW24) /* Address range */ + LEN(UW26, UW24) /* Address range */ .byte 0 /* Augmentation size */ .byte 0xe, 8 /* DW_CFA_def_cfa_offset */ .byte 0x80+8, 2 /* DW_CFA_offset %eip, 2*-4 */ @@ -1059,9 +1100,9 @@ L(EFDE6): .set L(set7),L(EFDE7)-L(SFDE7) .long L(set7) /* FDE Length */ L(SFDE7): - .long L(SFDE7)-L(CIE) /* FDE CIE offset */ + LEN(SFDE7, CIE) /* FDE CIE offset */ .long PCREL(L(UW27)) /* Initial location */ - .long L(UW31)-L(UW27) /* Address range */ + LEN(UW31, UW27) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW28, UW27) .byte 0xe, closure_FS+4 /* DW_CFA_def_cfa_offset */ @@ -1073,14 +1114,13 @@ L(SFDE7): #endif .balign 4 L(EFDE7): - #if !FFI_NO_RAW_API .set L(set8),L(EFDE8)-L(SFDE8) .long L(set8) /* FDE Length */ L(SFDE8): - .long L(SFDE8)-L(CIE) /* FDE CIE offset */ + LEN(SFDE8, CIE) /* FDE CIE offset */ .long PCREL(L(UW32)) /* Initial location */ - .long L(UW40)-L(UW32) /* Address range */ + LEN(UW40, UW32) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW33, UW32) .byte 0xe, raw_closure_S_FS+4 /* DW_CFA_def_cfa_offset */ @@ -1102,9 +1142,9 @@ L(EFDE8): .set L(set9),L(EFDE9)-L(SFDE9) .long L(set9) /* FDE Length */ L(SFDE9): - .long L(SFDE9)-L(CIE) /* FDE CIE offset */ + LEN(SFDE9, CIE) /* FDE CIE offset */ .long PCREL(L(UW41)) /* Initial location */ - .long L(UW52)-L(UW41) /* Address range */ + LEN(UW52, UW41) /* Address range */ .byte 0 /* Augmentation size */ ADV(UW42, UW41) .byte 0xe, 0 /* DW_CFA_def_cfa_offset */ @@ -1141,8 +1181,12 @@ L(EFDE9): @feat.00 = 1 #endif -#ifdef __APPLE__ +#if defined(__APPLE__) .subsections_via_symbols +# if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1070 && __clang__ +/* compact unwind is not used with GCC at present, was not present before 10.6 + but has some bugs there, so do not emit until 10.7. */ .section __LD,__compact_unwind,regular,debug /* compact unwind for ffi_call_i386 */ @@ -1216,6 +1260,7 @@ L(EFDE9): .long 0x04000000 /* use dwarf unwind info */ .long 0 .long 0 +#endif /* use compact unwind */ #endif /* __APPLE__ */ #endif /* ifndef _MSC_VER */ diff --git a/src/libffi/libffi-3.4.4/src/x86/sysv_intel.S b/src/libffi/libffi-3.4.6/src/x86/sysv_intel.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/sysv_intel.S rename to src/libffi/libffi-3.4.6/src/x86/sysv_intel.S diff --git a/src/libffi/libffi-3.4.4/src/x86/unix64.S b/src/libffi/libffi-3.4.6/src/x86/unix64.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/unix64.S rename to src/libffi/libffi-3.4.6/src/x86/unix64.S diff --git a/src/libffi/libffi-3.4.4/src/x86/win64.S b/src/libffi/libffi-3.4.6/src/x86/win64.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/win64.S rename to src/libffi/libffi-3.4.6/src/x86/win64.S diff --git a/src/libffi/libffi-3.4.4/src/x86/win64_intel.S b/src/libffi/libffi-3.4.6/src/x86/win64_intel.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/x86/win64_intel.S rename to src/libffi/libffi-3.4.6/src/x86/win64_intel.S diff --git a/src/libffi/libffi-3.4.4/src/xtensa/ffi.c b/src/libffi/libffi-3.4.6/src/xtensa/ffi.c similarity index 100% rename from src/libffi/libffi-3.4.4/src/xtensa/ffi.c rename to src/libffi/libffi-3.4.6/src/xtensa/ffi.c diff --git a/src/libffi/libffi-3.4.4/src/xtensa/ffitarget.h b/src/libffi/libffi-3.4.6/src/xtensa/ffitarget.h similarity index 100% rename from src/libffi/libffi-3.4.4/src/xtensa/ffitarget.h rename to src/libffi/libffi-3.4.6/src/xtensa/ffitarget.h diff --git a/src/libffi/libffi-3.4.4/src/xtensa/sysv.S b/src/libffi/libffi-3.4.6/src/xtensa/sysv.S similarity index 100% rename from src/libffi/libffi-3.4.4/src/xtensa/sysv.S rename to src/libffi/libffi-3.4.6/src/xtensa/sysv.S diff --git a/src/libffi/libffi-3.4.6/testsuite/Makefile.am b/src/libffi/libffi-3.4.6/testsuite/Makefile.am new file mode 100644 index 000000000..d286cf7f2 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/Makefile.am @@ -0,0 +1,87 @@ +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = foreign dejagnu + +EXTRA_DEJAGNU_SITE_CONFIG=../local.exp + +CLEANFILES = *.exe core* *.log *.sum + +EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \ + emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \ + emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ + lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ + libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \ + libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \ + libffi.call/align_stdcall.c libffi.call/bpo_38748.c libffi.call/call.exp \ + libffi.call/err_bad_typedef.c libffi.call/ffitest.h libffi.call/float.c \ + libffi.call/float1.c libffi.call/float2.c libffi.call/float3.c \ + libffi.call/float4.c libffi.call/float_va.c libffi.call/many.c \ + libffi.call/many2.c libffi.call/many_double.c libffi.call/many_mixed.c \ + libffi.call/negint.c libffi.call/offsets.c libffi.call/pr1172638.c \ + libffi.call/promotion.c libffi.call/pyobjc_tc.c libffi.call/return_dbl.c \ + libffi.call/return_dbl1.c libffi.call/return_dbl2.c libffi.call/return_fl.c \ + libffi.call/return_fl1.c libffi.call/return_fl2.c libffi.call/return_fl3.c \ + libffi.call/return_ldl.c libffi.call/return_ll.c libffi.call/return_ll1.c \ + libffi.call/return_sc.c libffi.call/return_sl.c libffi.call/return_uc.c \ + libffi.call/return_ul.c libffi.call/s55.c libffi.call/strlen.c \ + libffi.call/strlen2.c libffi.call/strlen3.c libffi.call/strlen4.c \ + libffi.call/struct1.c libffi.call/struct10.c libffi.call/struct2.c \ + libffi.call/struct3.c libffi.call/struct4.c libffi.call/struct5.c \ + libffi.call/struct6.c libffi.call/struct7.c libffi.call/struct8.c \ + libffi.call/struct9.c libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \ + libffi.call/struct_by_value_3f.c libffi.call/struct_by_value_4.c libffi.call/struct_by_value_4f.c \ + libffi.call/struct_by_value_big.c libffi.call/struct_by_value_small.c libffi.call/struct_return_2H.c \ + libffi.call/struct_return_8H.c libffi.call/uninitialized.c libffi.call/va_1.c \ + libffi.call/va_2.c libffi.call/va_3.c libffi.call/va_struct1.c \ + libffi.call/va_struct2.c libffi.call/va_struct3.c libffi.call/callback.c \ + libffi.call/callback2.c libffi.call/callback3.c libffi.call/callback4.c \ + libffi.closures/closure.exp libffi.closures/closure_fn0.c libffi.closures/closure_fn1.c \ + libffi.closures/closure_fn2.c libffi.closures/closure_fn3.c libffi.closures/closure_fn4.c \ + libffi.closures/closure_fn5.c libffi.closures/closure_fn6.c libffi.closures/closure_loc_fn0.c \ + libffi.closures/closure_simple.c libffi.closures/cls_12byte.c libffi.closures/cls_16byte.c \ + libffi.closures/cls_18byte.c libffi.closures/cls_19byte.c libffi.closures/cls_1_1byte.c \ + libffi.closures/cls_20byte.c libffi.closures/cls_20byte1.c libffi.closures/cls_24byte.c \ + libffi.closures/cls_2byte.c libffi.closures/cls_3_1byte.c libffi.closures/cls_3byte1.c \ + libffi.closures/cls_3byte2.c libffi.closures/cls_3float.c libffi.closures/cls_4_1byte.c \ + libffi.closures/cls_4byte.c libffi.closures/cls_5_1_byte.c libffi.closures/cls_5byte.c \ + libffi.closures/cls_64byte.c libffi.closures/cls_6_1_byte.c libffi.closures/cls_6byte.c \ + libffi.closures/cls_7_1_byte.c libffi.closures/cls_7byte.c libffi.closures/cls_8byte.c \ + libffi.closures/cls_9byte1.c libffi.closures/cls_9byte2.c libffi.closures/cls_align_double.c \ + libffi.closures/cls_align_float.c libffi.closures/cls_align_longdouble.c libffi.closures/cls_align_longdouble_split.c \ + libffi.closures/cls_align_longdouble_split2.c libffi.closures/cls_align_pointer.c libffi.closures/cls_align_sint16.c \ + libffi.closures/cls_align_sint32.c libffi.closures/cls_align_sint64.c libffi.closures/cls_align_uint16.c \ + libffi.closures/cls_align_uint32.c libffi.closures/cls_align_uint64.c libffi.closures/cls_dbls_struct.c \ + libffi.closures/cls_double.c libffi.closures/cls_double_va.c libffi.closures/cls_float.c \ + libffi.closures/cls_longdouble.c libffi.closures/cls_longdouble_va.c libffi.closures/cls_many_mixed_args.c \ + libffi.closures/cls_many_mixed_float_double.c libffi.closures/cls_multi_schar.c libffi.closures/cls_multi_sshort.c \ + libffi.closures/cls_multi_sshortchar.c libffi.closures/cls_multi_uchar.c libffi.closures/cls_multi_ushort.c \ + libffi.closures/cls_multi_ushortchar.c libffi.closures/cls_pointer.c libffi.closures/cls_pointer_stack.c \ + libffi.closures/cls_schar.c libffi.closures/cls_sint.c libffi.closures/cls_sshort.c \ + libffi.closures/cls_struct_va1.c libffi.closures/cls_uchar.c libffi.closures/cls_uint.c \ + libffi.closures/cls_uint_va.c libffi.closures/cls_ulong_va.c libffi.closures/cls_ulonglong.c \ + libffi.closures/cls_ushort.c libffi.closures/err_bad_abi.c libffi.closures/ffitest.h \ + libffi.closures/huge_struct.c libffi.closures/nested_struct.c libffi.closures/nested_struct1.c \ + libffi.closures/nested_struct10.c libffi.closures/nested_struct11.c libffi.closures/nested_struct12.c \ + libffi.closures/nested_struct13.c libffi.closures/nested_struct2.c libffi.closures/nested_struct3.c \ + libffi.closures/nested_struct4.c libffi.closures/nested_struct5.c libffi.closures/nested_struct6.c \ + libffi.closures/nested_struct7.c libffi.closures/nested_struct8.c libffi.closures/nested_struct9.c \ + libffi.closures/problem1.c libffi.closures/single_entry_structs1.c libffi.closures/single_entry_structs2.c \ + libffi.closures/single_entry_structs3.c libffi.closures/stret_large.c libffi.closures/stret_large2.c \ + libffi.closures/stret_medium.c libffi.closures/stret_medium2.c libffi.closures/testclosure.c \ + libffi.closures/unwindtest.cc libffi.closures/unwindtest_ffi_call.cc libffi.complex/cls_align_complex.inc \ + libffi.complex/cls_align_complex_double.c libffi.complex/cls_align_complex_float.c libffi.complex/cls_align_complex_longdouble.c \ + libffi.complex/cls_complex.inc libffi.complex/cls_complex_double.c libffi.complex/cls_complex_float.c \ + libffi.complex/cls_complex_longdouble.c libffi.complex/cls_complex_struct.inc libffi.complex/cls_complex_struct_double.c \ + libffi.complex/cls_complex_struct_float.c libffi.complex/cls_complex_struct_longdouble.c libffi.complex/cls_complex_va.inc \ + libffi.complex/cls_complex_va_double.c libffi.complex/cls_complex_va_float.c libffi.complex/cls_complex_va_longdouble.c \ + libffi.complex/complex.exp libffi.complex/complex.inc libffi.complex/complex_defs_double.inc \ + libffi.complex/complex_defs_float.inc libffi.complex/complex_defs_longdouble.inc libffi.complex/complex_double.c \ + libffi.complex/complex_float.c libffi.complex/complex_int.c libffi.complex/complex_longdouble.c \ + libffi.complex/ffitest.h libffi.complex/many_complex.inc libffi.complex/many_complex_double.c \ + libffi.complex/many_complex_float.c libffi.complex/many_complex_longdouble.c libffi.complex/return_complex.inc \ + libffi.complex/return_complex1.inc libffi.complex/return_complex1_double.c libffi.complex/return_complex1_float.c \ + libffi.complex/return_complex1_longdouble.c libffi.complex/return_complex2.inc libffi.complex/return_complex2_double.c \ + libffi.complex/return_complex2_float.c libffi.complex/return_complex2_longdouble.c libffi.complex/return_complex_double.c \ + libffi.complex/return_complex_float.c libffi.complex/return_complex_longdouble.c libffi.go/aa-direct.c \ + libffi.go/closure1.c libffi.go/ffitest.h libffi.go/go.exp \ + libffi.go/static-chain.h Makefile.am Makefile.in diff --git a/src/libffi/libffi-3.4.4/testsuite/Makefile.in b/src/libffi/libffi-3.4.6/testsuite/Makefile.in similarity index 68% rename from src/libffi/libffi-3.4.4/testsuite/Makefile.in rename to src/libffi/libffi-3.4.6/testsuite/Makefile.in index b3750c9e4..b99a02bf3 100644 --- a/src/libffi/libffi-3.4.4/testsuite/Makefile.in +++ b/src/libffi/libffi-3.4.6/testsuite/Makefile.in @@ -139,7 +139,6 @@ RUNTEST = runtest am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LTLDFLAGS = @AM_LTLDFLAGS@ @@ -291,131 +290,85 @@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign dejagnu EXTRA_DEJAGNU_SITE_CONFIG = ../local.exp CLEANFILES = *.exe core* *.log *.sum -EXTRA_DIST = config/default.exp lib/libffi.exp lib/target-libpath.exp \ -lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ -libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp \ -libffi.bhaible/test-call.c libffi.bhaible/test-callback.c \ -libffi.bhaible/testcases.c libffi.call/align_mixed.c \ -libffi.call/align_stdcall.c libffi.call/call.exp \ -libffi.call/err_bad_typedef.c libffi.call/ffitest.h \ -libffi.call/float.c libffi.call/float1.c libffi.call/float2.c \ -libffi.call/float3.c libffi.call/float4.c libffi.call/float_va.c \ -libffi.call/many.c libffi.call/many2.c libffi.call/many_double.c \ -libffi.call/many_mixed.c libffi.call/negint.c libffi.call/offsets.c \ -libffi.call/pr1172638.c libffi.call/promotion.c \ -libffi.call/pyobjc_tc.c libffi.call/return_dbl.c \ -libffi.call/return_dbl1.c libffi.call/return_dbl2.c \ -libffi.call/return_fl.c libffi.call/return_fl1.c \ -libffi.call/return_fl2.c libffi.call/return_fl3.c \ -libffi.call/return_ldl.c libffi.call/return_ll.c \ -libffi.call/return_ll1.c libffi.call/return_sc.c \ -libffi.call/return_sl.c libffi.call/return_uc.c \ -libffi.call/return_ul.c libffi.call/struct1.c libffi.call/struct10.c \ -libffi.call/struct2.c libffi.call/struct3.c libffi.call/struct4.c \ -libffi.call/struct5.c libffi.call/struct6.c libffi.call/struct7.c \ -libffi.call/struct8.c libffi.call/struct9.c \ -libffi.call/uninitialized.c libffi.call/va_1.c libffi.call/va_2.c \ -libffi.call/va_3.c libffi.call/va_struct1.c libffi.call/va_struct2.c \ -libffi.call/va_struct3.c libffi.call/struct_by_value_big.c \ -libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \ -libffi.call/struct_by_value_4.c libffi.call/struct_by_value_small.c \ -libffi.call/strlen2.c libffi.call/strlen3.c libffi.call/strlen4.c \ -libffi.call/strlen.c libffi.call/va_3.c \ -libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \ -libffi.call/struct_by_value_4.c libffi.closures/closure.exp \ -libffi.call/s55.c libffi.call/bpo-38748.c \ -libffi.closures/closure_fn0.c libffi.closures/closure_fn1.c \ -libffi.closures/closure_fn2.c libffi.closures/closure_fn3.c \ -libffi.closures/closure_fn4.c libffi.closures/closure_fn5.c \ -libffi.closures/closure_fn6.c libffi.closures/closure_loc_fn0.c \ -libffi.closures/closure_simple.c libffi.closures/cls_12byte.c \ -libffi.closures/cls_16byte.c libffi.closures/cls_18byte.c \ -libffi.closures/cls_19byte.c libffi.closures/cls_1_1byte.c \ -libffi.closures/cls_20byte.c libffi.closures/cls_20byte1.c \ -libffi.closures/cls_24byte.c libffi.closures/cls_2byte.c \ -libffi.closures/cls_3_1byte.c libffi.closures/cls_3byte1.c \ -libffi.closures/cls_3byte2.c libffi.closures/cls_3float.c \ -libffi.closures/cls_4_1byte.c libffi.closures/cls_4byte.c \ -libffi.closures/cls_5_1_byte.c libffi.closures/cls_5byte.c \ -libffi.closures/cls_64byte.c libffi.closures/cls_6_1_byte.c \ -libffi.closures/cls_6byte.c libffi.closures/cls_7_1_byte.c \ -libffi.closures/cls_7byte.c libffi.closures/cls_8byte.c \ -libffi.closures/cls_9byte1.c libffi.closures/cls_9byte2.c \ -libffi.closures/cls_align_double.c libffi.closures/cls_align_float.c \ -libffi.closures/cls_align_longdouble.c \ -libffi.closures/cls_align_pointer.c \ -libffi.closures/cls_align_sint16.c libffi.closures/cls_align_sint32.c \ -libffi.closures/cls_align_sint64.c libffi.closures/cls_align_uint16.c \ -libffi.closures/cls_align_uint32.c libffi.closures/cls_align_uint64.c \ -libffi.closures/cls_dbls_struct.c libffi.closures/cls_double.c \ -libffi.closures/cls_double_va.c libffi.closures/cls_float.c \ -libffi.closures/cls_longdouble_va.c \ -libffi.closures/cls_many_mixed_args.c \ -libffi.closures/cls_many_mixed_float_double.c \ -libffi.closures/cls_multi_schar.c libffi.closures/cls_multi_sshort.c \ -libffi.closures/cls_multi_sshortchar.c \ -libffi.closures/cls_multi_uchar.c libffi.closures/cls_multi_ushort.c \ -libffi.closures/cls_multi_ushortchar.c libffi.closures/cls_pointer.c \ -libffi.closures/cls_pointer_stack.c libffi.closures/cls_schar.c \ -libffi.closures/cls_sint.c libffi.closures/cls_sshort.c \ -libffi.closures/cls_struct_va1.c libffi.closures/cls_uchar.c \ -libffi.closures/cls_uint.c libffi.closures/cls_uint_va.c \ -libffi.closures/cls_ulong_va.c libffi.closures/cls_ulonglong.c \ -libffi.closures/cls_ushort.c libffi.closures/err_bad_abi.c \ -libffi.closures/ffitest.h libffi.closures/nested_struct.c \ -libffi.closures/nested_struct1.c libffi.closures/nested_struct10.c \ -libffi.closures/nested_struct11.c libffi.closures/nested_struct12.c \ -libffi.closures/nested_struct13.c libffi.closures/nested_struct2.c \ -libffi.closures/nested_struct3.c libffi.closures/nested_struct4.c \ -libffi.closures/nested_struct5.c libffi.closures/nested_struct6.c \ -libffi.closures/nested_struct7.c libffi.closures/nested_struct8.c \ -libffi.closures/nested_struct9.c libffi.closures/problem1.c \ -libffi.closures/single_entry_structs1.c \ -libffi.closures/single_entry_structs2.c \ -libffi.closures/single_entry_structs3.c libffi.closures/stret_large.c \ -libffi.closures/stret_large2.c libffi.closures/stret_medium.c \ -libffi.closures/stret_medium2.c libffi.closures/testclosure.c \ -libffi.closures/unwindtest.cc libffi.closures/unwindtest_ffi_call.cc \ -libffi.closures/cls_align_longdouble_split.c \ -libffi.closures/cls_align_longdouble_split2.c \ -libffi.closures/cls_longdouble.c libffi.closures/huge_struct.c \ -libffi.complex/cls_align_complex.inc \ -libffi.complex/cls_align_complex_double.c \ -libffi.complex/cls_align_complex_float.c \ -libffi.complex/cls_align_complex_longdouble.c \ -libffi.complex/cls_complex.inc libffi.complex/cls_complex_double.c \ -libffi.complex/cls_complex_float.c \ -libffi.complex/cls_complex_longdouble.c \ -libffi.complex/cls_complex_struct.inc \ -libffi.complex/cls_complex_struct_double.c \ -libffi.complex/cls_complex_struct_float.c \ -libffi.complex/cls_complex_struct_longdouble.c \ -libffi.complex/cls_complex_va.inc \ -libffi.complex/cls_complex_va_double.c \ -libffi.complex/cls_complex_va_float.c \ -libffi.complex/cls_complex_va_longdouble.c libffi.complex/complex.exp \ -libffi.complex/complex.inc libffi.complex/complex_defs_double.inc \ -libffi.complex/complex_defs_float.inc \ -libffi.complex/complex_defs_longdouble.inc \ -libffi.complex/complex_double.c libffi.complex/complex_float.c \ -libffi.complex/complex_int.c libffi.complex/complex_longdouble.c \ -libffi.complex/ffitest.h libffi.complex/many_complex.inc \ -libffi.complex/many_complex_double.c \ -libffi.complex/many_complex_float.c \ -libffi.complex/many_complex_longdouble.c \ -libffi.complex/return_complex.inc libffi.complex/return_complex1.inc \ -libffi.complex/return_complex1_double.c \ -libffi.complex/return_complex1_float.c \ -libffi.complex/return_complex1_longdouble.c \ -libffi.complex/return_complex2.inc \ -libffi.complex/return_complex2_double.c \ -libffi.complex/return_complex2_float.c \ -libffi.complex/return_complex2_longdouble.c \ -libffi.complex/return_complex_double.c \ -libffi.complex/return_complex_float.c \ -libffi.complex/return_complex_longdouble.c libffi.go/aa-direct.c \ -libffi.go/closure1.c libffi.go/ffitest.h libffi.go/go.exp \ -libffi.go/static-chain.h +EXTRA_DIST = config/default.exp emscripten/build.sh emscripten/conftest.py \ + emscripten/node-tests.sh emscripten/test.html emscripten/test_libffi.py \ + emscripten/build-tests.sh lib/libffi.exp lib/target-libpath.exp \ + lib/wrapper.exp libffi.bhaible/Makefile libffi.bhaible/README \ + libffi.bhaible/alignof.h libffi.bhaible/bhaible.exp libffi.bhaible/test-call.c \ + libffi.bhaible/test-callback.c libffi.bhaible/testcases.c libffi.call/align_mixed.c \ + libffi.call/align_stdcall.c libffi.call/bpo_38748.c libffi.call/call.exp \ + libffi.call/err_bad_typedef.c libffi.call/ffitest.h libffi.call/float.c \ + libffi.call/float1.c libffi.call/float2.c libffi.call/float3.c \ + libffi.call/float4.c libffi.call/float_va.c libffi.call/many.c \ + libffi.call/many2.c libffi.call/many_double.c libffi.call/many_mixed.c \ + libffi.call/negint.c libffi.call/offsets.c libffi.call/pr1172638.c \ + libffi.call/promotion.c libffi.call/pyobjc_tc.c libffi.call/return_dbl.c \ + libffi.call/return_dbl1.c libffi.call/return_dbl2.c libffi.call/return_fl.c \ + libffi.call/return_fl1.c libffi.call/return_fl2.c libffi.call/return_fl3.c \ + libffi.call/return_ldl.c libffi.call/return_ll.c libffi.call/return_ll1.c \ + libffi.call/return_sc.c libffi.call/return_sl.c libffi.call/return_uc.c \ + libffi.call/return_ul.c libffi.call/s55.c libffi.call/strlen.c \ + libffi.call/strlen2.c libffi.call/strlen3.c libffi.call/strlen4.c \ + libffi.call/struct1.c libffi.call/struct10.c libffi.call/struct2.c \ + libffi.call/struct3.c libffi.call/struct4.c libffi.call/struct5.c \ + libffi.call/struct6.c libffi.call/struct7.c libffi.call/struct8.c \ + libffi.call/struct9.c libffi.call/struct_by_value_2.c libffi.call/struct_by_value_3.c \ + libffi.call/struct_by_value_3f.c libffi.call/struct_by_value_4.c libffi.call/struct_by_value_4f.c \ + libffi.call/struct_by_value_big.c libffi.call/struct_by_value_small.c libffi.call/struct_return_2H.c \ + libffi.call/struct_return_8H.c libffi.call/uninitialized.c libffi.call/va_1.c \ + libffi.call/va_2.c libffi.call/va_3.c libffi.call/va_struct1.c \ + libffi.call/va_struct2.c libffi.call/va_struct3.c libffi.call/callback.c \ + libffi.call/callback2.c libffi.call/callback3.c libffi.call/callback4.c \ + libffi.closures/closure.exp libffi.closures/closure_fn0.c libffi.closures/closure_fn1.c \ + libffi.closures/closure_fn2.c libffi.closures/closure_fn3.c libffi.closures/closure_fn4.c \ + libffi.closures/closure_fn5.c libffi.closures/closure_fn6.c libffi.closures/closure_loc_fn0.c \ + libffi.closures/closure_simple.c libffi.closures/cls_12byte.c libffi.closures/cls_16byte.c \ + libffi.closures/cls_18byte.c libffi.closures/cls_19byte.c libffi.closures/cls_1_1byte.c \ + libffi.closures/cls_20byte.c libffi.closures/cls_20byte1.c libffi.closures/cls_24byte.c \ + libffi.closures/cls_2byte.c libffi.closures/cls_3_1byte.c libffi.closures/cls_3byte1.c \ + libffi.closures/cls_3byte2.c libffi.closures/cls_3float.c libffi.closures/cls_4_1byte.c \ + libffi.closures/cls_4byte.c libffi.closures/cls_5_1_byte.c libffi.closures/cls_5byte.c \ + libffi.closures/cls_64byte.c libffi.closures/cls_6_1_byte.c libffi.closures/cls_6byte.c \ + libffi.closures/cls_7_1_byte.c libffi.closures/cls_7byte.c libffi.closures/cls_8byte.c \ + libffi.closures/cls_9byte1.c libffi.closures/cls_9byte2.c libffi.closures/cls_align_double.c \ + libffi.closures/cls_align_float.c libffi.closures/cls_align_longdouble.c libffi.closures/cls_align_longdouble_split.c \ + libffi.closures/cls_align_longdouble_split2.c libffi.closures/cls_align_pointer.c libffi.closures/cls_align_sint16.c \ + libffi.closures/cls_align_sint32.c libffi.closures/cls_align_sint64.c libffi.closures/cls_align_uint16.c \ + libffi.closures/cls_align_uint32.c libffi.closures/cls_align_uint64.c libffi.closures/cls_dbls_struct.c \ + libffi.closures/cls_double.c libffi.closures/cls_double_va.c libffi.closures/cls_float.c \ + libffi.closures/cls_longdouble.c libffi.closures/cls_longdouble_va.c libffi.closures/cls_many_mixed_args.c \ + libffi.closures/cls_many_mixed_float_double.c libffi.closures/cls_multi_schar.c libffi.closures/cls_multi_sshort.c \ + libffi.closures/cls_multi_sshortchar.c libffi.closures/cls_multi_uchar.c libffi.closures/cls_multi_ushort.c \ + libffi.closures/cls_multi_ushortchar.c libffi.closures/cls_pointer.c libffi.closures/cls_pointer_stack.c \ + libffi.closures/cls_schar.c libffi.closures/cls_sint.c libffi.closures/cls_sshort.c \ + libffi.closures/cls_struct_va1.c libffi.closures/cls_uchar.c libffi.closures/cls_uint.c \ + libffi.closures/cls_uint_va.c libffi.closures/cls_ulong_va.c libffi.closures/cls_ulonglong.c \ + libffi.closures/cls_ushort.c libffi.closures/err_bad_abi.c libffi.closures/ffitest.h \ + libffi.closures/huge_struct.c libffi.closures/nested_struct.c libffi.closures/nested_struct1.c \ + libffi.closures/nested_struct10.c libffi.closures/nested_struct11.c libffi.closures/nested_struct12.c \ + libffi.closures/nested_struct13.c libffi.closures/nested_struct2.c libffi.closures/nested_struct3.c \ + libffi.closures/nested_struct4.c libffi.closures/nested_struct5.c libffi.closures/nested_struct6.c \ + libffi.closures/nested_struct7.c libffi.closures/nested_struct8.c libffi.closures/nested_struct9.c \ + libffi.closures/problem1.c libffi.closures/single_entry_structs1.c libffi.closures/single_entry_structs2.c \ + libffi.closures/single_entry_structs3.c libffi.closures/stret_large.c libffi.closures/stret_large2.c \ + libffi.closures/stret_medium.c libffi.closures/stret_medium2.c libffi.closures/testclosure.c \ + libffi.closures/unwindtest.cc libffi.closures/unwindtest_ffi_call.cc libffi.complex/cls_align_complex.inc \ + libffi.complex/cls_align_complex_double.c libffi.complex/cls_align_complex_float.c libffi.complex/cls_align_complex_longdouble.c \ + libffi.complex/cls_complex.inc libffi.complex/cls_complex_double.c libffi.complex/cls_complex_float.c \ + libffi.complex/cls_complex_longdouble.c libffi.complex/cls_complex_struct.inc libffi.complex/cls_complex_struct_double.c \ + libffi.complex/cls_complex_struct_float.c libffi.complex/cls_complex_struct_longdouble.c libffi.complex/cls_complex_va.inc \ + libffi.complex/cls_complex_va_double.c libffi.complex/cls_complex_va_float.c libffi.complex/cls_complex_va_longdouble.c \ + libffi.complex/complex.exp libffi.complex/complex.inc libffi.complex/complex_defs_double.inc \ + libffi.complex/complex_defs_float.inc libffi.complex/complex_defs_longdouble.inc libffi.complex/complex_double.c \ + libffi.complex/complex_float.c libffi.complex/complex_int.c libffi.complex/complex_longdouble.c \ + libffi.complex/ffitest.h libffi.complex/many_complex.inc libffi.complex/many_complex_double.c \ + libffi.complex/many_complex_float.c libffi.complex/many_complex_longdouble.c libffi.complex/return_complex.inc \ + libffi.complex/return_complex1.inc libffi.complex/return_complex1_double.c libffi.complex/return_complex1_float.c \ + libffi.complex/return_complex1_longdouble.c libffi.complex/return_complex2.inc libffi.complex/return_complex2_double.c \ + libffi.complex/return_complex2_float.c libffi.complex/return_complex2_longdouble.c libffi.complex/return_complex_double.c \ + libffi.complex/return_complex_float.c libffi.complex/return_complex_longdouble.c libffi.go/aa-direct.c \ + libffi.go/closure1.c libffi.go/ffitest.h libffi.go/go.exp \ + libffi.go/static-chain.h Makefile.am Makefile.in all: all-am diff --git a/src/libffi/libffi-3.4.4/testsuite/config/default.exp b/src/libffi/libffi-3.4.6/testsuite/config/default.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/config/default.exp rename to src/libffi/libffi-3.4.6/testsuite/config/default.exp diff --git a/src/libffi/libffi-3.4.6/testsuite/emscripten/build-tests.sh b/src/libffi/libffi-3.4.6/testsuite/emscripten/build-tests.sh new file mode 100755 index 000000000..7c430601b --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/emscripten/build-tests.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +emcc_exists="$(command -v emcc)" +if [ ! "${emcc_exists}" ]; then + echo "Emscripten not on path" + exit 1 +fi + +set -e + +cd "$1" +shift + +# Parse arguments +while [ $# -gt 0 ]; do + case $1 in + --wasm-bigint) WASM_BIGINT=true ;; + *) + echo "ERROR: Unknown parameter: $1" >&2 + exit 1 + ;; + esac + shift +done + + +export CFLAGS="-fPIC -O2 -I../../target/include $EXTRA_CFLAGS" +export CXXFLAGS="$CFLAGS -sNO_DISABLE_EXCEPTION_CATCHING $EXTRA_CXXFLAGS" +export LDFLAGS=" \ + -L../../target/lib/ -lffi \ + -sEXPORT_ALL \ + -sMODULARIZE \ + -sMAIN_MODULE \ + -sNO_DISABLE_EXCEPTION_CATCHING \ + $EXTRA_LD_FLAGS \ +" + +# This needs to test false if there exists an environment variable called +# WASM_BIGINT whose contents are empty. Don't use +x. +if [ -n "${WASM_BIGINT}" ] ; then + export LDFLAGS+=" -sWASM_BIGINT" +else + export LDFLAGS+=" -sEXPORTED_RUNTIME_METHODS='getTempRet0,setTempRet0'" +fi + +# Rename main functions to test__filename so we can link them together +ls *c | sed 's!\(.*\)\.c!sed -i "s/main/test__\1/g" \0!g' | bash + +# Compile +ls *.c | sed 's/\(.*\)\.c/emcc $CFLAGS -c \1.c -o \1.o /g' | bash +ls *.cc | sed 's/\(.*\)\.cc/em++ $CXXFLAGS -c \1.cc -o \1.o /g' | bash + +# Link +em++ $LDFLAGS *.o -o test.js +cp ../emscripten/test.html . diff --git a/src/libffi/libffi-3.4.6/testsuite/emscripten/build.sh b/src/libffi/libffi-3.4.6/testsuite/emscripten/build.sh new file mode 100755 index 000000000..c77c041b3 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/emscripten/build.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +command -v emcc >/dev/null 2>&1 || { + echo >&2 "emsdk could not be found. Aborting." + exit 1 +} + +set -e + +SOURCE_DIR=$PWD + +# Working directories +TARGET=$SOURCE_DIR/target +mkdir -p "$TARGET" + +# Define default arguments + +# JS BigInt to Wasm i64 integration, disabled by default +# This needs to test false if there exists an environment variable called +# WASM_BIGINT whose contents are empty. Don't use +x. +if [ -n "${WASM_BIGINT}" ]; then + WASM_BIGINT=true +else + WASM_BIGINT=false +fi + +# Parse arguments +while [ $# -gt 0 ]; do + case $1 in + --wasm-bigint) WASM_BIGINT=true ;; + --debug) DEBUG=true ;; + *) + echo "ERROR: Unknown parameter: $1" >&2 + exit 1 + ;; + esac + shift +done + +# Common compiler flags +export CFLAGS="-O3 -fPIC" +if [ "$WASM_BIGINT" = "true" ]; then + # We need to detect WASM_BIGINT support at compile time + export CFLAGS+=" -DWASM_BIGINT" +fi +if [ "$DEBUG" = "true" ]; then + export CFLAGS+=" -DDEBUG_F" +fi +export CXXFLAGS="$CFLAGS" + +# Build paths +export CPATH="$TARGET/include" +export PKG_CONFIG_PATH="$TARGET/lib/pkgconfig" +export EM_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" + +# Specific variables for cross-compilation +export CHOST="wasm32-unknown-linux" # wasm32-unknown-emscripten + +autoreconf -fiv +emconfigure ./configure --host=$CHOST --prefix="$TARGET" --enable-static --disable-shared --disable-dependency-tracking \ + --disable-builddir --disable-multi-os-directory --disable-raw-api --disable-docs +make install +cp fficonfig.h target/include/ +cp include/ffi_common.h target/include/ diff --git a/src/libffi/libffi-3.4.6/testsuite/emscripten/conftest.py b/src/libffi/libffi-3.4.6/testsuite/emscripten/conftest.py new file mode 100644 index 000000000..b2e36dd5a --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/emscripten/conftest.py @@ -0,0 +1,86 @@ +from pathlib import Path +from pytest import fixture +from pytest_pyodide.server import spawn_web_server +from pytest_pyodide import runner + +import logging + +TEST_PATH = Path(__file__).parents[1].resolve() + + +class BaseRunner(runner._BrowserBaseRunner): + def __init__( + self, + *args, + test_dir, + **kwargs, + ): + self.test_dir = test_dir + super().__init__( + *args, + **kwargs, + load_pyodide=False, + ) + + def prepare_driver(self): + self.base_url = ( + f"http://{self.server_hostname}:{self.server_port}/{self.test_dir}/" + ) + self.goto(f"{self.base_url}/test.html") + + def javascript_setup(self): + self.run_js("globalThis.TestModule = await globalThis.Module();") + + +class FirefoxRunner(BaseRunner, runner.SeleniumFirefoxRunner): + pass + + +class ChromeRunner(BaseRunner, runner.SeleniumChromeRunner): + pass + + +# TODO: Figure out how to get NodeRunner to work. + +RUNNER_DICT = {x.browser: x for x in [FirefoxRunner, ChromeRunner]} + + +@fixture(params=list(RUNNER_DICT), scope="class") +def selenium_class_scope(request, web_server_main): + server_hostname, server_port, server_log = web_server_main + assert request.param in RUNNER_DICT + + logger = logging.getLogger('selenium') + logger.setLevel(logging.DEBUG) + + cls = RUNNER_DICT[request.param] + selenium = cls( + test_dir=request.cls.TEST_BUILD_DIR, + server_port=server_port, + server_hostname=server_hostname, + server_log=server_log, + ) + request.cls.call_number = 0 + try: + yield selenium + finally: + print(selenium.logs) + selenium.driver.quit() + + +@fixture(scope="function") +def selenium(selenium_class_scope, request): + selenium = selenium_class_scope + request.cls.call_number += 1 + # Refresh page every 50 calls to prevent firefox out of memory errors + if request.cls.call_number % 50 == 0: + selenium.driver.refresh() + selenium.javascript_setup() + selenium.clean_logs() + yield selenium + + +@fixture(scope="session") +def web_server_main(request): + with spawn_web_server(TEST_PATH) as output: + yield output diff --git a/src/libffi/libffi-3.4.6/testsuite/emscripten/node-tests.sh b/src/libffi/libffi-3.4.6/testsuite/emscripten/node-tests.sh new file mode 100755 index 000000000..88dd74b3b --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/emscripten/node-tests.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# JS BigInt to Wasm i64 integration, disabled by default +WASM_BIGINT=false + +emcc_exists="$(command -v emcc)" +if [ ! "${emcc_exists}" ]; then + echo "Emscripten not on path" + exit 1 +fi + +# Parse arguments +while [ $# -gt 0 ]; do + case $1 in + --wasm-bigint) WASM_BIGINT=true ;; + *) + echo "ERROR: Unknown parameter: $1" >&2 + exit 1 + ;; + esac + shift +done + +# Common compiler flags +export CFLAGS="-fPIC $EXTRA_CFLAGS" +if [ "$WASM_BIGINT" = "true" ]; then + # We need to detect WASM_BIGINT support at compile time + export CFLAGS+=" -DWASM_BIGINT" +fi +export CXXFLAGS="$CFLAGS -sNO_DISABLE_EXCEPTION_CATCHING $EXTRA_CXXFLAGS" +export LDFLAGS="-sEXPORTED_FUNCTIONS=_main,_malloc,_free -sALLOW_TABLE_GROWTH -sASSERTIONS -sNO_DISABLE_EXCEPTION_CATCHING" +if [ "$WASM_BIGINT" = "true" ]; then + export LDFLAGS+=" -sWASM_BIGINT" +else + export LDFLAGS+=" -sEXPORTED_RUNTIME_METHODS='getTempRet0,setTempRet0'" +fi + +# Specific variables for cross-compilation +export CHOST="wasm32-unknown-linux" # wasm32-unknown-emscripten + +autoreconf -fiv +emconfigure ./configure --prefix="$(pwd)/target" --host=$CHOST --enable-static --disable-shared \ + --disable-builddir --disable-multi-os-directory --disable-raw-api --disable-docs || + (cat config.log && exit 1) +make + +EMMAKEN_JUST_CONFIGURE=1 emmake make check \ + RUNTESTFLAGS="LDFLAGS_FOR_TARGET='$LDFLAGS'" || (cat testsuite/libffi.log && exit 1) diff --git a/src/libffi/libffi-3.4.6/testsuite/emscripten/test.html b/src/libffi/libffi-3.4.6/testsuite/emscripten/test.html new file mode 100644 index 000000000..770150385 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/emscripten/test.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/libffi/libffi-3.4.6/testsuite/emscripten/test_libffi.py b/src/libffi/libffi-3.4.6/testsuite/emscripten/test_libffi.py new file mode 100644 index 000000000..059d53565 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/emscripten/test_libffi.py @@ -0,0 +1,51 @@ +import subprocess +import pathlib +import pytest + +TEST_PATH = pathlib.Path(__file__).parents[1].resolve() + +xfails = {} + + +def libffi_tests(self, selenium, libffi_test): + if libffi_test in xfails: + pytest.xfail(f'known failure with code "{xfails[libffi_test]}"') + res = selenium.run_js( + """ + window.TestModule = await Module(); + """ + ) + selenium.run_js( + f""" + try {{ + TestModule._test__{libffi_test}(); + }} catch(e){{ + if(e.name !== "ExitStatus"){{ + throw e; + }} + if(e.status !== 0){{ + throw new Error(`Terminated with nonzero status code ${{e.status}}: ` + e.message); + }} + }} + """ + ) + + +class TestCall: + TEST_BUILD_DIR = "libffi.call.test" + test_call = libffi_tests + + +class TestClosures: + TEST_BUILD_DIR = "libffi.closures.test" + test_closures = libffi_tests + + +def pytest_generate_tests(metafunc): + test_build_dir = metafunc.cls.TEST_BUILD_DIR + test_names = [x.stem for x in (TEST_PATH / test_build_dir).glob("*.o")] + metafunc.parametrize("libffi_test", test_names) + + +if __name__ == "__main__": + subprocess.call(["build-tests.sh", "libffi.call"]) diff --git a/src/libffi/libffi-3.4.4/testsuite/lib/libffi.exp b/src/libffi/libffi-3.4.6/testsuite/lib/libffi.exp similarity index 96% rename from src/libffi/libffi-3.4.4/testsuite/lib/libffi.exp rename to src/libffi/libffi-3.4.6/testsuite/lib/libffi.exp index 7457af415..b5731dbc9 100644 --- a/src/libffi/libffi-3.4.4/testsuite/lib/libffi.exp +++ b/src/libffi/libffi-3.4.6/testsuite/lib/libffi.exp @@ -221,6 +221,13 @@ proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { set output_match [lreplace $output_match 1 1 $x] } + if { [ istarget "wasm32-*-*" ] } { + # emscripten will get confused if told to build as .exe + set exec_suffix "" + } else { + set exec_suffix ".exe" + } + # Set up the compiler flags, based on what we're going to do. set options [list] @@ -231,7 +238,7 @@ proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { } "link" { set compile_type "executable" - set output_file "[file rootname [file tail $prog]].exe" + set output_file "[file rootname [file tail $prog]]$exec_suffix" # The following line is needed for targets like the i960 where # the default output file is b.out. Sigh. } @@ -240,7 +247,7 @@ proc libffi-dg-test-1 { target_compile prog do_what extra_tool_flags } { # FIXME: "./" is to cope with "." not being in $PATH. # Should this be handled elsewhere? # YES. - set output_file "./[file rootname [file tail $prog]].exe" + set output_file "./[file rootname [file tail $prog]]$exec_suffix" # This is the only place where we care if an executable was # created or not. If it was, dg.exp will try to run it. remote_file build delete $output_file; @@ -271,6 +278,8 @@ proc libffi-dg-prune { target_triplet text } { regsub -all "(^|\n)\[^\n\]*unable to perform all requested operations" $text "" text # We get this from sparc64 linux systems regsub -all "(^|\n)\[^\n\]*warning: .* has a LOAD segment with RWX permissions" $text "" text + # Ignore Emscripten INFO messages + regsub -all "(^|\n)(cache|shared):INFO:\[^\n\]*" $text "" text return $text } @@ -380,6 +389,7 @@ proc libffi_target_compile { source dest type options } { || [istarget "*-*-darwin2*"] } { # lappend options "additional_flags=-Wl,-allow_stack_execute" lappend options "additional_flags=-Wno-unused-command-line-argument" + lappend options "additional_flags=-Wl,-search_paths_first" } # If you're building the compiler with --prefix set to a place @@ -416,6 +426,12 @@ proc libffi_target_compile { source dest type options } { } } + # emscripten emits this warning while building the feature test + # which causes it to be seen as unsupported. + if { [string match "wasm32-*" $target_triplet] } { + lappend options "additional_flags=-Wno-unused-command-line-argument" + } + verbose "options: $options" return [target_compile $source $dest $type $options] } diff --git a/src/libffi/libffi-3.4.4/testsuite/lib/target-libpath.exp b/src/libffi/libffi-3.4.6/testsuite/lib/target-libpath.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/lib/target-libpath.exp rename to src/libffi/libffi-3.4.6/testsuite/lib/target-libpath.exp diff --git a/src/libffi/libffi-3.4.4/testsuite/lib/wrapper.exp b/src/libffi/libffi-3.4.6/testsuite/lib/wrapper.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/lib/wrapper.exp rename to src/libffi/libffi-3.4.6/testsuite/lib/wrapper.exp diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/Makefile b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/Makefile similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/Makefile rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/Makefile diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/README b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/README similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/README rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/README diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/alignof.h b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/alignof.h similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/alignof.h rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/alignof.h diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/bhaible.exp b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/bhaible.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/bhaible.exp rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/bhaible.exp diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/test-call.c b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/test-call.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/test-call.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/test-call.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/test-callback.c b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/test-callback.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/test-callback.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/test-callback.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/testcases.c b/src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/testcases.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.bhaible/testcases.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.bhaible/testcases.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/align_mixed.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/align_mixed.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/align_mixed.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/align_mixed.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/align_stdcall.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/align_stdcall.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/align_stdcall.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/align_stdcall.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/bpo-38748.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/bpo_38748.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/bpo-38748.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/bpo_38748.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/call.exp b/src/libffi/libffi-3.4.6/testsuite/libffi.call/call.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/call.exp rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/call.exp diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback.c new file mode 100644 index 000000000..ac45c62a6 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback.c @@ -0,0 +1,99 @@ +/* Area: ffi_call + Purpose: Check structures with array and callback. + Limitations: none. + PR: none. + Originator: David Tenty */ + +/* { dg-do run } */ +#include "ffitest.h" + +int i=5; + +void callback(void) { i++; } + +typedef struct +{ + unsigned char c1; + double s[2]; + unsigned char c2; +} test_structure_12; + +static test_structure_12 ABI_ATTR struct12 (test_structure_12 ts, void (*func)(void)) +{ + ts.c1 += 1; + ts.c2 += 1; + ts.s[0] += 1; + ts.s[1] += 1; + + func(); + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts12_type,ts12a_type; + ffi_type *ts12_type_elements[4]; + ffi_type *ts12a_type_elements[3]; + + test_structure_12 ts12_arg; + void (*ptr)(void)=&callback; + + test_structure_12 *ts12_result = + (test_structure_12 *) malloc (sizeof(test_structure_12)); + + ts12a_type.size = 0; + ts12a_type.alignment = 0; + ts12a_type.type = FFI_TYPE_STRUCT; + ts12a_type.elements = ts12a_type_elements; + ts12a_type_elements[0] = &ffi_type_double; + ts12a_type_elements[1] = &ffi_type_double; + ts12a_type_elements[2] = NULL; + + ts12_type.size = 0; + ts12_type.alignment = 0; + ts12_type.type = FFI_TYPE_STRUCT; + ts12_type.elements = ts12_type_elements; + ts12_type_elements[0] = &ffi_type_uchar; + ts12_type_elements[1] = &ts12a_type; + ts12_type_elements[2] = &ffi_type_uchar; + ts12_type_elements[3] = NULL; + + + args[0] = &ts12_type; + args[1] = &ffi_type_pointer; + values[0] = &ts12_arg; + values[1] = &ptr; + + CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts12_type, args) == FFI_OK); + + ts12_arg.c1 = 5; + ts12_arg.c2 = 6; + ts12_arg.s[0] = 7.77; + ts12_arg.s[1] = 8.88; + + printf ("%u\n", ts12_arg.c1); + printf ("%u\n", ts12_arg.c2); + printf ("%g\n", ts12_arg.s[0]); + printf ("%g\n", ts12_arg.s[1]); + printf ("%d\n", i); + + ffi_call(&cif, FFI_FN(struct12), ts12_result, values); + + printf ("%u\n", ts12_result->c1); + printf ("%u\n", ts12_result->c2); + printf ("%g\n", ts12_result->s[0]); + printf ("%g\n", ts12_result->s[1]); + printf ("%d\n", i); + CHECK(ts12_result->c1 == 5 + 1); + CHECK(ts12_result->c2 == 6 + 1); + CHECK(ts12_result->s[0] == 7.77 + 1); + CHECK(ts12_result->s[1] == 8.88 + 1); + CHECK(i == 5 + 1); + CHECK(ts12_type.size == sizeof(test_structure_12)); + + free (ts12_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback2.c new file mode 100644 index 000000000..53a3b2fd3 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback2.c @@ -0,0 +1,108 @@ +/* Area: ffi_call + Purpose: Check structures with nested array and callback. + Limitations: none. + PR: none. + Originator: David Tenty */ + +/* { dg-do run } */ +#include "ffitest.h" + +int i=5; + +void callback(void) { i++; } + +typedef struct +{ + struct { double d; } s1; + double s[2]; + unsigned char c2; +} test_structure_12; + +static test_structure_12 ABI_ATTR struct12 (test_structure_12 ts, void (*func)(void)) +{ + ts.s1.d += 1; + ts.c2 += 1; + ts.s[0] += 1; + ts.s[1] += 1; + + func(); + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts12_type,ts12a_type, ts12b_type; + ffi_type *ts12_type_elements[4]; + ffi_type *ts12a_type_elements[2]; + ffi_type *ts12b_type_elements[3]; + + + test_structure_12 ts12_arg; + void (*ptr)(void)=&callback; + + test_structure_12 *ts12_result = + (test_structure_12 *) malloc (sizeof(test_structure_12)); + + ts12a_type.size = 0; + ts12a_type.alignment = 0; + ts12a_type.type = FFI_TYPE_STRUCT; + ts12a_type.elements = ts12a_type_elements; + ts12a_type_elements[0] = &ffi_type_double; + ts12a_type_elements[1] = NULL; + + ts12b_type.size = 0; + ts12b_type.alignment = 0; + ts12b_type.type = FFI_TYPE_STRUCT; + ts12b_type.elements = ts12b_type_elements; + ts12b_type_elements[0] = &ffi_type_double; + ts12b_type_elements[1] = &ffi_type_double; + ts12b_type_elements[2] = NULL; + + ts12_type.size = 0; + ts12_type.alignment = 0; + ts12_type.type = FFI_TYPE_STRUCT; + ts12_type.elements = ts12_type_elements; + ts12_type_elements[0] = &ts12a_type; + ts12_type_elements[1] = &ts12b_type; + ts12_type_elements[2] = &ffi_type_uchar; + ts12_type_elements[3] = NULL; + + + args[0] = &ts12_type; + args[1] = &ffi_type_pointer; + values[0] = &ts12_arg; + values[1] = &ptr; + + CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts12_type, args) == FFI_OK); + + ts12_arg.s1.d = 5.55; + ts12_arg.c2 = 6; + ts12_arg.s[0] = 7.77; + ts12_arg.s[1] = 8.88; + + printf ("%g\n", ts12_arg.s1.d); + printf ("%u\n", ts12_arg.c2); + printf ("%g\n", ts12_arg.s[0]); + printf ("%g\n", ts12_arg.s[1]); + printf ("%d\n", i); + + ffi_call(&cif, FFI_FN(struct12), ts12_result, values); + + printf ("%g\n", ts12_result->s1.d); + printf ("%u\n", ts12_result->c2); + printf ("%g\n", ts12_result->s[0]); + printf ("%g\n", ts12_result->s[1]); + printf ("%d\n", i); + CHECK(ts12_result->s1.d == 5.55 + 1); + CHECK(ts12_result->c2 == 6 + 1); + CHECK(ts12_result->s[0] == 7.77 + 1); + CHECK(ts12_result->s[1] == 8.88 + 1); + CHECK(i == 5 + 1); + CHECK(ts12_type.size == sizeof(test_structure_12)); + + free (ts12_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback3.c new file mode 100644 index 000000000..4a2fd978f --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback3.c @@ -0,0 +1,114 @@ +/* Area: ffi_call + Purpose: Check structures with array and callback. + Limitations: none. + PR: none. + Originator: David Tenty */ + +/* { dg-do run } */ +#include "ffitest.h" + +int i=5; + +void callback(void) { i++; } + + +typedef struct +{ + struct { unsigned char c; double d; } s1; + double s[2]; + unsigned char c2; +} test_structure_12; + +static test_structure_12 ABI_ATTR struct12 (test_structure_12 ts, void (*func)(void)) +{ + ts.s1.c += 1; + ts.s1.d += 1; + ts.c2 += 1; + ts.s[0] += 1; + ts.s[1] += 1; + + func(); + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts12_type,ts12b_type, ts12a_type; + ffi_type *ts12_type_elements[4]; + ffi_type *ts12b_type_elements[3]; + ffi_type *ts12a_type_elements[3]; + + test_structure_12 ts12_arg; + void (*ptr)(void)=&callback; + + test_structure_12 *ts12_result = + (test_structure_12 *) malloc (sizeof(test_structure_12)); + + ts12a_type.size = 0; + ts12a_type.alignment = 0; + ts12a_type.type = FFI_TYPE_STRUCT; + ts12a_type.elements = ts12a_type_elements; + ts12a_type_elements[0] = &ffi_type_uchar; + ts12a_type_elements[1] = &ffi_type_double; + ts12a_type_elements[2] = NULL; + + ts12b_type.size = 0; + ts12b_type.alignment = 0; + ts12b_type.type = FFI_TYPE_STRUCT; + ts12b_type.elements = ts12b_type_elements; + ts12b_type_elements[0] = &ffi_type_double; + ts12b_type_elements[1] = &ffi_type_double; + ts12b_type_elements[2] = NULL; + + ts12_type.size = 0; + ts12_type.alignment = 0; + ts12_type.type = FFI_TYPE_STRUCT; + ts12_type.elements = ts12_type_elements; + ts12_type_elements[0] = &ts12a_type; + ts12_type_elements[1] = &ts12b_type; + ts12_type_elements[2] = &ffi_type_uchar; + ts12_type_elements[3] = NULL; + + + args[0] = &ts12_type; + args[1] = &ffi_type_pointer; + values[0] = &ts12_arg; + values[1] = &ptr; + + CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts12_type, args) == FFI_OK); + + ts12_arg.s1.c = 5; + ts12_arg.s1.d = 5.55; + ts12_arg.c2 = 6; + ts12_arg.s[0] = 7.77; + ts12_arg.s[1] = 8.88; + + printf ("%d\n", ts12_arg.s1.c); + printf ("%g\n", ts12_arg.s1.d); + printf ("%u\n", ts12_arg.c2); + printf ("%g\n", ts12_arg.s[0]); + printf ("%g\n", ts12_arg.s[1]); + printf ("%d\n", i); + + ffi_call(&cif, FFI_FN(struct12), ts12_result, values); + + printf ("%d\n", ts12_result->s1.c); + printf ("%g\n", ts12_result->s1.d); + printf ("%u\n", ts12_result->c2); + printf ("%g\n", ts12_result->s[0]); + printf ("%g\n", ts12_result->s[1]); + printf ("%d\n", i); + CHECK(ts12_result->s1.c == 5 + 1); + CHECK(ts12_result->s1.d == 5.55 + 1); + CHECK(ts12_result->c2 == 6 + 1); + CHECK(ts12_result->s[0] == 7.77 + 1); + CHECK(ts12_result->s[1] == 8.88 + 1); + CHECK(i == 5 + 1); + CHECK(ts12_type.size == sizeof(test_structure_12)); + + free (ts12_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback4.c new file mode 100644 index 000000000..350338c3c --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/callback4.c @@ -0,0 +1,119 @@ +/* Area: ffi_call + Purpose: Check structures with array and callback. + Limitations: none. + PR: none. + Originator: David Tenty */ + +/* { dg-do run } */ +#include "ffitest.h" + +int i=5; + +void callback(void) { i++; } + + +typedef struct +{ + unsigned char c1; + struct { double d; unsigned char c; } s[2]; + unsigned char c2; +} test_structure_12; + +static test_structure_12 ABI_ATTR struct12 (test_structure_12 ts, void (*func)(void)) +{ + ts.c1 += 1; + ts.s[0].d += 1; + ts.s[0].c += 1; + ts.s[1].d += 1; + ts.s[1].c += 1; + ts.c2 += 1; + + func(); + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts12_type,ts12b_type, ts12a_type; + ffi_type *ts12_type_elements[4]; + ffi_type *ts12b_type_elements[3]; + ffi_type *ts12a_type_elements[3]; + + test_structure_12 ts12_arg; + void (*ptr)(void)=&callback; + + test_structure_12 *ts12_result = + (test_structure_12 *) malloc (sizeof(test_structure_12)); + + ts12a_type.size = 0; + ts12a_type.alignment = 0; + ts12a_type.type = FFI_TYPE_STRUCT; + ts12a_type.elements = ts12a_type_elements; + ts12a_type_elements[0] = &ffi_type_double; + ts12a_type_elements[1] = &ffi_type_uchar; + ts12a_type_elements[2] = NULL; + + ts12b_type.size = 0; + ts12b_type.alignment = 0; + ts12b_type.type = FFI_TYPE_STRUCT; + ts12b_type.elements = ts12b_type_elements; + ts12b_type_elements[0] = &ts12a_type; + ts12b_type_elements[1] = &ts12a_type; + ts12b_type_elements[2] = NULL; + + ts12_type.size = 0; + ts12_type.alignment = 0; + ts12_type.type = FFI_TYPE_STRUCT; + ts12_type.elements = ts12_type_elements; + ts12_type_elements[0] = &ffi_type_uchar; + ts12_type_elements[1] = &ts12b_type; + ts12_type_elements[2] = &ffi_type_uchar; + ts12_type_elements[3] = NULL; + + + args[0] = &ts12_type; + args[1] = &ffi_type_pointer; + values[0] = &ts12_arg; + values[1] = &ptr; + + CHECK(ffi_prep_cif(&cif, ABI_NUM, 2, &ts12_type, args) == FFI_OK); + + ts12_arg.c1 = 5; + ts12_arg.s[0].d = 5.55; + ts12_arg.s[0].c = 6; + ts12_arg.s[1].d = 7.77; + ts12_arg.s[1].c = 8; + ts12_arg.c2 = 9; + + printf ("%u\n", ts12_arg.c1); + printf ("%g\n", ts12_arg.s[0].d); + printf ("%u\n", ts12_arg.s[0].c); + printf ("%g\n", ts12_arg.s[1].d); + printf ("%u\n", ts12_arg.s[1].c); + printf ("%u\n", ts12_arg.c2); + printf ("%d\n", i); + + ffi_call(&cif, FFI_FN(struct12), ts12_result, values); + + printf ("%u\n", ts12_result->c1); + printf ("%g\n", ts12_result->s[0].d); + printf ("%u\n", ts12_result->s[0].c); + printf ("%g\n", ts12_result->s[1].d); + printf ("%u\n", ts12_result->s[1].c); + printf ("%u\n", ts12_result->c2); + printf ("%d\n", i); + CHECK(ts12_result->c1 == 5 + 1); + CHECK(ts12_result->s[0].d == 5.55 + 1); + CHECK(ts12_result->s[0].c == 6 + 1); + CHECK(ts12_result->s[1].d == 7.77 + 1); + CHECK(ts12_result->s[1].c == 8 + 1); + CHECK(ts12_result->c2 == 9 + 1); + CHECK(i == 5 + 1); + CHECK(ts12_type.size == sizeof(test_structure_12)); + + free (ts12_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/err_bad_typedef.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/err_bad_typedef.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/err_bad_typedef.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/err_bad_typedef.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/ffitest.h b/src/libffi/libffi-3.4.6/testsuite/libffi.call/ffitest.h similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/ffitest.h rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/ffitest.h diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/float1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/float1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/float1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/float1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/float2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/float2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/float2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/float2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/float3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/float3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/float3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/float3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/float4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/float4.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/float4.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/float4.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/float_va.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/float_va.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/float_va.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/float_va.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/many.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/many.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/many.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/many.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/many2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/many2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/many2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/many2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/many_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/many_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/many_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/many_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/many_mixed.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/many_mixed.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/many_mixed.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/many_mixed.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/negint.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/negint.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/negint.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/negint.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/offsets.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/offsets.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/offsets.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/offsets.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/pr1172638.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/pr1172638.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/pr1172638.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/pr1172638.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/promotion.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/promotion.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/promotion.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/promotion.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/pyobjc_tc.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/pyobjc_tc.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/pyobjc_tc.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/pyobjc_tc.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_dbl.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_dbl.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_dbl.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_dbl.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_dbl1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_dbl1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_dbl1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_dbl1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_dbl2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_dbl2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_dbl2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_dbl2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_fl3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_fl3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ldl.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ldl.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ldl.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ldl.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ll.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ll.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ll.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ll.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ll1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ll1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ll1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ll1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_sc.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_sc.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_sc.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_sc.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_sl.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_sl.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_sl.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_sl.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_uc.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_uc.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_uc.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_uc.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ul.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ul.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/return_ul.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/return_ul.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/s55.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/s55.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/s55.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/s55.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen4.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/strlen4.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/strlen4.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct10.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct10.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct10.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct10.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct4.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct4.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct4.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct5.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct5.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct5.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct5.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct6.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct6.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct6.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct6.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct7.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct7.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct7.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct7.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct8.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct8.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct8.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct8.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct9.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct9.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct9.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct9.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_3.c diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_3f.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_3f.c new file mode 100644 index 000000000..8b5b1db75 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_3f.c @@ -0,0 +1,65 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + float f01; + float f02; + float f03; +} test_structure_1; + +static test_structure_1 ABI_ATTR struct1(test_structure_1 ts) +{ + ts.f03++; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts1_type; + ffi_type *ts1_type_elements[5]; + + test_structure_1 ts1_arg; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_1 *ts1_result = + (test_structure_1 *) malloc (sizeof(test_structure_1)); + + ts1_type.size = 0; + ts1_type.alignment = 0; + ts1_type.type = FFI_TYPE_STRUCT; + ts1_type.elements = ts1_type_elements; + ts1_type_elements[0] = &ffi_type_float; + ts1_type_elements[1] = &ffi_type_float; + ts1_type_elements[2] = &ffi_type_float; + ts1_type_elements[3] = NULL; + + args[0] = &ts1_type; + values[0] = &ts1_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, + &ts1_type, args) == FFI_OK); + + ts1_arg.f03 = 555.5; + + ffi_call(&cif, FFI_FN(struct1), ts1_result, values); + + CHECK(fabs(ts1_result->f03 - 556.5) < FLT_EPSILON); + + /* This will fail if ffi_call isn't passing the struct by value. */ + CHECK(fabs(ts1_arg.f03 - 555.5) < FLT_EPSILON); + + free (ts1_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_4.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_4.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_4.c diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_4f.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_4f.c new file mode 100644 index 000000000..bf6775ac4 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_4f.c @@ -0,0 +1,67 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" + +typedef struct +{ + float f01; + float f02; + float f03; + float f04; +} test_structure_1; + +static test_structure_1 ABI_ATTR struct1(test_structure_1 ts) +{ + ts.f04++; + + return ts; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts1_type; + ffi_type *ts1_type_elements[5]; + + test_structure_1 ts1_arg; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_1 *ts1_result = + (test_structure_1 *) malloc (sizeof(test_structure_1)); + + ts1_type.size = 0; + ts1_type.alignment = 0; + ts1_type.type = FFI_TYPE_STRUCT; + ts1_type.elements = ts1_type_elements; + ts1_type_elements[0] = &ffi_type_float; + ts1_type_elements[1] = &ffi_type_float; + ts1_type_elements[2] = &ffi_type_float; + ts1_type_elements[3] = &ffi_type_float; + ts1_type_elements[4] = NULL; + + args[0] = &ts1_type; + values[0] = &ts1_arg; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, + &ts1_type, args) == FFI_OK); + + ts1_arg.f04 = 555.5; + + ffi_call(&cif, FFI_FN(struct1), ts1_result, values); + + CHECK(fabs(ts1_result->f04 - 556.5) < FLT_EPSILON); + + /* This will fail if ffi_call isn't passing the struct by value. */ + CHECK(fabs(ts1_arg.f04 - 555.5) < FLT_EPSILON); + + free (ts1_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_big.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_big.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_big.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_big.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_small.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_small.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/struct_by_value_small.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_by_value_small.c diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_2H.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_2H.c new file mode 100644 index 000000000..277355035 --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_2H.c @@ -0,0 +1,63 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +typedef struct +{ + short x; + short y; +} test_structure_5; + +static test_structure_5 ABI_ATTR struct5(test_structure_5 inp) +{ + inp.x *= 2; + inp.y *= 3; + + return inp; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts5_type; + ffi_type *ts5_type_elements[3]; + + test_structure_5 ts5_arg1; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_5 *ts5_result = + (test_structure_5 *) malloc (sizeof(test_structure_5)); + + ts5_type.size = 0; + ts5_type.alignment = 0; + ts5_type.type = FFI_TYPE_STRUCT; + ts5_type.elements = ts5_type_elements; + ts5_type_elements[0] = &ffi_type_sshort; + ts5_type_elements[1] = &ffi_type_sshort; + ts5_type_elements[2] = NULL; + + args[0] = &ts5_type; + values[0] = &ts5_arg1; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts5_type, args) == FFI_OK); + + ts5_arg1.x = 99; + ts5_arg1.y = 88; + + ffi_call (&cif, FFI_FN(struct5), ts5_result, values); + + CHECK(ts5_result->x == 99*2); + CHECK(ts5_result->y == 88*3); + CHECK(ts5_arg1.x == 99); + CHECK(ts5_arg1.y == 88); + + free (ts5_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_8H.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_8H.c new file mode 100644 index 000000000..5018daa1f --- /dev/null +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.call/struct_return_8H.c @@ -0,0 +1,90 @@ +/* Area: ffi_call + Purpose: Check structures. + Limitations: none. + PR: none. + Originator: From the original ffitest.c */ + +/* { dg-do run } */ +#include "ffitest.h" +typedef struct +{ + int a; + int b; + int c; + int d; + int e; + int f; + int g; + int h; +} test_structure_5; + +static test_structure_5 ABI_ATTR struct5(test_structure_5 inp) +{ + inp.a *= 2; + inp.b *= 3; + inp.c *= 4; + inp.d *= 5; + inp.e *= 6; + inp.f *= 7; + inp.g *= 8; + inp.h *= 9; + return inp; +} + +int main (void) +{ + ffi_cif cif; + ffi_type *args[MAX_ARGS]; + void *values[MAX_ARGS]; + ffi_type ts5_type; + ffi_type *ts5_type_elements[9]; + + test_structure_5 ts5_arg1; + + /* This is a hack to get a properly aligned result buffer */ + test_structure_5 *ts5_result = + (test_structure_5 *) malloc (sizeof(test_structure_5)); + + ts5_type.size = 0; + ts5_type.alignment = 0; + ts5_type.type = FFI_TYPE_STRUCT; + ts5_type.elements = ts5_type_elements; + ts5_type_elements[0] = &ffi_type_sint; + ts5_type_elements[1] = &ffi_type_sint; + ts5_type_elements[2] = &ffi_type_sint; + ts5_type_elements[3] = &ffi_type_sint; + ts5_type_elements[4] = &ffi_type_sint; + ts5_type_elements[5] = &ffi_type_sint; + ts5_type_elements[6] = &ffi_type_sint; + ts5_type_elements[7] = &ffi_type_sint; + ts5_type_elements[8] = NULL; + + args[0] = &ts5_type; + values[0] = &ts5_arg1; + + /* Initialize the cif */ + CHECK(ffi_prep_cif(&cif, ABI_NUM, 1, &ts5_type, args) == FFI_OK); + + ts5_arg1.a = 9; + ts5_arg1.b = 8; + ts5_arg1.c = 7; + ts5_arg1.d = 6; + ts5_arg1.e = 5; + ts5_arg1.f = 4; + ts5_arg1.g = 3; + ts5_arg1.h = 2; + + ffi_call (&cif, FFI_FN(struct5), ts5_result, values); + + CHECK(ts5_result->a == 9*2); + CHECK(ts5_result->b == 8*3); + CHECK(ts5_result->c == 7*4); + CHECK(ts5_result->d == 6*5); + CHECK(ts5_result->e == 5*6); + CHECK(ts5_result->f == 4*7); + CHECK(ts5_result->g == 3*8); + CHECK(ts5_result->h == 2*9); + + free (ts5_result); + exit(0); +} diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/uninitialized.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/uninitialized.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/uninitialized.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/uninitialized.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/va_1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/va_1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/va_1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/va_1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/va_2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/va_2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/va_2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/va_2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/va_3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/va_3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/va_3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/va_3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/va_struct1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/va_struct1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/va_struct1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/va_struct1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/va_struct2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/va_struct2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/va_struct2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/va_struct2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.call/va_struct3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.call/va_struct3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.call/va_struct3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.call/va_struct3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure.exp b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure.exp rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure.exp diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn0.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn0.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn0.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn0.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn4.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn4.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn4.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn5.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn5.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn5.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn5.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn6.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn6.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_fn6.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_fn6.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_loc_fn0.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_loc_fn0.c similarity index 96% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_loc_fn0.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_loc_fn0.c index 4f2f4f8c1..f344a6074 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_loc_fn0.c +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_loc_fn0.c @@ -7,9 +7,6 @@ Originator: 20030828 */ - - -/* { dg-do run { xfail wasm32*-*-* } } */ #include "ffitest.h" static void @@ -83,9 +80,9 @@ int main (void) CHECK(ffi_prep_closure_loc(pcl, &cif, closure_loc_test_fn0, (void *) 3 /* userdata */, codeloc) == FFI_OK); -#ifndef FFI_EXEC_STATIC_TRAMP +#if !defined(FFI_EXEC_STATIC_TRAMP) && !defined(__EMSCRIPTEN__) /* With static trampolines, the codeloc does not point to closure */ - CHECK(memcmp(pcl, codeloc, sizeof(*pcl)) == 0); + CHECK(memcmp(pcl, FFI_CL(codeloc), sizeof(*pcl)) == 0); #endif res = (*((closure_loc_test_type0)codeloc)) diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_simple.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_simple.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/closure_simple.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/closure_simple.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_12byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_12byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_12byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_12byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_16byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_16byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_16byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_16byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_18byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_18byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_18byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_18byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_19byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_19byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_19byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_19byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_1_1byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_1_1byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_1_1byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_1_1byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_20byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_20byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_20byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_20byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_20byte1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_20byte1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_20byte1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_20byte1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_24byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_24byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_24byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_24byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_2byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_2byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_2byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_2byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3_1byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3_1byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3_1byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3_1byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3byte1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3byte1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3byte1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3byte1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3byte2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3byte2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3byte2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3byte2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_3float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_3float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_4_1byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_4_1byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_4_1byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_4_1byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_4byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_4byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_4byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_4byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_5_1_byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_5_1_byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_5_1_byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_5_1_byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_5byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_5byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_5byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_5byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_64byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_64byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_64byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_64byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_6_1_byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_6_1_byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_6_1_byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_6_1_byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_6byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_6byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_6byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_6byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_7_1_byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_7_1_byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_7_1_byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_7_1_byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_7byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_7byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_7byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_7byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_8byte.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_8byte.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_8byte.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_8byte.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_9byte1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_9byte1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_9byte1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_9byte1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_9byte2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_9byte2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_9byte2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_9byte2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_longdouble_split.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_longdouble_split.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_longdouble_split.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_longdouble_split.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_longdouble_split2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_longdouble_split2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_longdouble_split2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_longdouble_split2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_pointer.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_pointer.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_pointer.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_pointer.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_sint16.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_sint16.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_sint16.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_sint16.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_sint32.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_sint32.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_sint32.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_sint32.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_sint64.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_sint64.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_sint64.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_sint64.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_uint16.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_uint16.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_uint16.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_uint16.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_uint32.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_uint32.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_uint32.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_uint32.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_uint64.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_uint64.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_align_uint64.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_align_uint64.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_dbls_struct.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_dbls_struct.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_dbls_struct.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_dbls_struct.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_double_va.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_double_va.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_double_va.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_double_va.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_longdouble_va.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_longdouble_va.c similarity index 86% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_longdouble_va.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_longdouble_va.c index 493f0f6f6..ba32f5c85 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_longdouble_va.c +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_longdouble_va.c @@ -9,10 +9,21 @@ /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ #include "ffitest.h" +#include #define BUF_SIZE 50 static char buffer[BUF_SIZE]; +static int +wrap_printf(char* fmt, ...) { + va_list ap; + va_start(ap, fmt); + long double ldArg = va_arg(ap, long double); + va_end(ap); + CHECK((int)ldArg == 7); + return printf(fmt, ldArg); +} + static void cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__) @@ -50,7 +61,7 @@ int main (void) args[1] = &ldArg; args[2] = NULL; - ffi_call(&cif, FFI_FN(printf), &res, args); + ffi_call(&cif, FFI_FN(wrap_printf), &res, args); /* { dg-output "7.0" } */ printf("res: %d\n", (int) res); /* { dg-output "\nres: 4" } */ diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_many_mixed_args.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_many_mixed_args.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_many_mixed_args.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_many_mixed_args.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_many_mixed_float_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_many_mixed_float_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_many_mixed_float_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_many_mixed_float_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_schar.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_schar.c similarity index 97% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_schar.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_schar.c index 921777a0f..9eb02f9e3 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_schar.c +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_schar.c @@ -64,7 +64,7 @@ int main (void) /* { dg-output "2 125: 127" } */ printf("res: %d\n", (signed char)res_call); /* { dg-output "\nres: 127" } */ - CHECK(res_call == 127); + CHECK((signed char)res_call == 127); CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_sshort.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_sshort.c similarity index 97% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_sshort.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_sshort.c index d78c62d2d..9d4db5b6c 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_sshort.c +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_sshort.c @@ -65,7 +65,7 @@ int main (void) /* { dg-output "2 32765: 32767" } */ printf("res: %d\n", (unsigned short)res_call); /* { dg-output "\nres: 32767" } */ - CHECK(res_call == 32767); + CHECK((unsigned short)res_call == 32767); CHECK(ffi_prep_closure_loc(pcl, &cif, test_func_gn, NULL, code) == FFI_OK); diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_sshortchar.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_sshortchar.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_sshortchar.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_sshortchar.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_uchar.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_uchar.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_uchar.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_uchar.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_ushort.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_ushort.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_ushort.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_ushort.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_ushortchar.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_ushortchar.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_multi_ushortchar.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_multi_ushortchar.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_pointer.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_pointer.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_pointer.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_pointer.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_pointer_stack.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_pointer_stack.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_pointer_stack.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_pointer_stack.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_schar.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_schar.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_schar.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_schar.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_sint.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_sint.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_sint.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_sint.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_sshort.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_sshort.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_sshort.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_sshort.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_struct_va1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_struct_va1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_struct_va1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_struct_va1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_uchar.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_uchar.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_uchar.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_uchar.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_uint.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_uint.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_uint.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_uint.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_uint_va.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_uint_va.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_uint_va.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_uint_va.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_ulong_va.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_ulong_va.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_ulong_va.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_ulong_va.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_ulonglong.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_ulonglong.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_ulonglong.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_ulonglong.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_ushort.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_ushort.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/cls_ushort.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/cls_ushort.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/err_bad_abi.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/err_bad_abi.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/err_bad_abi.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/err_bad_abi.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/ffitest.h b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/ffitest.h similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/ffitest.h rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/ffitest.h diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/huge_struct.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/huge_struct.c similarity index 99% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/huge_struct.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/huge_struct.c index 71cae2681..572a0c8fb 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/huge_struct.c +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/huge_struct.c @@ -5,7 +5,7 @@ Originator: Blake Chaffin 6/18/2007 */ -/* { dg-do run { xfail strongarm*-*-* xscale*-*-* wasm32*-*-* } } */ +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ /* { dg-options -mlong-double-128 { target powerpc64*-*-linux-gnu* } } */ /* { dg-options -Wformat=0 { target moxie*-*-elf or1k-*-* } } */ diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct10.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct10.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct10.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct10.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct11.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct11.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct11.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct11.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct12.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct12.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct12.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct12.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct13.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct13.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct13.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct13.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct4.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct4.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct4.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct4.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct5.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct5.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct5.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct5.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct6.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct6.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct6.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct6.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct7.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct7.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct7.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct7.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct8.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct8.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct8.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct8.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct9.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct9.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/nested_struct9.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/nested_struct9.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/problem1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/problem1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/problem1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/problem1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/single_entry_structs1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/single_entry_structs1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/single_entry_structs1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/single_entry_structs1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/single_entry_structs2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/single_entry_structs2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/single_entry_structs2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/single_entry_structs2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/single_entry_structs3.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/single_entry_structs3.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/single_entry_structs3.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/single_entry_structs3.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_large.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_large.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_large.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_large.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_large2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_large2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_large2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_large2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_medium.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_medium.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_medium.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_medium.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_medium2.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_medium2.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/stret_medium2.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/stret_medium2.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/testclosure.c b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/testclosure.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/testclosure.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/testclosure.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/unwindtest.cc b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/unwindtest.cc similarity index 99% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/unwindtest.cc rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/unwindtest.cc index 6c97c61e8..b643c48e4 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/unwindtest.cc +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/unwindtest.cc @@ -48,6 +48,7 @@ typedef int (*closure_test_type1)(float, float, float, float, signed short, float, float, int, double, int, int, float, int, int, int, int); +extern "C" int main (void) { ffi_cif cif; diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/unwindtest_ffi_call.cc b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/unwindtest_ffi_call.cc similarity index 98% rename from src/libffi/libffi-3.4.4/testsuite/libffi.closures/unwindtest_ffi_call.cc rename to src/libffi/libffi-3.4.6/testsuite/libffi.closures/unwindtest_ffi_call.cc index 153d24094..6feaa5752 100644 --- a/src/libffi/libffi-3.4.4/testsuite/libffi.closures/unwindtest_ffi_call.cc +++ b/src/libffi/libffi-3.4.6/testsuite/libffi.closures/unwindtest_ffi_call.cc @@ -14,6 +14,7 @@ static int checking(int a __UNUSED__, short b __UNUSED__, throw 9; } +extern "C" int main (void) { ffi_cif cif; diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_align_complex_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_align_complex_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_struct_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_struct_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/cls_complex_va_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/cls_complex_va_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex.exp b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex.exp rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex.exp diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_defs_double.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_defs_double.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_defs_double.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_defs_double.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_defs_float.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_defs_float.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_defs_float.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_defs_float.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_defs_longdouble.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_defs_longdouble.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_defs_longdouble.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_defs_longdouble.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_int.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_int.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_int.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_int.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/complex_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/complex_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/ffitest.h b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/ffitest.h similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/ffitest.h rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/ffitest.h diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/many_complex_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/many_complex_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex1_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex1_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2.inc b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2.inc similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2.inc rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2.inc diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex2_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex2_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex_double.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex_double.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex_double.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex_double.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex_float.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex_float.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex_float.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex_float.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex_longdouble.c b/src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex_longdouble.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.complex/return_complex_longdouble.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.complex/return_complex_longdouble.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.go/aa-direct.c b/src/libffi/libffi-3.4.6/testsuite/libffi.go/aa-direct.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.go/aa-direct.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.go/aa-direct.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.go/closure1.c b/src/libffi/libffi-3.4.6/testsuite/libffi.go/closure1.c similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.go/closure1.c rename to src/libffi/libffi-3.4.6/testsuite/libffi.go/closure1.c diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.go/ffitest.h b/src/libffi/libffi-3.4.6/testsuite/libffi.go/ffitest.h similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.go/ffitest.h rename to src/libffi/libffi-3.4.6/testsuite/libffi.go/ffitest.h diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.go/go.exp b/src/libffi/libffi-3.4.6/testsuite/libffi.go/go.exp similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.go/go.exp rename to src/libffi/libffi-3.4.6/testsuite/libffi.go/go.exp diff --git a/src/libffi/libffi-3.4.4/testsuite/libffi.go/static-chain.h b/src/libffi/libffi-3.4.6/testsuite/libffi.go/static-chain.h similarity index 100% rename from src/libffi/libffi-3.4.4/testsuite/libffi.go/static-chain.h rename to src/libffi/libffi-3.4.6/testsuite/libffi.go/static-chain.h From 52dbba77853669fdece6625d0d179ca526726743 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 25 Jul 2024 10:09:44 +0000 Subject: [PATCH 02/42] Updated libffi version to build to 3.4.6. --- chevah_build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chevah_build b/chevah_build index 777bc93fa..05d651ace 100755 --- a/chevah_build +++ b/chevah_build @@ -13,7 +13,7 @@ set -o errtrace # trap errors in functions as well set -o pipefail # don't ignore exit codes when piping output PYTHON_BUILD_VERSION="2.7.18" -LIBFFI_VERSION="3.4.4" +LIBFFI_VERSION="3.4.6" ZLIB_VERSION="1.3" BZIP2_VERSION="1.0.8" # We statically build the BSD libedit on selected platforms to get the From 25e41b226756f74d7e05bb1019d7daed13535b21 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 25 Jul 2024 10:14:08 +0000 Subject: [PATCH 03/42] Updated zlib sources to 1.3.1. --- .../{zlib-1.3 => zlib-1.3.1}/CMakeLists.txt | 43 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/ChangeLog | 10 + src/zlib/{zlib-1.3 => zlib-1.3.1}/FAQ | 3 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/INDEX | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/LICENSE | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/Makefile | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/Makefile.in | 16 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/README | 6 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/adler32.c | 0 .../amiga/Makefile.pup | 0 .../amiga/Makefile.sas | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/compress.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/configure | 9 +- .../contrib/README.contrib | 0 .../contrib/ada/buffer_demo.adb | 0 .../contrib/ada/mtest.adb | 0 .../contrib/ada/read.adb | 0 .../contrib/ada/readme.txt | 0 .../contrib/ada/test.adb | 0 .../contrib/ada/zlib-streams.adb | 0 .../contrib/ada/zlib-streams.ads | 0 .../contrib/ada/zlib-thin.adb | 0 .../contrib/ada/zlib-thin.ads | 0 .../contrib/ada/zlib.adb | 0 .../contrib/ada/zlib.ads | 0 .../contrib/ada/zlib.gpr | 0 .../contrib/blast/Makefile | 0 .../contrib/blast/README | 0 .../contrib/blast/blast.c | 0 .../contrib/blast/blast.h | 0 .../contrib/blast/test.pk | Bin .../contrib/blast/test.txt | 0 .../contrib/delphi/ZLib.pas | 2 +- .../contrib/delphi/ZLibConst.pas | 0 .../contrib/delphi/readme.txt | 0 .../contrib/delphi/zlibd32.mak | 0 .../contrib/dotzlib/DotZLib.build | 0 .../contrib/dotzlib/DotZLib.chm | Bin .../contrib/dotzlib/DotZLib.sln | 0 .../contrib/dotzlib/DotZLib/AssemblyInfo.cs | 0 .../contrib/dotzlib/DotZLib/ChecksumImpl.cs | 2 +- .../contrib/dotzlib/DotZLib/CircularBuffer.cs | 0 .../contrib/dotzlib/DotZLib/CodecBase.cs | 0 .../contrib/dotzlib/DotZLib/Deflater.cs | 0 .../contrib/dotzlib/DotZLib/DotZLib.cs | 0 .../contrib/dotzlib/DotZLib/DotZLib.csproj | 0 .../contrib/dotzlib/DotZLib/GZipStream.cs | 0 .../contrib/dotzlib/DotZLib/Inflater.cs | 0 .../contrib/dotzlib/DotZLib/UnitTests.cs | 2 +- .../contrib/dotzlib/LICENSE_1_0.txt | 0 .../contrib/dotzlib/readme.txt | 0 .../contrib/gcc_gvmat64/gvmat64.S | 0 .../contrib/infback9/README | 0 .../contrib/infback9/infback9.c | 0 .../contrib/infback9/infback9.h | 0 .../contrib/infback9/inffix9.h | 0 .../contrib/infback9/inflate9.h | 0 .../contrib/infback9/inftree9.c | 6 +- .../contrib/infback9/inftree9.h | 4 +- .../contrib/iostream/test.cpp | 0 .../contrib/iostream/zfstream.cpp | 0 .../contrib/iostream/zfstream.h | 0 .../contrib/iostream2/zstream.h | 0 .../contrib/iostream2/zstream_test.cpp | 0 .../contrib/iostream3/README | 0 .../contrib/iostream3/TODO | 0 .../contrib/iostream3/test.cc | 0 .../contrib/iostream3/zfstream.cc | 0 .../contrib/iostream3/zfstream.h | 4 +- .../contrib/minizip/Makefile | 2 +- .../contrib/minizip/Makefile.am | 0 .../contrib/minizip/MiniZip64_Changes.txt | 0 .../contrib/minizip/MiniZip64_info.txt | 0 .../contrib/minizip/configure.ac | 2 +- .../contrib/minizip/crypt.h | 0 .../contrib/minizip/ioapi.c | 0 .../contrib/minizip/ioapi.h | 2 +- .../contrib/minizip/iowin32.c | 0 .../contrib/minizip/iowin32.h | 0 .../contrib/minizip/make_vms.com | 0 .../contrib/minizip/miniunz.c | 18 +- .../contrib/minizip/miniunzip.1 | 0 .../contrib/minizip/minizip.1 | 0 .../contrib/minizip/minizip.c | 0 .../contrib/minizip/minizip.pc.in | 0 .../contrib/minizip/mztools.c | 0 .../contrib/minizip/mztools.h | 0 .../contrib/minizip/unzip.c | 8 +- .../contrib/minizip/unzip.h | 2 +- .../contrib/minizip/zip.c | 21 +- .../contrib/minizip/zip.h | 4 +- .../zlib-1.3.1/contrib/nuget/nuget.csproj | 43 + src/zlib/zlib-1.3.1/contrib/nuget/nuget.sln | 22 + .../contrib/pascal/example.pas | 0 .../contrib/pascal/readme.txt | 0 .../contrib/pascal/zlibd32.mak | 0 .../contrib/pascal/zlibpas.pas | 2 +- .../contrib/puff/Makefile | 0 .../contrib/puff/README | 0 .../contrib/puff/puff.c | 8 +- .../contrib/puff/puff.h | 0 .../contrib/puff/pufftest.c | 0 .../contrib/puff/zeros.raw | Bin .../contrib/testzlib/testzlib.c | 0 .../contrib/testzlib/testzlib.txt | 0 .../contrib/untgz/Makefile | 0 .../contrib/untgz/Makefile.msc | 0 .../contrib/untgz/untgz.c | 0 .../contrib/vstudio/readme.txt | 156 ++-- .../contrib/vstudio/vc10/miniunz.vcxproj | 0 .../vstudio/vc10/miniunz.vcxproj.filters | 0 .../contrib/vstudio/vc10/minizip.vcxproj | 0 .../vstudio/vc10/minizip.vcxproj.filters | 0 .../contrib/vstudio/vc10/testzlib.vcxproj | 0 .../vstudio/vc10/testzlib.vcxproj.filters | 0 .../contrib/vstudio/vc10/testzlibdll.vcxproj | 0 .../vstudio/vc10/testzlibdll.vcxproj.filters | 0 .../contrib/vstudio/vc10/zlib.rc | 8 +- .../contrib/vstudio/vc10/zlibstat.vcxproj | 0 .../vstudio/vc10/zlibstat.vcxproj.filters | 0 .../contrib/vstudio/vc10/zlibvc.def | 2 +- .../contrib/vstudio/vc10/zlibvc.sln | 0 .../contrib/vstudio/vc10/zlibvc.vcxproj | 0 .../vstudio/vc10/zlibvc.vcxproj.filters | 0 .../contrib/vstudio/vc11/miniunz.vcxproj | 0 .../contrib/vstudio/vc11/minizip.vcxproj | 0 .../contrib/vstudio/vc11/testzlib.vcxproj | 0 .../contrib/vstudio/vc11/testzlibdll.vcxproj | 0 .../contrib/vstudio/vc11/zlib.rc | 8 +- .../contrib/vstudio/vc11/zlibstat.vcxproj | 0 .../contrib/vstudio/vc11}/zlibvc.def | 2 +- .../contrib/vstudio/vc11/zlibvc.sln | 0 .../contrib/vstudio/vc11/zlibvc.vcxproj | 0 .../contrib/vstudio/vc12/miniunz.vcxproj | 0 .../contrib/vstudio/vc12/minizip.vcxproj | 0 .../contrib/vstudio/vc12/testzlib.vcxproj | 0 .../contrib/vstudio/vc12/testzlibdll.vcxproj | 0 .../contrib/vstudio/vc12/zlib.rc | 8 +- .../contrib/vstudio/vc12/zlibstat.vcxproj | 0 .../contrib/vstudio/vc12}/zlibvc.def | 2 +- .../contrib/vstudio/vc12/zlibvc.sln | 0 .../contrib/vstudio/vc12/zlibvc.vcxproj | 0 .../contrib/vstudio/vc14/miniunz.vcxproj | 0 .../contrib/vstudio/vc14/minizip.vcxproj | 0 .../contrib/vstudio/vc14/testzlib.vcxproj | 0 .../contrib/vstudio/vc14/testzlibdll.vcxproj | 0 .../contrib/vstudio/vc14/zlib.rc | 8 +- .../contrib/vstudio/vc14/zlibstat.vcxproj | 0 .../contrib/vstudio/vc14/zlibvc.def | 158 ++++ .../contrib/vstudio/vc14/zlibvc.sln | 0 .../contrib/vstudio/vc14/zlibvc.vcxproj | 0 .../contrib/vstudio/vc17/miniunz.vcxproj | 409 ++++++++ .../contrib/vstudio/vc17/minizip.vcxproj | 405 ++++++++ .../contrib/vstudio/vc17/testzlib.vcxproj | 473 ++++++++++ .../contrib/vstudio/vc17/testzlibdll.vcxproj | 409 ++++++++ .../zlib-1.3.1/contrib/vstudio/vc17/zlib.rc | 32 + .../contrib/vstudio/vc17/zlibstat.vcxproj | 602 ++++++++++++ .../contrib/vstudio/vc17}/zlibvc.def | 316 +++---- .../contrib/vstudio/vc17/zlibvc.sln | 179 ++++ .../contrib/vstudio/vc17/zlibvc.vcxproj | 875 ++++++++++++++++++ .../contrib/vstudio/vc9/miniunz.vcproj | 0 .../contrib/vstudio/vc9/minizip.vcproj | 0 .../contrib/vstudio/vc9/testzlib.vcproj | 0 .../contrib/vstudio/vc9/testzlibdll.vcproj | 0 .../zlib-1.3.1/contrib/vstudio/vc9/zlib.rc | 32 + .../contrib/vstudio/vc9/zlibstat.vcproj | 0 .../zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def | 158 ++++ .../contrib/vstudio/vc9/zlibvc.sln | 0 .../contrib/vstudio/vc9/zlibvc.vcproj | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/crc32.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/crc32.h | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/deflate.c | 47 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/deflate.h | 35 +- .../doc/algorithm.txt | 2 +- .../doc/crc-doc.1.0.pdf | Bin .../{zlib-1.3 => zlib-1.3.1}/doc/rfc1950.txt | 0 .../{zlib-1.3 => zlib-1.3.1}/doc/rfc1951.txt | 0 .../{zlib-1.3 => zlib-1.3.1}/doc/rfc1952.txt | 0 .../{zlib-1.3 => zlib-1.3.1}/doc/txtvsbin.txt | 0 .../examples/README.examples | 0 .../examples/enough.c | 0 .../examples/fitblk.c | 0 .../{zlib-1.3 => zlib-1.3.1}/examples/gun.c | 0 .../examples/gzappend.c | 0 .../examples/gzjoin.c | 0 .../{zlib-1.3 => zlib-1.3.1}/examples/gzlog.c | 4 +- .../{zlib-1.3 => zlib-1.3.1}/examples/gzlog.h | 0 .../examples/gznorm.c | 0 .../examples/zlib_how.html | 0 .../{zlib-1.3 => zlib-1.3.1}/examples/zpipe.c | 0 .../{zlib-1.3 => zlib-1.3.1}/examples/zran.c | 2 +- .../{zlib-1.3 => zlib-1.3.1}/examples/zran.h | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/gzclose.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/gzguts.h | 8 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/gzlib.c | 12 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/gzread.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/gzwrite.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/infback.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/inffast.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/inffast.h | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/inffixed.h | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/inflate.c | 2 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/inflate.h | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/inftrees.c | 6 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/inftrees.h | 4 +- .../{zlib-1.3 => zlib-1.3.1}/make_vms.com | 0 .../msdos/Makefile.bor | 0 .../msdos/Makefile.dj2 | 0 .../msdos/Makefile.emx | 0 .../msdos/Makefile.msc | 0 .../msdos/Makefile.tc | 0 .../nintendods/Makefile | 0 .../nintendods/README | 0 .../{zlib-1.3 => zlib-1.3.1}/old/Makefile.emx | 0 .../old/Makefile.riscos | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/old/README | 0 .../{zlib-1.3 => zlib-1.3.1}/old/descrip.mms | 0 .../old/os2/Makefile.os2 | 0 .../{zlib-1.3 => zlib-1.3.1}/old/os2/zlib.def | 0 .../old/visual-basic.txt | 2 +- .../{zlib-1.3 => zlib-1.3.1}/os400/README400 | 2 +- .../{zlib-1.3 => zlib-1.3.1}/os400/bndsrc | 0 .../{zlib-1.3 => zlib-1.3.1}/os400/make.sh | 0 .../{zlib-1.3 => zlib-1.3.1}/os400/zlib.inc | 6 +- .../{zlib-1.3 => zlib-1.3.1}/qnx/package.qpg | 10 +- .../{zlib-1.3 => zlib-1.3.1}/test/example.c | 25 +- .../{zlib-1.3 => zlib-1.3.1}/test/infcover.c | 0 .../{zlib-1.3 => zlib-1.3.1}/test/minigzip.c | 32 +- .../{zlib-1.3 => zlib-1.3.1}/treebuild.xml | 4 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/trees.c | 20 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/trees.h | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/uncompr.c | 0 .../watcom/watcom_f.mak | 0 .../watcom/watcom_l.mak | 0 .../win32/DLL_FAQ.txt | 20 +- .../win32/Makefile.bor | 0 .../win32/Makefile.gcc | 0 .../win32/Makefile.msc | 0 .../win32/README-WIN32.txt | 8 +- .../win32/VisualC.txt | 0 .../{zlib-1.3 => zlib-1.3.1}/win32/zlib.def | 0 .../{zlib-1.3 => zlib-1.3.1}/win32/zlib1.rc | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/zconf.h | 10 +- .../{zlib-1.3 => zlib-1.3.1}/zconf.h.cmakein | 10 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/zconf.h.in | 10 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.3 | 6 +- src/zlib/zlib-1.3.1/zlib.3.pdf | Bin 0 -> 25523 bytes src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.h | 22 +- src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.map | 200 ++-- .../{zlib-1.3 => zlib-1.3.1}/zlib.pc.cmakein | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.pc.in | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/zutil.c | 0 src/zlib/{zlib-1.3 => zlib-1.3.1}/zutil.h | 27 +- src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc | 32 - .../zlib-1.3/contrib/vstudio/vc9/zlibvc.def | 158 ---- src/zlib/zlib-1.3/zlib.3.pdf | Bin 19505 -> 0 bytes 256 files changed, 4434 insertions(+), 775 deletions(-) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/CMakeLists.txt (86%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/ChangeLog (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/FAQ (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/INDEX (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/LICENSE (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/Makefile (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/Makefile.in (96%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/README (96%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/adler32.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/amiga/Makefile.pup (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/amiga/Makefile.sas (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/compress.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/configure (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/README.contrib (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/buffer_demo.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/mtest.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/read.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/readme.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/test.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib-streams.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib-streams.ads (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib-thin.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib-thin.ads (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib.adb (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib.ads (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/ada/zlib.gpr (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/blast/Makefile (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/blast/README (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/blast/blast.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/blast/blast.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/blast/test.pk (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/blast/test.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/delphi/ZLib.pas (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/delphi/ZLibConst.pas (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/delphi/readme.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/delphi/zlibd32.mak (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib.build (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib.chm (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib.sln (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/AssemblyInfo.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/ChecksumImpl.cs (97%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/CircularBuffer.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/CodecBase.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/Deflater.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/DotZLib.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/DotZLib.csproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/GZipStream.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/Inflater.cs (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/DotZLib/UnitTests.cs (95%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/LICENSE_1_0.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/dotzlib/readme.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/gcc_gvmat64/gvmat64.S (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/README (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/infback9.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/infback9.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/inffix9.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/inflate9.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/inftree9.c (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/infback9/inftree9.h (94%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream/test.cpp (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream/zfstream.cpp (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream/zfstream.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream2/zstream.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream2/zstream_test.cpp (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream3/README (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream3/TODO (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream3/test.cc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream3/zfstream.cc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/iostream3/zfstream.h (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/Makefile (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/Makefile.am (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/MiniZip64_Changes.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/MiniZip64_info.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/configure.ac (93%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/crypt.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/ioapi.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/ioapi.h (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/iowin32.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/iowin32.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/make_vms.com (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/miniunz.c (96%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/miniunzip.1 (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/minizip.1 (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/minizip.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/minizip.pc.in (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/mztools.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/mztools.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/unzip.c (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/unzip.h (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/zip.c (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/minizip/zip.h (99%) create mode 100644 src/zlib/zlib-1.3.1/contrib/nuget/nuget.csproj create mode 100644 src/zlib/zlib-1.3.1/contrib/nuget/nuget.sln rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/pascal/example.pas (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/pascal/readme.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/pascal/zlibd32.mak (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/pascal/zlibpas.pas (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/puff/Makefile (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/puff/README (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/puff/puff.c (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/puff/puff.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/puff/pufftest.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/puff/zeros.raw (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/testzlib/testzlib.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/testzlib/testzlib.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/untgz/Makefile (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/untgz/Makefile.msc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/untgz/untgz.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/readme.txt (88%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/miniunz.vcxproj.filters (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/minizip.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/minizip.vcxproj.filters (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/testzlib.vcxproj.filters (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/testzlibdll.vcxproj.filters (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlib.rc (80%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlibstat.vcxproj.filters (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlibvc.def (97%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlibvc.sln (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc10/zlibvc.vcxproj.filters (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/minizip.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/zlib.rc (80%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.3/contrib/vstudio/vc14 => zlib-1.3.1/contrib/vstudio/vc11}/zlibvc.def (97%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/zlibvc.sln (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc11/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/minizip.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/zlib.rc (83%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.3/contrib/vstudio/vc11 => zlib-1.3.1/contrib/vstudio/vc12}/zlibvc.def (97%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/zlibvc.sln (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc12/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/minizip.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/zlib.rc (83%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/zlibstat.vcxproj (100%) create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/zlibvc.sln (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc14/zlibvc.vcxproj (100%) create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj rename src/zlib/{zlib-1.3/contrib/vstudio/vc12 => zlib-1.3.1/contrib/vstudio/vc17}/zlibvc.def (97%) create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/miniunz.vcproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/minizip.vcproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/testzlib.vcproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/testzlibdll.vcproj (100%) create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/zlibstat.vcproj (100%) create mode 100644 src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/zlibvc.sln (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/contrib/vstudio/vc9/zlibvc.vcproj (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/crc32.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/crc32.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/deflate.c (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/deflate.h (92%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/doc/algorithm.txt (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/doc/crc-doc.1.0.pdf (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/doc/rfc1950.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/doc/rfc1951.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/doc/rfc1952.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/doc/txtvsbin.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/README.examples (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/enough.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/fitblk.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/gun.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/gzappend.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/gzjoin.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/gzlog.c (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/gzlog.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/gznorm.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/zlib_how.html (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/zpipe.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/zran.c (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/examples/zran.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/gzclose.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/gzguts.h (96%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/gzlib.c (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/gzread.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/gzwrite.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/infback.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inffast.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inffast.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inffixed.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inflate.c (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inflate.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inftrees.c (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/inftrees.h (94%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/make_vms.com (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/msdos/Makefile.bor (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/msdos/Makefile.dj2 (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/msdos/Makefile.emx (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/msdos/Makefile.msc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/msdos/Makefile.tc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/nintendods/Makefile (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/nintendods/README (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/Makefile.emx (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/Makefile.riscos (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/README (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/descrip.mms (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/os2/Makefile.os2 (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/os2/zlib.def (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/old/visual-basic.txt (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/os400/README400 (96%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/os400/bndsrc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/os400/make.sh (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/os400/zlib.inc (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/qnx/package.qpg (95%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/test/example.c (94%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/test/infcover.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/test/minigzip.c (94%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/treebuild.xml (97%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/trees.c (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/trees.h (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/uncompr.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/watcom/watcom_f.mak (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/watcom/watcom_l.mak (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/DLL_FAQ.txt (95%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/Makefile.bor (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/Makefile.gcc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/Makefile.msc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/README-WIN32.txt (95%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/VisualC.txt (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/zlib.def (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/win32/zlib1.rc (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zconf.h (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zconf.h.cmakein (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zconf.h.in (98%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.3 (97%) create mode 100644 src/zlib/zlib-1.3.1/zlib.3.pdf rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.h (99%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.map (93%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.pc.cmakein (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zlib.pc.in (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zutil.c (100%) rename src/zlib/{zlib-1.3 => zlib-1.3.1}/zutil.h (90%) delete mode 100644 src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc delete mode 100644 src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def delete mode 100644 src/zlib/zlib-1.3/zlib.3.pdf diff --git a/src/zlib/zlib-1.3/CMakeLists.txt b/src/zlib/zlib-1.3.1/CMakeLists.txt similarity index 86% rename from src/zlib/zlib-1.3/CMakeLists.txt rename to src/zlib/zlib-1.3.1/CMakeLists.txt index 7f1b69f4a..15ceebe78 100644 --- a/src/zlib/zlib-1.3/CMakeLists.txt +++ b/src/zlib/zlib-1.3.1/CMakeLists.txt @@ -3,7 +3,9 @@ set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) project(zlib C) -set(VERSION "1.3") +set(VERSION "1.3.1") + +option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" ON) set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") @@ -148,7 +150,9 @@ if(MINGW) endif(MINGW) add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +target_include_directories(zlib PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +target_include_directories(zlibstatic PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) set_target_properties(zlib PROPERTIES SOVERSION 1) @@ -166,7 +170,7 @@ endif() if(UNIX) # On unix-like platforms the library is almost always called libz set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) - if(NOT APPLE) + if(NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX)) set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") endif() elseif(BUILD_SHARED_LIBS AND WIN32) @@ -193,21 +197,22 @@ endif() #============================================================================ # Example binaries #============================================================================ - -add_executable(example test/example.c) -target_link_libraries(example zlib) -add_test(example example) - -add_executable(minigzip test/minigzip.c) -target_link_libraries(minigzip zlib) - -if(HAVE_OFF64_T) - add_executable(example64 test/example.c) - target_link_libraries(example64 zlib) - set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") - add_test(example64 example64) - - add_executable(minigzip64 test/minigzip.c) - target_link_libraries(minigzip64 zlib) - set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") +if(ZLIB_BUILD_EXAMPLES) + add_executable(example test/example.c) + target_link_libraries(example zlib) + add_test(example example) + + add_executable(minigzip test/minigzip.c) + target_link_libraries(minigzip zlib) + + if(HAVE_OFF64_T) + add_executable(example64 test/example.c) + target_link_libraries(example64 zlib) + set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64 example64) + + add_executable(minigzip64 test/minigzip.c) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + endif() endif() diff --git a/src/zlib/zlib-1.3/ChangeLog b/src/zlib/zlib-1.3.1/ChangeLog similarity index 99% rename from src/zlib/zlib-1.3/ChangeLog rename to src/zlib/zlib-1.3.1/ChangeLog index 8707988ac..b801a1031 100644 --- a/src/zlib/zlib-1.3/ChangeLog +++ b/src/zlib/zlib-1.3.1/ChangeLog @@ -1,6 +1,16 @@ ChangeLog file for zlib +Changes in 1.3.1 (22 Jan 2024) +- Reject overflows of zip header fields in minizip +- Fix bug in inflateSync() for data held in bit buffer +- Add LIT_MEM define to use more memory for a small deflate speedup +- Fix decision on the emission of Zip64 end records in minizip +- Add bounds checking to ERR_MSG() macro, used by zError() +- Neutralize zip file traversal attacks in miniunz +- Fix a bug in ZLIB_DEBUG compiles in check_match() +- Various portability and appearance improvements + Changes in 1.3 (18 Aug 2023) - Remove K&R function definitions and zlib2ansi - Fix bug in deflateBound() for level 0 and memLevel 9 diff --git a/src/zlib/zlib-1.3/FAQ b/src/zlib/zlib-1.3.1/FAQ similarity index 99% rename from src/zlib/zlib-1.3/FAQ rename to src/zlib/zlib-1.3.1/FAQ index 55f1cdc22..92f5d3e29 100644 --- a/src/zlib/zlib-1.3/FAQ +++ b/src/zlib/zlib-1.3.1/FAQ @@ -14,8 +14,7 @@ The latest zlib FAQ is at http://zlib.net/zlib_faq.html 2. Where can I get a Windows DLL version? The zlib sources can be compiled without change to produce a DLL. See the - file win32/DLL_FAQ.txt in the zlib distribution. Pointers to the - precompiled DLL are found in the zlib web site at http://zlib.net/ . + file win32/DLL_FAQ.txt in the zlib distribution. 3. Where can I get a Visual Basic interface to zlib? diff --git a/src/zlib/zlib-1.3/INDEX b/src/zlib/zlib-1.3.1/INDEX similarity index 100% rename from src/zlib/zlib-1.3/INDEX rename to src/zlib/zlib-1.3.1/INDEX diff --git a/src/zlib/zlib-1.3/LICENSE b/src/zlib/zlib-1.3.1/LICENSE similarity index 100% rename from src/zlib/zlib-1.3/LICENSE rename to src/zlib/zlib-1.3.1/LICENSE diff --git a/src/zlib/zlib-1.3/Makefile b/src/zlib/zlib-1.3.1/Makefile similarity index 100% rename from src/zlib/zlib-1.3/Makefile rename to src/zlib/zlib-1.3.1/Makefile diff --git a/src/zlib/zlib-1.3/Makefile.in b/src/zlib/zlib-1.3.1/Makefile.in similarity index 96% rename from src/zlib/zlib-1.3/Makefile.in rename to src/zlib/zlib-1.3.1/Makefile.in index 34d3cd722..cb8b00a9b 100644 --- a/src/zlib/zlib-1.3/Makefile.in +++ b/src/zlib/zlib-1.3.1/Makefile.in @@ -1,5 +1,5 @@ # Makefile for zlib -# Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler +# Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler # For conditions of distribution and use, see copyright notice in zlib.h # To compile and test, type: @@ -22,13 +22,13 @@ CFLAGS=-O SFLAGS=-O LDFLAGS= -TEST_LDFLAGS=$(LDFLAGS) -L. libz.a +TEST_LIBS=-L. libz.a LDSHARED=$(CC) CPP=$(CC) -E STATICLIB=libz.a SHAREDLIB=libz.so -SHAREDLIBV=libz.so.1.3 +SHAREDLIBV=libz.so.1.3.1 SHAREDLIBM=libz.so.1 LIBS=$(STATICLIB) $(SHAREDLIBV) @@ -282,10 +282,10 @@ placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a -@rmdir objs example$(EXE): example.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ example.o $(TEST_LIBS) minigzip$(EXE): minigzip.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ minigzip.o $(TEST_LIBS) examplesh$(EXE): example.o $(SHAREDLIBV) $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) -L. $(SHAREDLIBV) @@ -294,10 +294,10 @@ minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) -L. $(SHAREDLIBV) example64$(EXE): example64.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ example64.o $(TEST_LIBS) minigzip64$(EXE): minigzip64.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ minigzip64.o $(TEST_LIBS) install-libs: $(LIBS) -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi @@ -360,7 +360,7 @@ zconf: $(SRCDIR)zconf.h.in cp -p $(SRCDIR)zconf.h.in zconf.h minizip-test: static - cd contrib/minizip && { CFLAGS="$(CFLAGS)" $(MAKE) test ; cd ../.. ; } + cd contrib/minizip && { CC="$(CC)" CFLAGS="$(CFLAGS)" $(MAKE) test ; cd ../.. ; } minizip-clean: cd contrib/minizip && { $(MAKE) clean ; cd ../.. ; } diff --git a/src/zlib/zlib-1.3/README b/src/zlib/zlib-1.3.1/README similarity index 96% rename from src/zlib/zlib-1.3/README rename to src/zlib/zlib-1.3.1/README index e02fc5aa2..c5f917540 100644 --- a/src/zlib/zlib-1.3/README +++ b/src/zlib/zlib-1.3.1/README @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.3 is a general purpose data compression library. All the code is +zlib 1.3.1 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and @@ -31,7 +31,7 @@ Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at https://marknelson.us/posts/1997/01/01/zlib-engine.html . -The changes made in version 1.3 are documented in the file ChangeLog. +The changes made in version 1.3.1 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory contrib/ . @@ -83,7 +83,7 @@ Acknowledgments: Copyright notice: - (C) 1995-2023 Jean-loup Gailly and Mark Adler + (C) 1995-2024 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/src/zlib/zlib-1.3/adler32.c b/src/zlib/zlib-1.3.1/adler32.c similarity index 100% rename from src/zlib/zlib-1.3/adler32.c rename to src/zlib/zlib-1.3.1/adler32.c diff --git a/src/zlib/zlib-1.3/amiga/Makefile.pup b/src/zlib/zlib-1.3.1/amiga/Makefile.pup similarity index 100% rename from src/zlib/zlib-1.3/amiga/Makefile.pup rename to src/zlib/zlib-1.3.1/amiga/Makefile.pup diff --git a/src/zlib/zlib-1.3/amiga/Makefile.sas b/src/zlib/zlib-1.3.1/amiga/Makefile.sas similarity index 100% rename from src/zlib/zlib-1.3/amiga/Makefile.sas rename to src/zlib/zlib-1.3.1/amiga/Makefile.sas diff --git a/src/zlib/zlib-1.3/compress.c b/src/zlib/zlib-1.3.1/compress.c similarity index 100% rename from src/zlib/zlib-1.3/compress.c rename to src/zlib/zlib-1.3.1/compress.c diff --git a/src/zlib/zlib-1.3/configure b/src/zlib/zlib-1.3.1/configure similarity index 99% rename from src/zlib/zlib-1.3/configure rename to src/zlib/zlib-1.3.1/configure index cc867c944..c55098afc 100755 --- a/src/zlib/zlib-1.3/configure +++ b/src/zlib/zlib-1.3.1/configure @@ -25,7 +25,7 @@ if test $SRCDIR = "."; then ZINCOUT="-I." SRCDIR="" else - ZINC='-include zconf.h' + ZINC='-I. -include zconf.h' ZINCOUT='-I. -I$(SRCDIR)' SRCDIR="$SRCDIR/" fi @@ -44,7 +44,8 @@ STATICLIB=libz.a # extract zlib version numbers from zlib.h VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h` -VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h` +VER3=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\(\\.[0-9]\{1,\}\)\{1,2\}\).*/\1/p'` +VER1=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\)\\..*/\1/p'` # establish commands for library building if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then @@ -263,7 +264,7 @@ if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then SHAREDLIB=libz$shared_ext SHAREDLIBV=libz.$VER$shared_ext SHAREDLIBM=libz.$VER1$shared_ext - LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER"} + LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} if "${CROSS_PREFIX}libtool" -V 2>&1 | grep Apple > /dev/null; then AR="${CROSS_PREFIX}libtool" elif libtool -V 2>&1 | grep Apple > /dev/null; then @@ -441,7 +442,7 @@ EOF if test $shared -eq 1; then echo Checking for shared library support... | tee -a configure.log # we must test in two steps (cc then ld), required at least on SunOS 4.x - if try $CC -w -c $SFLAGS $test.c && + if try $CC -c $SFLAGS $test.c && try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log elif test -z "$old_cc" -a -z "$old_cflags"; then diff --git a/src/zlib/zlib-1.3/contrib/README.contrib b/src/zlib/zlib-1.3.1/contrib/README.contrib similarity index 100% rename from src/zlib/zlib-1.3/contrib/README.contrib rename to src/zlib/zlib-1.3.1/contrib/README.contrib diff --git a/src/zlib/zlib-1.3/contrib/ada/buffer_demo.adb b/src/zlib/zlib-1.3.1/contrib/ada/buffer_demo.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/buffer_demo.adb rename to src/zlib/zlib-1.3.1/contrib/ada/buffer_demo.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/mtest.adb b/src/zlib/zlib-1.3.1/contrib/ada/mtest.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/mtest.adb rename to src/zlib/zlib-1.3.1/contrib/ada/mtest.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/read.adb b/src/zlib/zlib-1.3.1/contrib/ada/read.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/read.adb rename to src/zlib/zlib-1.3.1/contrib/ada/read.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/readme.txt b/src/zlib/zlib-1.3.1/contrib/ada/readme.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/readme.txt rename to src/zlib/zlib-1.3.1/contrib/ada/readme.txt diff --git a/src/zlib/zlib-1.3/contrib/ada/test.adb b/src/zlib/zlib-1.3.1/contrib/ada/test.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/test.adb rename to src/zlib/zlib-1.3.1/contrib/ada/test.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib-streams.adb b/src/zlib/zlib-1.3.1/contrib/ada/zlib-streams.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib-streams.adb rename to src/zlib/zlib-1.3.1/contrib/ada/zlib-streams.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib-streams.ads b/src/zlib/zlib-1.3.1/contrib/ada/zlib-streams.ads similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib-streams.ads rename to src/zlib/zlib-1.3.1/contrib/ada/zlib-streams.ads diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib-thin.adb b/src/zlib/zlib-1.3.1/contrib/ada/zlib-thin.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib-thin.adb rename to src/zlib/zlib-1.3.1/contrib/ada/zlib-thin.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib-thin.ads b/src/zlib/zlib-1.3.1/contrib/ada/zlib-thin.ads similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib-thin.ads rename to src/zlib/zlib-1.3.1/contrib/ada/zlib-thin.ads diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib.adb b/src/zlib/zlib-1.3.1/contrib/ada/zlib.adb similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib.adb rename to src/zlib/zlib-1.3.1/contrib/ada/zlib.adb diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib.ads b/src/zlib/zlib-1.3.1/contrib/ada/zlib.ads similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib.ads rename to src/zlib/zlib-1.3.1/contrib/ada/zlib.ads diff --git a/src/zlib/zlib-1.3/contrib/ada/zlib.gpr b/src/zlib/zlib-1.3.1/contrib/ada/zlib.gpr similarity index 100% rename from src/zlib/zlib-1.3/contrib/ada/zlib.gpr rename to src/zlib/zlib-1.3.1/contrib/ada/zlib.gpr diff --git a/src/zlib/zlib-1.3/contrib/blast/Makefile b/src/zlib/zlib-1.3.1/contrib/blast/Makefile similarity index 100% rename from src/zlib/zlib-1.3/contrib/blast/Makefile rename to src/zlib/zlib-1.3.1/contrib/blast/Makefile diff --git a/src/zlib/zlib-1.3/contrib/blast/README b/src/zlib/zlib-1.3.1/contrib/blast/README similarity index 100% rename from src/zlib/zlib-1.3/contrib/blast/README rename to src/zlib/zlib-1.3.1/contrib/blast/README diff --git a/src/zlib/zlib-1.3/contrib/blast/blast.c b/src/zlib/zlib-1.3.1/contrib/blast/blast.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/blast/blast.c rename to src/zlib/zlib-1.3.1/contrib/blast/blast.c diff --git a/src/zlib/zlib-1.3/contrib/blast/blast.h b/src/zlib/zlib-1.3.1/contrib/blast/blast.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/blast/blast.h rename to src/zlib/zlib-1.3.1/contrib/blast/blast.h diff --git a/src/zlib/zlib-1.3/contrib/blast/test.pk b/src/zlib/zlib-1.3.1/contrib/blast/test.pk similarity index 100% rename from src/zlib/zlib-1.3/contrib/blast/test.pk rename to src/zlib/zlib-1.3.1/contrib/blast/test.pk diff --git a/src/zlib/zlib-1.3/contrib/blast/test.txt b/src/zlib/zlib-1.3.1/contrib/blast/test.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/blast/test.txt rename to src/zlib/zlib-1.3.1/contrib/blast/test.txt diff --git a/src/zlib/zlib-1.3/contrib/delphi/ZLib.pas b/src/zlib/zlib-1.3.1/contrib/delphi/ZLib.pas similarity index 99% rename from src/zlib/zlib-1.3/contrib/delphi/ZLib.pas rename to src/zlib/zlib-1.3.1/contrib/delphi/ZLib.pas index 814ffa670..93fa4c9ed 100644 --- a/src/zlib/zlib-1.3/contrib/delphi/ZLib.pas +++ b/src/zlib/zlib-1.3.1/contrib/delphi/ZLib.pas @@ -152,7 +152,7 @@ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; const OutBuf: Pointer; BufSize: Integer); const - zlib_version = '1.3.0'; + zlib_version = '1.3.1'; type EZlibError = class(Exception); diff --git a/src/zlib/zlib-1.3/contrib/delphi/ZLibConst.pas b/src/zlib/zlib-1.3.1/contrib/delphi/ZLibConst.pas similarity index 100% rename from src/zlib/zlib-1.3/contrib/delphi/ZLibConst.pas rename to src/zlib/zlib-1.3.1/contrib/delphi/ZLibConst.pas diff --git a/src/zlib/zlib-1.3/contrib/delphi/readme.txt b/src/zlib/zlib-1.3.1/contrib/delphi/readme.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/delphi/readme.txt rename to src/zlib/zlib-1.3.1/contrib/delphi/readme.txt diff --git a/src/zlib/zlib-1.3/contrib/delphi/zlibd32.mak b/src/zlib/zlib-1.3.1/contrib/delphi/zlibd32.mak similarity index 100% rename from src/zlib/zlib-1.3/contrib/delphi/zlibd32.mak rename to src/zlib/zlib-1.3.1/contrib/delphi/zlibd32.mak diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.build b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib.build similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.build rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib.build diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.chm b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib.chm similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.chm rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib.chm diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.sln b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib.sln similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.sln rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib.sln diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/AssemblyInfo.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/AssemblyInfo.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs similarity index 97% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs index c1230bf03..de88dcf11 100644 --- a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +++ b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs @@ -34,7 +34,7 @@ public ChecksumGeneratorBase() } ///

- /// Initializes a new instance of the checksum generator basewith a specified value + /// Initializes a new instance of the checksum generator base with a specified value /// /// The value to set the current checksum to public ChecksumGeneratorBase(uint initialValue) diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CircularBuffer.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/CircularBuffer.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CircularBuffer.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/CircularBuffer.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CodecBase.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/CodecBase.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CodecBase.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/CodecBase.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Deflater.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/Deflater.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Deflater.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/Deflater.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.csproj b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.csproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.csproj rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.csproj diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/GZipStream.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/GZipStream.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/GZipStream.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/GZipStream.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Inflater.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/Inflater.cs similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Inflater.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/Inflater.cs diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/UnitTests.cs b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs similarity index 95% rename from src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/UnitTests.cs rename to src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs index c5fce221a..d4f098023 100644 --- a/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/UnitTests.cs +++ b/src/zlib/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs @@ -156,7 +156,7 @@ public class InfoTests public void Info_Version() { Info info = new Info(); - Assert.AreEqual("1.3.0", Info.Version); + Assert.AreEqual("1.3.1", Info.Version); Assert.AreEqual(32, info.SizeOfUInt); Assert.AreEqual(32, info.SizeOfULong); Assert.AreEqual(32, info.SizeOfPointer); diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/LICENSE_1_0.txt b/src/zlib/zlib-1.3.1/contrib/dotzlib/LICENSE_1_0.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/LICENSE_1_0.txt rename to src/zlib/zlib-1.3.1/contrib/dotzlib/LICENSE_1_0.txt diff --git a/src/zlib/zlib-1.3/contrib/dotzlib/readme.txt b/src/zlib/zlib-1.3.1/contrib/dotzlib/readme.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/dotzlib/readme.txt rename to src/zlib/zlib-1.3.1/contrib/dotzlib/readme.txt diff --git a/src/zlib/zlib-1.3/contrib/gcc_gvmat64/gvmat64.S b/src/zlib/zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S similarity index 100% rename from src/zlib/zlib-1.3/contrib/gcc_gvmat64/gvmat64.S rename to src/zlib/zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S diff --git a/src/zlib/zlib-1.3/contrib/infback9/README b/src/zlib/zlib-1.3.1/contrib/infback9/README similarity index 100% rename from src/zlib/zlib-1.3/contrib/infback9/README rename to src/zlib/zlib-1.3.1/contrib/infback9/README diff --git a/src/zlib/zlib-1.3/contrib/infback9/infback9.c b/src/zlib/zlib-1.3.1/contrib/infback9/infback9.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/infback9/infback9.c rename to src/zlib/zlib-1.3.1/contrib/infback9/infback9.c diff --git a/src/zlib/zlib-1.3/contrib/infback9/infback9.h b/src/zlib/zlib-1.3.1/contrib/infback9/infback9.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/infback9/infback9.h rename to src/zlib/zlib-1.3.1/contrib/infback9/infback9.h diff --git a/src/zlib/zlib-1.3/contrib/infback9/inffix9.h b/src/zlib/zlib-1.3.1/contrib/infback9/inffix9.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/infback9/inffix9.h rename to src/zlib/zlib-1.3.1/contrib/infback9/inffix9.h diff --git a/src/zlib/zlib-1.3/contrib/infback9/inflate9.h b/src/zlib/zlib-1.3.1/contrib/infback9/inflate9.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/infback9/inflate9.h rename to src/zlib/zlib-1.3.1/contrib/infback9/inflate9.h diff --git a/src/zlib/zlib-1.3/contrib/infback9/inftree9.c b/src/zlib/zlib-1.3.1/contrib/infback9/inftree9.c similarity index 98% rename from src/zlib/zlib-1.3/contrib/infback9/inftree9.c rename to src/zlib/zlib-1.3.1/contrib/infback9/inftree9.c index dc38f24de..ac707ed3f 100644 --- a/src/zlib/zlib-1.3/contrib/infback9/inftree9.c +++ b/src/zlib/zlib-1.3.1/contrib/infback9/inftree9.c @@ -1,5 +1,5 @@ /* inftree9.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2023 Mark Adler + * Copyright (C) 1995-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate9_copyright[] = - " inflate9 1.3 Copyright 1995-2023 Mark Adler "; + " inflate9 1.3.1 Copyright 1995-2024 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -59,7 +59,7 @@ int inflate_table9(codetype type, unsigned short FAR *lens, unsigned codes, static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, - 133, 133, 133, 133, 144, 198, 203}; + 133, 133, 133, 133, 144, 203, 77}; static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, diff --git a/src/zlib/zlib-1.3/contrib/infback9/inftree9.h b/src/zlib/zlib-1.3.1/contrib/infback9/inftree9.h similarity index 94% rename from src/zlib/zlib-1.3/contrib/infback9/inftree9.h rename to src/zlib/zlib-1.3.1/contrib/infback9/inftree9.h index 2c1252f57..ab2ea28b2 100644 --- a/src/zlib/zlib-1.3/contrib/infback9/inftree9.h +++ b/src/zlib/zlib-1.3.1/contrib/infback9/inftree9.h @@ -41,8 +41,8 @@ typedef struct { examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes - returns returns 852, and "enough 32 6 15" for distance codes returns 594. - The initial root table size (9 or 6) is found in the fifth argument of the + returns 852, and "enough 32 6 15" for distance codes returns 594. The + initial root table size (9 or 6) is found in the fifth argument of the inflate_table() calls in infback9.c. If the root table size is changed, then these maximum sizes would be need to be recalculated and updated. */ #define ENOUGH_LENS 852 diff --git a/src/zlib/zlib-1.3/contrib/iostream/test.cpp b/src/zlib/zlib-1.3.1/contrib/iostream/test.cpp similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream/test.cpp rename to src/zlib/zlib-1.3.1/contrib/iostream/test.cpp diff --git a/src/zlib/zlib-1.3/contrib/iostream/zfstream.cpp b/src/zlib/zlib-1.3.1/contrib/iostream/zfstream.cpp similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream/zfstream.cpp rename to src/zlib/zlib-1.3.1/contrib/iostream/zfstream.cpp diff --git a/src/zlib/zlib-1.3/contrib/iostream/zfstream.h b/src/zlib/zlib-1.3.1/contrib/iostream/zfstream.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream/zfstream.h rename to src/zlib/zlib-1.3.1/contrib/iostream/zfstream.h diff --git a/src/zlib/zlib-1.3/contrib/iostream2/zstream.h b/src/zlib/zlib-1.3.1/contrib/iostream2/zstream.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream2/zstream.h rename to src/zlib/zlib-1.3.1/contrib/iostream2/zstream.h diff --git a/src/zlib/zlib-1.3/contrib/iostream2/zstream_test.cpp b/src/zlib/zlib-1.3.1/contrib/iostream2/zstream_test.cpp similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream2/zstream_test.cpp rename to src/zlib/zlib-1.3.1/contrib/iostream2/zstream_test.cpp diff --git a/src/zlib/zlib-1.3/contrib/iostream3/README b/src/zlib/zlib-1.3.1/contrib/iostream3/README similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream3/README rename to src/zlib/zlib-1.3.1/contrib/iostream3/README diff --git a/src/zlib/zlib-1.3/contrib/iostream3/TODO b/src/zlib/zlib-1.3.1/contrib/iostream3/TODO similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream3/TODO rename to src/zlib/zlib-1.3.1/contrib/iostream3/TODO diff --git a/src/zlib/zlib-1.3/contrib/iostream3/test.cc b/src/zlib/zlib-1.3.1/contrib/iostream3/test.cc similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream3/test.cc rename to src/zlib/zlib-1.3.1/contrib/iostream3/test.cc diff --git a/src/zlib/zlib-1.3/contrib/iostream3/zfstream.cc b/src/zlib/zlib-1.3.1/contrib/iostream3/zfstream.cc similarity index 100% rename from src/zlib/zlib-1.3/contrib/iostream3/zfstream.cc rename to src/zlib/zlib-1.3.1/contrib/iostream3/zfstream.cc diff --git a/src/zlib/zlib-1.3/contrib/iostream3/zfstream.h b/src/zlib/zlib-1.3.1/contrib/iostream3/zfstream.h similarity index 99% rename from src/zlib/zlib-1.3/contrib/iostream3/zfstream.h rename to src/zlib/zlib-1.3.1/contrib/iostream3/zfstream.h index 8574479ae..3dabc0f97 100644 --- a/src/zlib/zlib-1.3/contrib/iostream3/zfstream.h +++ b/src/zlib/zlib-1.3.1/contrib/iostream3/zfstream.h @@ -413,7 +413,7 @@ template class gzomanip2 { public: - // Allows insertor to peek at internals + // Allows inserter to peek at internals template friend gzofstream& operator<<(gzofstream&, @@ -452,7 +452,7 @@ template : func(f), val1(v1), val2(v2) { } -// Insertor applies underlying manipulator function to stream +// Inserter applies underlying manipulator function to stream template inline gzofstream& operator<<(gzofstream& s, const gzomanip2& m) diff --git a/src/zlib/zlib-1.3/contrib/minizip/Makefile b/src/zlib/zlib-1.3.1/contrib/minizip/Makefile similarity index 98% rename from src/zlib/zlib-1.3/contrib/minizip/Makefile rename to src/zlib/zlib-1.3.1/contrib/minizip/Makefile index aac76e07f..3d927ec14 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/Makefile +++ b/src/zlib/zlib-1.3.1/contrib/minizip/Makefile @@ -1,4 +1,4 @@ -CC=cc +CC?=cc CFLAGS := $(CFLAGS) -O -I../.. UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a diff --git a/src/zlib/zlib-1.3/contrib/minizip/Makefile.am b/src/zlib/zlib-1.3.1/contrib/minizip/Makefile.am similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/Makefile.am rename to src/zlib/zlib-1.3.1/contrib/minizip/Makefile.am diff --git a/src/zlib/zlib-1.3/contrib/minizip/MiniZip64_Changes.txt b/src/zlib/zlib-1.3.1/contrib/minizip/MiniZip64_Changes.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/MiniZip64_Changes.txt rename to src/zlib/zlib-1.3.1/contrib/minizip/MiniZip64_Changes.txt diff --git a/src/zlib/zlib-1.3/contrib/minizip/MiniZip64_info.txt b/src/zlib/zlib-1.3.1/contrib/minizip/MiniZip64_info.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/MiniZip64_info.txt rename to src/zlib/zlib-1.3.1/contrib/minizip/MiniZip64_info.txt diff --git a/src/zlib/zlib-1.3/contrib/minizip/configure.ac b/src/zlib/zlib-1.3.1/contrib/minizip/configure.ac similarity index 93% rename from src/zlib/zlib-1.3/contrib/minizip/configure.ac rename to src/zlib/zlib-1.3.1/contrib/minizip/configure.ac index df80e5b7e..15ec91718 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/configure.ac +++ b/src/zlib/zlib-1.3.1/contrib/minizip/configure.ac @@ -1,7 +1,7 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_INIT([minizip], [1.3.0], [bugzilla.redhat.com]) +AC_INIT([minizip], [1.3.1], [bugzilla.redhat.com]) AC_CONFIG_SRCDIR([minizip.c]) AM_INIT_AUTOMAKE([foreign]) LT_INIT diff --git a/src/zlib/zlib-1.3/contrib/minizip/crypt.h b/src/zlib/zlib-1.3.1/contrib/minizip/crypt.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/crypt.h rename to src/zlib/zlib-1.3.1/contrib/minizip/crypt.h diff --git a/src/zlib/zlib-1.3/contrib/minizip/ioapi.c b/src/zlib/zlib-1.3.1/contrib/minizip/ioapi.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/ioapi.c rename to src/zlib/zlib-1.3.1/contrib/minizip/ioapi.c diff --git a/src/zlib/zlib-1.3/contrib/minizip/ioapi.h b/src/zlib/zlib-1.3.1/contrib/minizip/ioapi.h similarity index 99% rename from src/zlib/zlib-1.3/contrib/minizip/ioapi.h rename to src/zlib/zlib-1.3.1/contrib/minizip/ioapi.h index c588a18d0..a2d2e6e60 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/ioapi.h +++ b/src/zlib/zlib-1.3.1/contrib/minizip/ioapi.h @@ -144,7 +144,7 @@ typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream) typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin); -/* here is the "old" 32 bits structure structure */ +/* here is the "old" 32 bits structure */ typedef struct zlib_filefunc_def_s { open_file_func zopen_file; diff --git a/src/zlib/zlib-1.3/contrib/minizip/iowin32.c b/src/zlib/zlib-1.3.1/contrib/minizip/iowin32.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/iowin32.c rename to src/zlib/zlib-1.3.1/contrib/minizip/iowin32.c diff --git a/src/zlib/zlib-1.3/contrib/minizip/iowin32.h b/src/zlib/zlib-1.3.1/contrib/minizip/iowin32.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/iowin32.h rename to src/zlib/zlib-1.3.1/contrib/minizip/iowin32.h diff --git a/src/zlib/zlib-1.3/contrib/minizip/make_vms.com b/src/zlib/zlib-1.3.1/contrib/minizip/make_vms.com similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/make_vms.com rename to src/zlib/zlib-1.3.1/contrib/minizip/make_vms.com diff --git a/src/zlib/zlib-1.3/contrib/minizip/miniunz.c b/src/zlib/zlib-1.3.1/contrib/minizip/miniunz.c similarity index 96% rename from src/zlib/zlib-1.3/contrib/minizip/miniunz.c rename to src/zlib/zlib-1.3.1/contrib/minizip/miniunz.c index a12aec8be..d627c4226 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/miniunz.c +++ b/src/zlib/zlib-1.3.1/contrib/minizip/miniunz.c @@ -79,7 +79,7 @@ /* change_file_date : change the date/time of a file filename : the filename of the file where date/time must be modified - dosdate : the new date at the MSDos format (4 bytes) + dosdate : the new date at the MSDOS format (4 bytes) tmu_date : the SAME new date at the tm_unz format */ static void change_file_date(const char *filename, uLong dosdate, tm_unz tmu_date) { #ifdef _WIN32 @@ -186,7 +186,7 @@ static int makedir(const char *newdir) { } static void do_banner(void) { - printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); + printf("MiniUnz 1.1, demo of zLib + Unz package written by Gilles Vollant\n"); printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); } @@ -356,6 +356,20 @@ static int do_extract_currentfile(unzFile uf, const int* popt_extract_without_pa else write_filename = filename_withoutpath; + if (write_filename[0]!='\0') + { + const char* relative_check = write_filename; + while (relative_check[1]!='\0') + { + if (relative_check[0]=='.' && relative_check[1]=='.') + write_filename = relative_check; + relative_check++; + } + } + + while (write_filename[0]=='/' || write_filename[0]=='.') + write_filename++; + err = unzOpenCurrentFilePassword(uf,password); if (err!=UNZ_OK) { diff --git a/src/zlib/zlib-1.3/contrib/minizip/miniunzip.1 b/src/zlib/zlib-1.3.1/contrib/minizip/miniunzip.1 similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/miniunzip.1 rename to src/zlib/zlib-1.3.1/contrib/minizip/miniunzip.1 diff --git a/src/zlib/zlib-1.3/contrib/minizip/minizip.1 b/src/zlib/zlib-1.3.1/contrib/minizip/minizip.1 similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/minizip.1 rename to src/zlib/zlib-1.3.1/contrib/minizip/minizip.1 diff --git a/src/zlib/zlib-1.3/contrib/minizip/minizip.c b/src/zlib/zlib-1.3.1/contrib/minizip/minizip.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/minizip.c rename to src/zlib/zlib-1.3.1/contrib/minizip/minizip.c diff --git a/src/zlib/zlib-1.3/contrib/minizip/minizip.pc.in b/src/zlib/zlib-1.3.1/contrib/minizip/minizip.pc.in similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/minizip.pc.in rename to src/zlib/zlib-1.3.1/contrib/minizip/minizip.pc.in diff --git a/src/zlib/zlib-1.3/contrib/minizip/mztools.c b/src/zlib/zlib-1.3.1/contrib/minizip/mztools.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/mztools.c rename to src/zlib/zlib-1.3.1/contrib/minizip/mztools.c diff --git a/src/zlib/zlib-1.3/contrib/minizip/mztools.h b/src/zlib/zlib-1.3.1/contrib/minizip/mztools.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/minizip/mztools.h rename to src/zlib/zlib-1.3.1/contrib/minizip/mztools.h diff --git a/src/zlib/zlib-1.3/contrib/minizip/unzip.c b/src/zlib/zlib-1.3.1/contrib/minizip/unzip.c similarity index 99% rename from src/zlib/zlib-1.3/contrib/minizip/unzip.c rename to src/zlib/zlib-1.3.1/contrib/minizip/unzip.c index ed763f89f..ea05b7d62 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/unzip.c +++ b/src/zlib/zlib-1.3.1/contrib/minizip/unzip.c @@ -117,7 +117,7 @@ const char unz_copyright[] = " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; -/* unz_file_info_interntal contain internal info about a file in zipfile*/ +/* unz_file_info64_internal contain internal info about a file in zipfile*/ typedef struct unz_file_info64_internal_s { ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */ @@ -450,7 +450,7 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) return CENTRALDIRINVALID; - /* number of the disk with the start of the zip64 end of central directory */ + /* number of the disk with the start of the zip64 end of central directory */ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) return CENTRALDIRINVALID; if (uL != 0) @@ -497,9 +497,9 @@ local unzFile unzOpenInternal(const void *path, ZPOS64_T central_pos; uLong uL; - uLong number_disk; /* number of the current dist, used for + uLong number_disk; /* number of the current disk, used for spanning ZIP, unsupported, always 0*/ - uLong number_disk_with_CD; /* number the the disk with central dir, used + uLong number_disk_with_CD; /* number the disk with central dir, used for spanning ZIP, unsupported, always 0*/ ZPOS64_T number_entry_CD; /* total number of entries in the central dir diff --git a/src/zlib/zlib-1.3/contrib/minizip/unzip.h b/src/zlib/zlib-1.3.1/contrib/minizip/unzip.h similarity index 99% rename from src/zlib/zlib-1.3/contrib/minizip/unzip.h rename to src/zlib/zlib-1.3.1/contrib/minizip/unzip.h index 14105840f..5cfc9c627 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/unzip.h +++ b/src/zlib/zlib-1.3.1/contrib/minizip/unzip.h @@ -306,7 +306,7 @@ extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, Get Info about the current file if pfile_info!=NULL, the *pfile_info structure will contain some info about the current file - if szFileName!=NULL, the filemane string will be copied in szFileName + if szFileName!=NULL, the filename string will be copied in szFileName (fileNameBufferSize is the size of the buffer) if extraField!=NULL, the extra field information will be copied in extraField (extraFieldBufferSize is the size of the buffer). diff --git a/src/zlib/zlib-1.3/contrib/minizip/zip.c b/src/zlib/zlib-1.3.1/contrib/minizip/zip.c similarity index 98% rename from src/zlib/zlib-1.3/contrib/minizip/zip.c rename to src/zlib/zlib-1.3.1/contrib/minizip/zip.c index 3d3d4cadd..60bdffac3 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/zip.c +++ b/src/zlib/zlib-1.3.1/contrib/minizip/zip.c @@ -575,7 +575,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) return 0; - /* number of the disk with the start of the zip64 end of central directory */ + /* number of the disk with the start of the zip64 end of central directory */ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) return 0; if (uL != 0) @@ -614,9 +614,9 @@ local int LoadCentralDirectoryRecord(zip64_internal* pziinit) { ZPOS64_T central_pos; uLong uL; - uLong number_disk; /* number of the current dist, used for + uLong number_disk; /* number of the current disk, used for spanning ZIP, unsupported, always 0*/ - uLong number_disk_with_CD; /* number the the disk with central dir, used + uLong number_disk_with_CD; /* number of the disk with central dir, used for spanning ZIP, unsupported, always 0*/ ZPOS64_T number_entry; ZPOS64_T number_entry_CD; /* total number of entries in @@ -1043,6 +1043,17 @@ extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char* filename, c return ZIP_PARAMERROR; #endif + // The filename and comment length must fit in 16 bits. + if ((filename!=NULL) && (strlen(filename)>0xffff)) + return ZIP_PARAMERROR; + if ((comment!=NULL) && (strlen(comment)>0xffff)) + return ZIP_PARAMERROR; + // The extra field length must fit in 16 bits. If the member also requires + // a Zip64 extra block, that will also need to fit within that 16-bit + // length, but that will be checked for later. + if ((size_extrafield_local>0xffff) || (size_extrafield_global>0xffff)) + return ZIP_PARAMERROR; + zi = (zip64_internal*)file; if (zi->in_opened_file_inzip == 1) @@ -1597,7 +1608,7 @@ extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, ZPOS64_T uncompressed_si if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree) { - // we can not write more data to the buffer that we have room for. + // we cannot write more data to the buffer that we have room for. return ZIP_BADZIPFILE; } @@ -1861,7 +1872,7 @@ extern int ZEXPORT zipClose(zipFile file, const char* global_comment) { free_linkedlist(&(zi->central_dir)); pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; - if(pos >= 0xffffffff || zi->number_entry > 0xFFFF) + if(pos >= 0xffffffff || zi->number_entry >= 0xFFFF) { ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream); Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); diff --git a/src/zlib/zlib-1.3/contrib/minizip/zip.h b/src/zlib/zlib-1.3.1/contrib/minizip/zip.h similarity index 99% rename from src/zlib/zlib-1.3/contrib/minizip/zip.h rename to src/zlib/zlib-1.3.1/contrib/minizip/zip.h index 5fc084132..3e230d340 100644 --- a/src/zlib/zlib-1.3/contrib/minizip/zip.h +++ b/src/zlib/zlib-1.3.1/contrib/minizip/zip.h @@ -177,9 +177,9 @@ extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, filename : the filename in zip (if NULL, '-' without quote will be used *zipfi contain supplemental information if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local - contains the extrafield data the the local header + contains the extrafield data for the local header if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global - contains the extrafield data the the local header + contains the extrafield data for the global header if comment != NULL, comment contain the comment string method contain the compression method (0 for store, Z_DEFLATED for deflate) level contain the level of compression (can be Z_DEFAULT_COMPRESSION) diff --git a/src/zlib/zlib-1.3.1/contrib/nuget/nuget.csproj b/src/zlib/zlib-1.3.1/contrib/nuget/nuget.csproj new file mode 100644 index 000000000..68627f034 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/nuget/nuget.csproj @@ -0,0 +1,43 @@ + + + + net6.0 + madler.zlib.redist + $(PackageId).win + $(PackageId).linux + $(PackageId).osx + (C) 1995-2024 Jean-loup Gailly and Mark Adler + 1.3.1 + NuGet Package for consuming native builds of zlib into .NET without complexity. + + NU5128 + $(MSBuildProjectDirectory) + Jean-loup Gailly and Mark Adler + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/zlib/zlib-1.3.1/contrib/nuget/nuget.sln b/src/zlib/zlib-1.3.1/contrib/nuget/nuget.sln new file mode 100644 index 000000000..46ee8deab --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/nuget/nuget.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nuget", "nuget.csproj", "{B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/zlib/zlib-1.3/contrib/pascal/example.pas b/src/zlib/zlib-1.3.1/contrib/pascal/example.pas similarity index 100% rename from src/zlib/zlib-1.3/contrib/pascal/example.pas rename to src/zlib/zlib-1.3.1/contrib/pascal/example.pas diff --git a/src/zlib/zlib-1.3/contrib/pascal/readme.txt b/src/zlib/zlib-1.3.1/contrib/pascal/readme.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/pascal/readme.txt rename to src/zlib/zlib-1.3.1/contrib/pascal/readme.txt diff --git a/src/zlib/zlib-1.3/contrib/pascal/zlibd32.mak b/src/zlib/zlib-1.3.1/contrib/pascal/zlibd32.mak similarity index 100% rename from src/zlib/zlib-1.3/contrib/pascal/zlibd32.mak rename to src/zlib/zlib-1.3.1/contrib/pascal/zlibd32.mak diff --git a/src/zlib/zlib-1.3/contrib/pascal/zlibpas.pas b/src/zlib/zlib-1.3.1/contrib/pascal/zlibpas.pas similarity index 99% rename from src/zlib/zlib-1.3/contrib/pascal/zlibpas.pas rename to src/zlib/zlib-1.3.1/contrib/pascal/zlibpas.pas index a2b24a593..0cf0e7b82 100644 --- a/src/zlib/zlib-1.3/contrib/pascal/zlibpas.pas +++ b/src/zlib/zlib-1.3.1/contrib/pascal/zlibpas.pas @@ -10,7 +10,7 @@ interface const - ZLIB_VERSION = '1.3.0'; + ZLIB_VERSION = '1.3.1'; ZLIB_VERNUM = $12a0; type diff --git a/src/zlib/zlib-1.3/contrib/puff/Makefile b/src/zlib/zlib-1.3.1/contrib/puff/Makefile similarity index 100% rename from src/zlib/zlib-1.3/contrib/puff/Makefile rename to src/zlib/zlib-1.3.1/contrib/puff/Makefile diff --git a/src/zlib/zlib-1.3/contrib/puff/README b/src/zlib/zlib-1.3.1/contrib/puff/README similarity index 100% rename from src/zlib/zlib-1.3/contrib/puff/README rename to src/zlib/zlib-1.3.1/contrib/puff/README diff --git a/src/zlib/zlib-1.3/contrib/puff/puff.c b/src/zlib/zlib-1.3.1/contrib/puff/puff.c similarity index 99% rename from src/zlib/zlib-1.3/contrib/puff/puff.c rename to src/zlib/zlib-1.3.1/contrib/puff/puff.c index 6737ff615..d759825ab 100644 --- a/src/zlib/zlib-1.3/contrib/puff/puff.c +++ b/src/zlib/zlib-1.3.1/contrib/puff/puff.c @@ -593,10 +593,10 @@ local int fixed(struct state *s) * provided for each of the literal/length symbols, and for each of the * distance symbols. * - * - If a symbol is not used in the block, this is represented by a zero as - * as the code length. This does not mean a zero-length code, but rather - * that no code should be created for this symbol. There is no way in the - * deflate format to represent a zero-length code. + * - If a symbol is not used in the block, this is represented by a zero as the + * code length. This does not mean a zero-length code, but rather that no + * code should be created for this symbol. There is no way in the deflate + * format to represent a zero-length code. * * - The maximum number of bits in a code is 15, so the possible lengths for * any code are 1..15. diff --git a/src/zlib/zlib-1.3/contrib/puff/puff.h b/src/zlib/zlib-1.3.1/contrib/puff/puff.h similarity index 100% rename from src/zlib/zlib-1.3/contrib/puff/puff.h rename to src/zlib/zlib-1.3.1/contrib/puff/puff.h diff --git a/src/zlib/zlib-1.3/contrib/puff/pufftest.c b/src/zlib/zlib-1.3.1/contrib/puff/pufftest.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/puff/pufftest.c rename to src/zlib/zlib-1.3.1/contrib/puff/pufftest.c diff --git a/src/zlib/zlib-1.3/contrib/puff/zeros.raw b/src/zlib/zlib-1.3.1/contrib/puff/zeros.raw similarity index 100% rename from src/zlib/zlib-1.3/contrib/puff/zeros.raw rename to src/zlib/zlib-1.3.1/contrib/puff/zeros.raw diff --git a/src/zlib/zlib-1.3/contrib/testzlib/testzlib.c b/src/zlib/zlib-1.3.1/contrib/testzlib/testzlib.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/testzlib/testzlib.c rename to src/zlib/zlib-1.3.1/contrib/testzlib/testzlib.c diff --git a/src/zlib/zlib-1.3/contrib/testzlib/testzlib.txt b/src/zlib/zlib-1.3.1/contrib/testzlib/testzlib.txt similarity index 100% rename from src/zlib/zlib-1.3/contrib/testzlib/testzlib.txt rename to src/zlib/zlib-1.3.1/contrib/testzlib/testzlib.txt diff --git a/src/zlib/zlib-1.3/contrib/untgz/Makefile b/src/zlib/zlib-1.3.1/contrib/untgz/Makefile similarity index 100% rename from src/zlib/zlib-1.3/contrib/untgz/Makefile rename to src/zlib/zlib-1.3.1/contrib/untgz/Makefile diff --git a/src/zlib/zlib-1.3/contrib/untgz/Makefile.msc b/src/zlib/zlib-1.3.1/contrib/untgz/Makefile.msc similarity index 100% rename from src/zlib/zlib-1.3/contrib/untgz/Makefile.msc rename to src/zlib/zlib-1.3.1/contrib/untgz/Makefile.msc diff --git a/src/zlib/zlib-1.3/contrib/untgz/untgz.c b/src/zlib/zlib-1.3.1/contrib/untgz/untgz.c similarity index 100% rename from src/zlib/zlib-1.3/contrib/untgz/untgz.c rename to src/zlib/zlib-1.3.1/contrib/untgz/untgz.c diff --git a/src/zlib/zlib-1.3/contrib/vstudio/readme.txt b/src/zlib/zlib-1.3.1/contrib/vstudio/readme.txt similarity index 88% rename from src/zlib/zlib-1.3/contrib/vstudio/readme.txt rename to src/zlib/zlib-1.3.1/contrib/vstudio/readme.txt index 05ba487c9..061bbc0e2 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/readme.txt +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/readme.txt @@ -1,75 +1,81 @@ -Building instructions for the DLL versions of Zlib 1.3.0 -======================================================== - -This directory contains projects that build zlib and minizip using -Microsoft Visual C++ 9.0/10.0. - -You don't need to build these projects yourself. You can download the -binaries from: - http://www.winimage.com/zLibDll - -More information can be found at this site. - - - - - -Build instructions for Visual Studio 2008 (32 bits or 64 bits) --------------------------------------------------------------- -- Decompress current zlib, including all contrib/* files -- Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008 -- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32" - -Build instructions for Visual Studio 2010 (32 bits or 64 bits) --------------------------------------------------------------- -- Decompress current zlib, including all contrib/* files -- Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010 - -Build instructions for Visual Studio 2012 (32 bits or 64 bits) --------------------------------------------------------------- -- Decompress current zlib, including all contrib/* files -- Open contrib\vstudio\vc11\zlibvc.sln with Microsoft Visual C++ 2012 - -Build instructions for Visual Studio 2013 (32 bits or 64 bits) --------------------------------------------------------------- -- Decompress current zlib, including all contrib/* files -- Open contrib\vstudio\vc12\zlibvc.sln with Microsoft Visual C++ 2013 - -Build instructions for Visual Studio 2015 (32 bits or 64 bits) --------------------------------------------------------------- -- Decompress current zlib, including all contrib/* files -- Open contrib\vstudio\vc14\zlibvc.sln with Microsoft Visual C++ 2015 - - -Important ---------- -- To use zlibwapi.dll in your application, you must define the - macro ZLIB_WINAPI when compiling your application's source files. - - -Additional notes ----------------- -- This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built - by Gilles Vollant from the zlib 1.1.x sources, and distributed at - http://www.winimage.com/zLibDll - It uses the WINAPI calling convention for the exported functions, and - includes the minizip functionality. If your application needs that - particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll. - -- The new DLL was renamed because there exist several incompatible - versions of zlib.dll on the Internet. - -- There is also an official DLL build of zlib, named zlib1.dll. This one - is exporting the functions using the CDECL convention. See the file - win32\DLL_FAQ.txt found in this zlib distribution. - -- There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol - has a slightly different effect. To avoid compatibility problems, do - not define it here. - - -Gilles Vollant -info@winimage.com - -Visual Studio 2013 and 2015 Projects from Sean Hunt -seandhunt_7@yahoo.com +Building instructions for the DLL versions of Zlib 1.3.1 +======================================================== + +This directory contains projects that build zlib and minizip using +Microsoft Visual C++ 9.0/10.0. + +You don't need to build these projects yourself. You can download the +binaries from: + http://www.winimage.com/zLibDll + +More information can be found at this site. + + + + + +Build instructions for Visual Studio 2008 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008 +- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32" + +Build instructions for Visual Studio 2010 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010 + +Build instructions for Visual Studio 2012 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc11\zlibvc.sln with Microsoft Visual C++ 2012 + +Build instructions for Visual Studio 2013 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc12\zlibvc.sln with Microsoft Visual C++ 2013 + +Build instructions for Visual Studio 2015 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc14\zlibvc.sln with Microsoft Visual C++ 2015 + +Build instructions for Visual Studio 2022 (64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc143\zlibvc.sln with Microsoft Visual C++ 2022 + + + +Important +--------- +- To use zlibwapi.dll in your application, you must define the + macro ZLIB_WINAPI when compiling your application's source files. + + +Additional notes +---------------- +- This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built + by Gilles Vollant from the zlib 1.1.x sources, and distributed at + http://www.winimage.com/zLibDll + It uses the WINAPI calling convention for the exported functions, and + includes the minizip functionality. If your application needs that + particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll. + +- The new DLL was renamed because there exist several incompatible + versions of zlib.dll on the Internet. + +- There is also an official DLL build of zlib, named zlib1.dll. This one + is exporting the functions using the CDECL convention. See the file + win32\DLL_FAQ.txt found in this zlib distribution. + +- There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol + has a slightly different effect. To avoid compatibility problems, do + not define it here. + + +Gilles Vollant +info@winimage.com + +Visual Studio 2013, 2015, and 2022 Projects from Sean Hunt +seandhunt_7@yahoo.com diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj.filters b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj.filters rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj.filters diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj.filters b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj.filters rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj.filters diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj.filters b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj.filters rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj.filters diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj.filters rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj.filters diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlib.rc b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc similarity index 80% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlib.rc rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc index 29af8e11a..856bd11f0 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlib.rc +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 3, 0, 0 - PRODUCTVERSION 1, 3, 0, 0 + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.3.0\0" + VALUE "FileVersion", "1.3.1\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj.filters rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj.filters diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.def b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.def rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def index f28aa6c73..3234a02d9 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.def +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.3 +VERSION 1.3.1 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.sln b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.sln rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.sln diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj.filters rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj.filters diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/miniunz.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/miniunz.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/miniunz.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/minizip.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/minizip.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/minizip.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlib.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlib.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/testzlib.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlibdll.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlibdll.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlib.rc b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc similarity index 80% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/zlib.rc rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc index 29af8e11a..856bd11f0 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlib.rc +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 3, 0, 0 - PRODUCTVERSION 1, 3, 0, 0 + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.3.0\0" + VALUE "FileVersion", "1.3.1\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibstat.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibstat.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.def b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.def rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def index f28aa6c73..3234a02d9 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.def +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.3 +VERSION 1.3.1 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.sln b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.sln rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.sln diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/miniunz.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/miniunz.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/miniunz.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/minizip.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/minizip.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/minizip.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlib.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlib.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/testzlib.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlibdll.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlibdll.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlib.rc b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc similarity index 83% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/zlib.rc rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc index 57fb31a32..a55f341c7 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlib.rc +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 3, 0, 0 - PRODUCTVERSION 1, 3, 0, 0 + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.3.0\0" + VALUE "FileVersion", "1.3.1\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibstat.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibstat.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.def b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.def rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def index f28aa6c73..3234a02d9 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.def +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.3 +VERSION 1.3.1 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.sln b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.sln rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.sln diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/miniunz.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/miniunz.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/miniunz.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/minizip.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/minizip.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/minizip.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlib.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlib.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/testzlib.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlibdll.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlibdll.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlib.rc b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc similarity index 83% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/zlib.rc rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc index 57fb31a32..a55f341c7 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlib.rc +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 3, 0, 0 - PRODUCTVERSION 1, 3, 0, 0 + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.3.0\0" + VALUE "FileVersion", "1.3.1\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibstat.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibstat.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def new file mode 100644 index 000000000..3234a02d9 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.sln b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.sln rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.sln diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.vcxproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj new file mode 100644 index 000000000..68ef16588 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj @@ -0,0 +1,409 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + 10.0 + + + + Application + MultiByte + v143 + + + Application + Unicode + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + true + true + false + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\MiniUnzip$(Configuration)\ + arm64\MiniUnzip$(Configuration)\Tmp\ + + + arm64\MiniUnzip$(Configuration)\ + arm64\MiniUnzip$(Configuration)\Tmp\ + + + arm\MiniUnzip$(Configuration)\ + arm\MiniUnzip$(Configuration)\Tmp\ + + + arm\MiniUnzip$(Configuration)\ + arm\MiniUnzip$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj new file mode 100644 index 000000000..dd3c52e70 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj @@ -0,0 +1,405 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + 10.0 + + + + Application + MultiByte + v143 + + + Application + Unicode + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + true + true + false + false + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\MiniZip$(Configuration)\ + arm64\MiniZip$(Configuration)\Tmp\ + + + arm64\MiniZip$(Configuration)\ + arm64\MiniZip$(Configuration)\Tmp\ + + + arm\MiniZip$(Configuration)\ + arm\MiniZip$(Configuration)\Tmp\ + + + arm\MiniZip$(Configuration)\ + arm\MiniZip$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj new file mode 100644 index 000000000..4cc99b3ff --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj @@ -0,0 +1,473 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + ARM + + + ReleaseWithoutAsm + ARM64 + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + 10.0 + + + + Application + MultiByte + true + v143 + + + Application + MultiByte + true + v143 + + + Application + Unicode + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + v143 + + + Application + v143 + + + Application + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\TestZlib$(Configuration)\ + arm64\TestZlib$(Configuration)\Tmp\ + + + arm64\TestZlib$(Configuration)\ + arm64\TestZlib$(Configuration)\Tmp\ + + + arm64\TestZlib$(Configuration)\ + arm64\TestZlib$(Configuration)\Tmp\ + + + arm\TestZlib$(Configuration)\ + arm\TestZlib$(Configuration)\Tmp\ + + + arm\TestZlib$(Configuration)\ + arm\TestZlib$(Configuration)\Tmp\ + + + arm\TestZlib$(Configuration)\ + arm\TestZlib$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + false + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj new file mode 100644 index 000000000..73bba55da --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj @@ -0,0 +1,409 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + 10.0 + + + + Application + MultiByte + v143 + + + Application + Unicode + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + true + true + false + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\TestZlibDll$(Configuration)\ + arm64\TestZlibDll$(Configuration)\Tmp\ + + + arm64\TestZlibDll$(Configuration)\ + arm64\TestZlibDll$(Configuration)\Tmp\ + + + arm\TestZlibDll$(Configuration)\ + arm\TestZlibDll$(Configuration)\Tmp\ + + + arm\TestZlibDll$(Configuration)\ + arm\TestZlibDll$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineX64 + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc new file mode 100644 index 000000000..a55f341c7 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj new file mode 100644 index 000000000..b946ac2a9 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj @@ -0,0 +1,602 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + ARM + + + ReleaseWithoutAsm + ARM64 + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + 10.0 + + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + Unicode + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\ZlibStat$(Configuration)\ + arm64\ZlibStat$(Configuration)\Tmp\ + + + arm64\ZlibStat$(Configuration)\ + arm64\ZlibStat$(Configuration)\Tmp\ + + + arm64\ZlibStat$(Configuration)\ + arm64\ZlibStat$(Configuration)\Tmp\ + + + arm\ZlibStat$(Configuration)\ + arm\ZlibStat$(Configuration)\Tmp\ + + + arm\ZlibStat$(Configuration)\ + arm\ZlibStat$(Configuration)\Tmp\ + + + arm\ZlibStat$(Configuration)\ + arm\ZlibStat$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:ARM64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:ARM /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.def b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.def rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def index f28aa6c73..53947cc31 100644 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.def +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def @@ -1,158 +1,158 @@ -LIBRARY -; zlib data compression and ZIP file I/O library - -VERSION 1.3 - -EXPORTS - adler32 @1 - compress @2 - crc32 @3 - deflate @4 - deflateCopy @5 - deflateEnd @6 - deflateInit2_ @7 - deflateInit_ @8 - deflateParams @9 - deflateReset @10 - deflateSetDictionary @11 - gzclose @12 - gzdopen @13 - gzerror @14 - gzflush @15 - gzopen @16 - gzread @17 - gzwrite @18 - inflate @19 - inflateEnd @20 - inflateInit2_ @21 - inflateInit_ @22 - inflateReset @23 - inflateSetDictionary @24 - inflateSync @25 - uncompress @26 - zlibVersion @27 - gzprintf @28 - gzputc @29 - gzgetc @30 - gzseek @31 - gzrewind @32 - gztell @33 - gzeof @34 - gzsetparams @35 - zError @36 - inflateSyncPoint @37 - get_crc_table @38 - compress2 @39 - gzputs @40 - gzgets @41 - inflateCopy @42 - inflateBackInit_ @43 - inflateBack @44 - inflateBackEnd @45 - compressBound @46 - deflateBound @47 - gzclearerr @48 - gzungetc @49 - zlibCompileFlags @50 - deflatePrime @51 - deflatePending @52 - - unzOpen @61 - unzClose @62 - unzGetGlobalInfo @63 - unzGetCurrentFileInfo @64 - unzGoToFirstFile @65 - unzGoToNextFile @66 - unzOpenCurrentFile @67 - unzReadCurrentFile @68 - unzOpenCurrentFile3 @69 - unztell @70 - unzeof @71 - unzCloseCurrentFile @72 - unzGetGlobalComment @73 - unzStringFileNameCompare @74 - unzLocateFile @75 - unzGetLocalExtrafield @76 - unzOpen2 @77 - unzOpenCurrentFile2 @78 - unzOpenCurrentFilePassword @79 - - zipOpen @80 - zipOpenNewFileInZip @81 - zipWriteInFileInZip @82 - zipCloseFileInZip @83 - zipClose @84 - zipOpenNewFileInZip2 @86 - zipCloseFileInZipRaw @87 - zipOpen2 @88 - zipOpenNewFileInZip3 @89 - - unzGetFilePos @100 - unzGoToFilePos @101 - - fill_win32_filefunc @110 - -; zlibwapi v1.2.4 added: - fill_win32_filefunc64 @111 - fill_win32_filefunc64A @112 - fill_win32_filefunc64W @113 - - unzOpen64 @120 - unzOpen2_64 @121 - unzGetGlobalInfo64 @122 - unzGetCurrentFileInfo64 @124 - unzGetCurrentFileZStreamPos64 @125 - unztell64 @126 - unzGetFilePos64 @127 - unzGoToFilePos64 @128 - - zipOpen64 @130 - zipOpen2_64 @131 - zipOpenNewFileInZip64 @132 - zipOpenNewFileInZip2_64 @133 - zipOpenNewFileInZip3_64 @134 - zipOpenNewFileInZip4_64 @135 - zipCloseFileInZipRaw64 @136 - -; zlib1 v1.2.4 added: - adler32_combine @140 - crc32_combine @142 - deflateSetHeader @144 - deflateTune @145 - gzbuffer @146 - gzclose_r @147 - gzclose_w @148 - gzdirect @149 - gzoffset @150 - inflateGetHeader @156 - inflateMark @157 - inflatePrime @158 - inflateReset2 @159 - inflateUndermine @160 - -; zlib1 v1.2.6 added: - gzgetc_ @161 - inflateResetKeep @163 - deflateResetKeep @164 - -; zlib1 v1.2.7 added: - gzopen_w @165 - -; zlib1 v1.2.8 added: - inflateGetDictionary @166 - gzvprintf @167 - -; zlib1 v1.2.9 added: - inflateCodesUsed @168 - inflateValidate @169 - uncompress2 @170 - gzfread @171 - gzfwrite @172 - deflateGetDictionary @173 - adler32_z @174 - crc32_z @175 - -; zlib1 v1.2.12 added: - crc32_combine_gen @176 - crc32_combine_gen64 @177 - crc32_combine_op @178 +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln new file mode 100644 index 000000000..67896b747 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln @@ -0,0 +1,179 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33015.44 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|ARM = ReleaseWithoutAsm|ARM + ReleaseWithoutAsm|ARM64 = ReleaseWithoutAsm|ARM64 + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM.ActiveCfg = Debug|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM.Build.0 = Debug|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM64.Build.0 = Debug|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM.ActiveCfg = Release|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM.Build.0 = Release|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM64.ActiveCfg = Release|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM64.Build.0 = Release|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM.ActiveCfg = ReleaseWithoutAsm|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM.Build.0 = ReleaseWithoutAsm|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM64.ActiveCfg = ReleaseWithoutAsm|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM64.Build.0 = ReleaseWithoutAsm|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM.ActiveCfg = Debug|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM.Build.0 = Debug|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM64.Build.0 = Debug|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM.ActiveCfg = Release|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM.Build.0 = Release|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM64.ActiveCfg = Release|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM64.Build.0 = Release|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM.ActiveCfg = ReleaseWithoutAsm|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM.Build.0 = ReleaseWithoutAsm|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM64.ActiveCfg = ReleaseWithoutAsm|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM64.Build.0 = ReleaseWithoutAsm|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.ActiveCfg = Debug|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.Build.0 = Debug|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.Build.0 = Debug|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.ActiveCfg = Release|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.Build.0 = Release|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.ActiveCfg = Release|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.Build.0 = Release|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.ActiveCfg = ReleaseWithoutAsm|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.Build.0 = ReleaseWithoutAsm|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.ActiveCfg = ReleaseWithoutAsm|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.Build.0 = ReleaseWithoutAsm|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM.ActiveCfg = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM.Build.0 = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM64.Build.0 = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.ActiveCfg = Debug|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.Build.0 = Debug|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.Build.0 = Debug|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.ActiveCfg = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.Build.0 = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.ActiveCfg = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.Build.0 = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.ActiveCfg = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.Build.0 = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.ActiveCfg = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.Build.0 = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM.ActiveCfg = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM.Build.0 = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM64.Build.0 = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EAA58685-56D9-43F2-8703-FD2CB020745E} + EndGlobalSection +EndGlobal diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj new file mode 100644 index 000000000..10a7a901e --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj @@ -0,0 +1,875 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + ARM + + + ReleaseWithoutAsm + ARM64 + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + 10.0 + + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + v143 + Unicode + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + true + true + false + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + false + false + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + + + arm64\ZlibDll$(Configuration)\ + arm64\ZlibDll$(Configuration)\Tmp\ + + + arm\ZlibDll$(Configuration)\ + arm\ZlibDll$(Configuration)\Tmp\ + + + arm64\ZlibDll$(Configuration)\ + arm64\ZlibDll$(Configuration)\Tmp\ + + + arm64\ZlibDll$(Configuration)\ + arm64\ZlibDll$(Configuration)\Tmp\ + + + arm\ZlibDll$(Configuration)\ + arm\ZlibDll$(Configuration)\Tmp\ + + + arm\ZlibDll$(Configuration)\ + arm\ZlibDll$(Configuration)\Tmp\ + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + false + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN32;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + + + + + + + + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/miniunz.vcproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/miniunz.vcproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/miniunz.vcproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/miniunz.vcproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/minizip.vcproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/minizip.vcproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/minizip.vcproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/minizip.vcproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlib.vcproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/testzlib.vcproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlib.vcproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/testzlib.vcproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlibdll.vcproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/testzlibdll.vcproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlibdll.vcproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/testzlibdll.vcproj diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc new file mode 100644 index 000000000..856bd11f0 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibstat.vcproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibstat.vcproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibstat.vcproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibstat.vcproj diff --git a/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def new file mode 100644 index 000000000..3234a02d9 --- /dev/null +++ b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.sln b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.sln rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.vcproj b/src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.vcproj similarity index 100% rename from src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.vcproj rename to src/zlib/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.vcproj diff --git a/src/zlib/zlib-1.3/crc32.c b/src/zlib/zlib-1.3.1/crc32.c similarity index 100% rename from src/zlib/zlib-1.3/crc32.c rename to src/zlib/zlib-1.3.1/crc32.c diff --git a/src/zlib/zlib-1.3/crc32.h b/src/zlib/zlib-1.3.1/crc32.h similarity index 100% rename from src/zlib/zlib-1.3/crc32.h rename to src/zlib/zlib-1.3.1/crc32.h diff --git a/src/zlib/zlib-1.3/deflate.c b/src/zlib/zlib-1.3.1/deflate.c similarity index 98% rename from src/zlib/zlib-1.3/deflate.c rename to src/zlib/zlib-1.3.1/deflate.c index bd0117519..012ea8148 100644 --- a/src/zlib/zlib-1.3/deflate.c +++ b/src/zlib/zlib-1.3.1/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.3 Copyright 1995-2023 Jean-loup Gailly and Mark Adler "; + " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -493,7 +493,7 @@ int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, * symbols from which it is being constructed. */ - s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS); s->pending_buf_size = (ulg)s->lit_bufsize * 4; if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || @@ -503,8 +503,14 @@ int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, deflateEnd (strm); return Z_MEM_ERROR; } +#ifdef LIT_MEM + s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1)); + s->l_buf = s->pending_buf + (s->lit_bufsize << 2); + s->sym_end = s->lit_bufsize - 1; +#else s->sym_buf = s->pending_buf + s->lit_bufsize; s->sym_end = (s->lit_bufsize - 1) * 3; +#endif /* We avoid equality with lit_bufsize*3 because of wraparound at 64K * on 16 bit machines and because stored blocks are restricted to * 64K-1 bytes. @@ -720,9 +726,15 @@ int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; +#ifdef LIT_MEM + if (bits < 0 || bits > 16 || + (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; +#else if (bits < 0 || bits > 16 || s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) return Z_BUF_ERROR; +#endif do { put = Buf_size - s->bi_valid; if (put > bits) @@ -1294,7 +1306,7 @@ int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); - ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS); if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { @@ -1305,10 +1317,15 @@ int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); - zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +#ifdef LIT_MEM + ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); + ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); +#else ds->sym_buf = ds->pending_buf + ds->lit_bufsize; +#endif ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; @@ -1539,13 +1556,21 @@ local uInt longest_match(deflate_state *s, IPos cur_match) { */ local void check_match(deflate_state *s, IPos start, IPos match, int length) { /* check that the match is indeed a match */ - if (zmemcmp(s->window + match, - s->window + start, length) != EQUAL) { - fprintf(stderr, " start %u, match %u, length %d\n", - start, match, length); + Bytef *back = s->window + (int)match, *here = s->window + start; + IPos len = length; + if (match == (IPos)-1) { + /* match starts one byte before the current window -- just compare the + subsequent length-1 bytes */ + back++; + here++; + len--; + } + if (zmemcmp(back, here, len) != EQUAL) { + fprintf(stderr, " start %u, match %d, length %d\n", + start, (int)match, length); do { - fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); - } while (--length != 0); + fprintf(stderr, "(%02x %02x)", *back++, *here++); + } while (--len != 0); z_error("invalid match"); } if (z_verbose > 1) { diff --git a/src/zlib/zlib-1.3/deflate.h b/src/zlib/zlib-1.3.1/deflate.h similarity index 92% rename from src/zlib/zlib-1.3/deflate.h rename to src/zlib/zlib-1.3.1/deflate.h index 869679142..300c6ada6 100644 --- a/src/zlib/zlib-1.3/deflate.h +++ b/src/zlib/zlib-1.3.1/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2018 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -23,6 +23,10 @@ # define GZIP #endif +/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at + the cost of a larger memory footprint */ +/* #define LIT_MEM */ + /* =========================================================================== * Internal compression state. */ @@ -217,7 +221,14 @@ typedef struct internal_state { /* Depth of each subtree used as tie breaker for trees of equal frequency */ +#ifdef LIT_MEM +# define LIT_BUFS 5 + ushf *d_buf; /* buffer for distances */ + uchf *l_buf; /* buffer for literals/lengths */ +#else +# define LIT_BUFS 4 uchf *sym_buf; /* buffer for distances and literals/lengths */ +#endif uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for @@ -239,7 +250,7 @@ typedef struct internal_state { * - I can't count above 4 */ - uInt sym_next; /* running index in sym_buf */ + uInt sym_next; /* running index in symbol buffer */ uInt sym_end; /* symbol table full when sym_next reaches this */ ulg opt_len; /* bit length of current block with optimal trees */ @@ -318,6 +329,25 @@ void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, extern const uch ZLIB_INTERNAL _dist_code[]; #endif +#ifdef LIT_MEM +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->sym_next] = 0; \ + s->l_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->sym_next] = dist; \ + s->l_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +#else # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ s->sym_buf[s->sym_next++] = 0; \ @@ -337,6 +367,7 @@ void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, s->dyn_dtree[d_code(dist)].Freq++; \ flush = (s->sym_next == s->sym_end); \ } +#endif #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) # define _tr_tally_dist(s, distance, length, flush) \ diff --git a/src/zlib/zlib-1.3/doc/algorithm.txt b/src/zlib/zlib-1.3.1/doc/algorithm.txt similarity index 99% rename from src/zlib/zlib-1.3/doc/algorithm.txt rename to src/zlib/zlib-1.3.1/doc/algorithm.txt index c97f49502..029e5a313 100644 --- a/src/zlib/zlib-1.3/doc/algorithm.txt +++ b/src/zlib/zlib-1.3.1/doc/algorithm.txt @@ -77,7 +77,7 @@ table took no time (and if you had infinite memory), then there would only be a first level table to cover all the way to the longest code. However, building the table ends up taking a lot longer for more bits since short codes are replicated many times in such a table. What inflate() does is -simply to make the number of bits in the first table a variable, and then +simply to make the number of bits in the first table a variable, and then to set that variable for the maximum speed. For inflate, which has 286 possible codes for the literal/length tree, the size diff --git a/src/zlib/zlib-1.3/doc/crc-doc.1.0.pdf b/src/zlib/zlib-1.3.1/doc/crc-doc.1.0.pdf similarity index 100% rename from src/zlib/zlib-1.3/doc/crc-doc.1.0.pdf rename to src/zlib/zlib-1.3.1/doc/crc-doc.1.0.pdf diff --git a/src/zlib/zlib-1.3/doc/rfc1950.txt b/src/zlib/zlib-1.3.1/doc/rfc1950.txt similarity index 100% rename from src/zlib/zlib-1.3/doc/rfc1950.txt rename to src/zlib/zlib-1.3.1/doc/rfc1950.txt diff --git a/src/zlib/zlib-1.3/doc/rfc1951.txt b/src/zlib/zlib-1.3.1/doc/rfc1951.txt similarity index 100% rename from src/zlib/zlib-1.3/doc/rfc1951.txt rename to src/zlib/zlib-1.3.1/doc/rfc1951.txt diff --git a/src/zlib/zlib-1.3/doc/rfc1952.txt b/src/zlib/zlib-1.3.1/doc/rfc1952.txt similarity index 100% rename from src/zlib/zlib-1.3/doc/rfc1952.txt rename to src/zlib/zlib-1.3.1/doc/rfc1952.txt diff --git a/src/zlib/zlib-1.3/doc/txtvsbin.txt b/src/zlib/zlib-1.3.1/doc/txtvsbin.txt similarity index 100% rename from src/zlib/zlib-1.3/doc/txtvsbin.txt rename to src/zlib/zlib-1.3.1/doc/txtvsbin.txt diff --git a/src/zlib/zlib-1.3/examples/README.examples b/src/zlib/zlib-1.3.1/examples/README.examples similarity index 100% rename from src/zlib/zlib-1.3/examples/README.examples rename to src/zlib/zlib-1.3.1/examples/README.examples diff --git a/src/zlib/zlib-1.3/examples/enough.c b/src/zlib/zlib-1.3.1/examples/enough.c similarity index 100% rename from src/zlib/zlib-1.3/examples/enough.c rename to src/zlib/zlib-1.3.1/examples/enough.c diff --git a/src/zlib/zlib-1.3/examples/fitblk.c b/src/zlib/zlib-1.3.1/examples/fitblk.c similarity index 100% rename from src/zlib/zlib-1.3/examples/fitblk.c rename to src/zlib/zlib-1.3.1/examples/fitblk.c diff --git a/src/zlib/zlib-1.3/examples/gun.c b/src/zlib/zlib-1.3.1/examples/gun.c similarity index 100% rename from src/zlib/zlib-1.3/examples/gun.c rename to src/zlib/zlib-1.3.1/examples/gun.c diff --git a/src/zlib/zlib-1.3/examples/gzappend.c b/src/zlib/zlib-1.3.1/examples/gzappend.c similarity index 100% rename from src/zlib/zlib-1.3/examples/gzappend.c rename to src/zlib/zlib-1.3.1/examples/gzappend.c diff --git a/src/zlib/zlib-1.3/examples/gzjoin.c b/src/zlib/zlib-1.3.1/examples/gzjoin.c similarity index 100% rename from src/zlib/zlib-1.3/examples/gzjoin.c rename to src/zlib/zlib-1.3.1/examples/gzjoin.c diff --git a/src/zlib/zlib-1.3/examples/gzlog.c b/src/zlib/zlib-1.3.1/examples/gzlog.c similarity index 99% rename from src/zlib/zlib-1.3/examples/gzlog.c rename to src/zlib/zlib-1.3.1/examples/gzlog.c index b977802dd..da1b02e73 100644 --- a/src/zlib/zlib-1.3/examples/gzlog.c +++ b/src/zlib/zlib-1.3.1/examples/gzlog.c @@ -212,8 +212,8 @@ to the appropriate recovery below. If there is no foo.add file, provide a zero data length to the recovery. In that case, the append recovery restores the foo.gz to the previous compressed + uncompressed data state. - For the the compress recovery, a missing foo.add file results in foo.gz - being restored to the previous compressed-only data state. + For the compress recovery, a missing foo.add file results in foo.gz being + restored to the previous compressed-only data state. - Append recovery: - Pick up append at + step above - Compress recovery: diff --git a/src/zlib/zlib-1.3/examples/gzlog.h b/src/zlib/zlib-1.3.1/examples/gzlog.h similarity index 100% rename from src/zlib/zlib-1.3/examples/gzlog.h rename to src/zlib/zlib-1.3.1/examples/gzlog.h diff --git a/src/zlib/zlib-1.3/examples/gznorm.c b/src/zlib/zlib-1.3.1/examples/gznorm.c similarity index 100% rename from src/zlib/zlib-1.3/examples/gznorm.c rename to src/zlib/zlib-1.3.1/examples/gznorm.c diff --git a/src/zlib/zlib-1.3/examples/zlib_how.html b/src/zlib/zlib-1.3.1/examples/zlib_how.html similarity index 100% rename from src/zlib/zlib-1.3/examples/zlib_how.html rename to src/zlib/zlib-1.3.1/examples/zlib_how.html diff --git a/src/zlib/zlib-1.3/examples/zpipe.c b/src/zlib/zlib-1.3.1/examples/zpipe.c similarity index 100% rename from src/zlib/zlib-1.3/examples/zpipe.c rename to src/zlib/zlib-1.3.1/examples/zpipe.c diff --git a/src/zlib/zlib-1.3/examples/zran.c b/src/zlib/zlib-1.3.1/examples/zran.c similarity index 99% rename from src/zlib/zlib-1.3/examples/zran.c rename to src/zlib/zlib-1.3.1/examples/zran.c index 32c93686c..d3135955b 100644 --- a/src/zlib/zlib-1.3/examples/zran.c +++ b/src/zlib/zlib-1.3.1/examples/zran.c @@ -267,7 +267,7 @@ static inline void append_bits(unsigned value, int bits, } } -// Insert enough bits in the form of empty deflate blocks in front of the the +// Insert enough bits in the form of empty deflate blocks in front of the // low bits bits of value, in order to bring the sequence to a byte boundary. // Then feed that to inflate(). This does what inflatePrime() does, except that // a negative value of bits is not supported. bits must be in 0..16. If the diff --git a/src/zlib/zlib-1.3/examples/zran.h b/src/zlib/zlib-1.3.1/examples/zran.h similarity index 100% rename from src/zlib/zlib-1.3/examples/zran.h rename to src/zlib/zlib-1.3.1/examples/zran.h diff --git a/src/zlib/zlib-1.3/gzclose.c b/src/zlib/zlib-1.3.1/gzclose.c similarity index 100% rename from src/zlib/zlib-1.3/gzclose.c rename to src/zlib/zlib-1.3.1/gzclose.c diff --git a/src/zlib/zlib-1.3/gzguts.h b/src/zlib/zlib-1.3.1/gzguts.h similarity index 96% rename from src/zlib/zlib-1.3/gzguts.h rename to src/zlib/zlib-1.3.1/gzguts.h index f9375047e..eba72085b 100644 --- a/src/zlib/zlib-1.3/gzguts.h +++ b/src/zlib/zlib-1.3.1/gzguts.h @@ -1,5 +1,5 @@ /* gzguts.h -- zlib internal header definitions for gz* operations - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -210,9 +210,5 @@ char ZLIB_INTERNAL *gz_strwinerror(DWORD error); /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t value -- needed when comparing unsigned to z_off64_t, which is signed (possible z_off64_t types off_t, off64_t, and long are all signed) */ -#ifdef INT_MAX -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) -#else unsigned ZLIB_INTERNAL gz_intmax(void); -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) -#endif +#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) diff --git a/src/zlib/zlib-1.3/gzlib.c b/src/zlib/zlib-1.3.1/gzlib.c similarity index 99% rename from src/zlib/zlib-1.3/gzlib.c rename to src/zlib/zlib-1.3.1/gzlib.c index 29fc4486f..983153cc8 100644 --- a/src/zlib/zlib-1.3/gzlib.c +++ b/src/zlib/zlib-1.3.1/gzlib.c @@ -1,5 +1,5 @@ /* gzlib.c -- zlib functions common to reading and writing gzip files - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -563,20 +563,20 @@ void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { #endif } -#ifndef INT_MAX /* portably return maximum value for an int (when limits.h presumed not available) -- we need to do this to cover cases where 2's complement not used, since C standard permits 1's complement and sign-bit representations, otherwise we could just use ((unsigned)-1) >> 1 */ unsigned ZLIB_INTERNAL gz_intmax(void) { - unsigned p, q; - - p = 1; +#ifdef INT_MAX + return INT_MAX; +#else + unsigned p = 1, q; do { q = p; p <<= 1; p++; } while (p > q); return q >> 1; -} #endif +} diff --git a/src/zlib/zlib-1.3/gzread.c b/src/zlib/zlib-1.3.1/gzread.c similarity index 100% rename from src/zlib/zlib-1.3/gzread.c rename to src/zlib/zlib-1.3.1/gzread.c diff --git a/src/zlib/zlib-1.3/gzwrite.c b/src/zlib/zlib-1.3.1/gzwrite.c similarity index 100% rename from src/zlib/zlib-1.3/gzwrite.c rename to src/zlib/zlib-1.3.1/gzwrite.c diff --git a/src/zlib/zlib-1.3/infback.c b/src/zlib/zlib-1.3.1/infback.c similarity index 100% rename from src/zlib/zlib-1.3/infback.c rename to src/zlib/zlib-1.3.1/infback.c diff --git a/src/zlib/zlib-1.3/inffast.c b/src/zlib/zlib-1.3.1/inffast.c similarity index 100% rename from src/zlib/zlib-1.3/inffast.c rename to src/zlib/zlib-1.3.1/inffast.c diff --git a/src/zlib/zlib-1.3/inffast.h b/src/zlib/zlib-1.3.1/inffast.h similarity index 100% rename from src/zlib/zlib-1.3/inffast.h rename to src/zlib/zlib-1.3.1/inffast.h diff --git a/src/zlib/zlib-1.3/inffixed.h b/src/zlib/zlib-1.3.1/inffixed.h similarity index 100% rename from src/zlib/zlib-1.3/inffixed.h rename to src/zlib/zlib-1.3.1/inffixed.h diff --git a/src/zlib/zlib-1.3/inflate.c b/src/zlib/zlib-1.3.1/inflate.c similarity index 99% rename from src/zlib/zlib-1.3/inflate.c rename to src/zlib/zlib-1.3.1/inflate.c index b0757a9b2..94ecff015 100644 --- a/src/zlib/zlib-1.3/inflate.c +++ b/src/zlib/zlib-1.3.1/inflate.c @@ -1387,7 +1387,7 @@ int ZEXPORT inflateSync(z_streamp strm) { /* if first time, start search in bit buffer */ if (state->mode != SYNC) { state->mode = SYNC; - state->hold <<= state->bits & 7; + state->hold >>= state->bits & 7; state->bits -= state->bits & 7; len = 0; while (state->bits >= 8) { diff --git a/src/zlib/zlib-1.3/inflate.h b/src/zlib/zlib-1.3.1/inflate.h similarity index 100% rename from src/zlib/zlib-1.3/inflate.h rename to src/zlib/zlib-1.3.1/inflate.h diff --git a/src/zlib/zlib-1.3/inftrees.c b/src/zlib/zlib-1.3.1/inftrees.c similarity index 98% rename from src/zlib/zlib-1.3/inftrees.c rename to src/zlib/zlib-1.3.1/inftrees.c index 8a208c2da..98cfe1644 100644 --- a/src/zlib/zlib-1.3/inftrees.c +++ b/src/zlib/zlib-1.3.1/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2023 Mark Adler + * Copyright (C) 1995-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.3 Copyright 1995-2023 Mark Adler "; + " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -57,7 +57,7 @@ int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 198, 203}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/src/zlib/zlib-1.3/inftrees.h b/src/zlib/zlib-1.3.1/inftrees.h similarity index 94% rename from src/zlib/zlib-1.3/inftrees.h rename to src/zlib/zlib-1.3.1/inftrees.h index a10712d8c..396f74b5d 100644 --- a/src/zlib/zlib-1.3/inftrees.h +++ b/src/zlib/zlib-1.3.1/inftrees.h @@ -41,8 +41,8 @@ typedef struct { examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes - returns returns 852, and "enough 30 6 15" for distance codes returns 592. - The initial root table size (9 or 6) is found in the fifth argument of the + returns 852, and "enough 30 6 15" for distance codes returns 592. The + initial root table size (9 or 6) is found in the fifth argument of the inflate_table() calls in inflate.c and infback.c. If the root table size is changed, then these maximum sizes would be need to be recalculated and updated. */ diff --git a/src/zlib/zlib-1.3/make_vms.com b/src/zlib/zlib-1.3.1/make_vms.com similarity index 100% rename from src/zlib/zlib-1.3/make_vms.com rename to src/zlib/zlib-1.3.1/make_vms.com diff --git a/src/zlib/zlib-1.3/msdos/Makefile.bor b/src/zlib/zlib-1.3.1/msdos/Makefile.bor similarity index 100% rename from src/zlib/zlib-1.3/msdos/Makefile.bor rename to src/zlib/zlib-1.3.1/msdos/Makefile.bor diff --git a/src/zlib/zlib-1.3/msdos/Makefile.dj2 b/src/zlib/zlib-1.3.1/msdos/Makefile.dj2 similarity index 100% rename from src/zlib/zlib-1.3/msdos/Makefile.dj2 rename to src/zlib/zlib-1.3.1/msdos/Makefile.dj2 diff --git a/src/zlib/zlib-1.3/msdos/Makefile.emx b/src/zlib/zlib-1.3.1/msdos/Makefile.emx similarity index 100% rename from src/zlib/zlib-1.3/msdos/Makefile.emx rename to src/zlib/zlib-1.3.1/msdos/Makefile.emx diff --git a/src/zlib/zlib-1.3/msdos/Makefile.msc b/src/zlib/zlib-1.3.1/msdos/Makefile.msc similarity index 100% rename from src/zlib/zlib-1.3/msdos/Makefile.msc rename to src/zlib/zlib-1.3.1/msdos/Makefile.msc diff --git a/src/zlib/zlib-1.3/msdos/Makefile.tc b/src/zlib/zlib-1.3.1/msdos/Makefile.tc similarity index 100% rename from src/zlib/zlib-1.3/msdos/Makefile.tc rename to src/zlib/zlib-1.3.1/msdos/Makefile.tc diff --git a/src/zlib/zlib-1.3/nintendods/Makefile b/src/zlib/zlib-1.3.1/nintendods/Makefile similarity index 100% rename from src/zlib/zlib-1.3/nintendods/Makefile rename to src/zlib/zlib-1.3.1/nintendods/Makefile diff --git a/src/zlib/zlib-1.3/nintendods/README b/src/zlib/zlib-1.3.1/nintendods/README similarity index 100% rename from src/zlib/zlib-1.3/nintendods/README rename to src/zlib/zlib-1.3.1/nintendods/README diff --git a/src/zlib/zlib-1.3/old/Makefile.emx b/src/zlib/zlib-1.3.1/old/Makefile.emx similarity index 100% rename from src/zlib/zlib-1.3/old/Makefile.emx rename to src/zlib/zlib-1.3.1/old/Makefile.emx diff --git a/src/zlib/zlib-1.3/old/Makefile.riscos b/src/zlib/zlib-1.3.1/old/Makefile.riscos similarity index 100% rename from src/zlib/zlib-1.3/old/Makefile.riscos rename to src/zlib/zlib-1.3.1/old/Makefile.riscos diff --git a/src/zlib/zlib-1.3/old/README b/src/zlib/zlib-1.3.1/old/README similarity index 100% rename from src/zlib/zlib-1.3/old/README rename to src/zlib/zlib-1.3.1/old/README diff --git a/src/zlib/zlib-1.3/old/descrip.mms b/src/zlib/zlib-1.3.1/old/descrip.mms similarity index 100% rename from src/zlib/zlib-1.3/old/descrip.mms rename to src/zlib/zlib-1.3.1/old/descrip.mms diff --git a/src/zlib/zlib-1.3/old/os2/Makefile.os2 b/src/zlib/zlib-1.3.1/old/os2/Makefile.os2 similarity index 100% rename from src/zlib/zlib-1.3/old/os2/Makefile.os2 rename to src/zlib/zlib-1.3.1/old/os2/Makefile.os2 diff --git a/src/zlib/zlib-1.3/old/os2/zlib.def b/src/zlib/zlib-1.3.1/old/os2/zlib.def similarity index 100% rename from src/zlib/zlib-1.3/old/os2/zlib.def rename to src/zlib/zlib-1.3.1/old/os2/zlib.def diff --git a/src/zlib/zlib-1.3/old/visual-basic.txt b/src/zlib/zlib-1.3.1/old/visual-basic.txt similarity index 98% rename from src/zlib/zlib-1.3/old/visual-basic.txt rename to src/zlib/zlib-1.3.1/old/visual-basic.txt index 57efe5812..3c8d2a42d 100644 --- a/src/zlib/zlib-1.3/old/visual-basic.txt +++ b/src/zlib/zlib-1.3.1/old/visual-basic.txt @@ -115,7 +115,7 @@ SUCCESS Then ReDim Preserve bytaryCpr(lngCprSiz - 1) Open strCprPth For Binary Access Write As #1 Put #1, , bytaryCpr() - Put #1, , lngOriSiz 'Add the the original size value to the end + Put #1, , lngOriSiz 'Add the original size value to the end (last 4 bytes) Close #1 Else diff --git a/src/zlib/zlib-1.3/os400/README400 b/src/zlib/zlib-1.3.1/os400/README400 similarity index 96% rename from src/zlib/zlib-1.3/os400/README400 rename to src/zlib/zlib-1.3.1/os400/README400 index 6dd41aa65..30ed5a12c 100644 --- a/src/zlib/zlib-1.3/os400/README400 +++ b/src/zlib/zlib-1.3.1/os400/README400 @@ -1,4 +1,4 @@ - ZLIB version 1.3.0 for OS/400 installation instructions + ZLIB version 1.3.1 for OS/400 installation instructions 1) Download and unpack the zlib tarball to some IFS directory. (i.e.: /path/to/the/zlib/ifs/source/directory) diff --git a/src/zlib/zlib-1.3/os400/bndsrc b/src/zlib/zlib-1.3.1/os400/bndsrc similarity index 100% rename from src/zlib/zlib-1.3/os400/bndsrc rename to src/zlib/zlib-1.3.1/os400/bndsrc diff --git a/src/zlib/zlib-1.3/os400/make.sh b/src/zlib/zlib-1.3.1/os400/make.sh similarity index 100% rename from src/zlib/zlib-1.3/os400/make.sh rename to src/zlib/zlib-1.3.1/os400/make.sh diff --git a/src/zlib/zlib-1.3/os400/zlib.inc b/src/zlib/zlib-1.3.1/os400/zlib.inc similarity index 99% rename from src/zlib/zlib-1.3/os400/zlib.inc rename to src/zlib/zlib-1.3.1/os400/zlib.inc index 0d9e2f209..744729ab9 100644 --- a/src/zlib/zlib-1.3/os400/zlib.inc +++ b/src/zlib/zlib-1.3.1/os400/zlib.inc @@ -1,7 +1,7 @@ * ZLIB.INC - Interface to the general purpose compression library * * ILE RPG400 version by Patrick Monnerat, DATASPHERE. - * Version 1.3.0 + * Version 1.3.1 * * * WARNING: @@ -22,12 +22,12 @@ * * Versioning information. * - D ZLIB_VERSION C '1.3.0' + D ZLIB_VERSION C '1.3.1' D ZLIB_VERNUM C X'12a0' D ZLIB_VER_MAJOR C 1 D ZLIB_VER_MINOR C 3 D ZLIB_VER_REVISION... - D C 0 + D C 1 D ZLIB_VER_SUBREVISION... D C 0 * diff --git a/src/zlib/zlib-1.3/qnx/package.qpg b/src/zlib/zlib-1.3.1/qnx/package.qpg similarity index 95% rename from src/zlib/zlib-1.3/qnx/package.qpg rename to src/zlib/zlib-1.3.1/qnx/package.qpg index d882af2bf..4877e0ef0 100644 --- a/src/zlib/zlib-1.3/qnx/package.qpg +++ b/src/zlib/zlib-1.3.1/qnx/package.qpg @@ -25,10 +25,10 @@ - - - - + + + + @@ -63,7 +63,7 @@ - 1.3.0 + 1.3.1 Medium Stable diff --git a/src/zlib/zlib-1.3/test/example.c b/src/zlib/zlib-1.3.1/test/example.c similarity index 94% rename from src/zlib/zlib-1.3/test/example.c rename to src/zlib/zlib-1.3.1/test/example.c index 582a17a3c..c3521dd59 100644 --- a/src/zlib/zlib-1.3/test/example.c +++ b/src/zlib/zlib-1.3.1/test/example.c @@ -36,12 +36,12 @@ static uLong dictId; /* Adler32 value of the dictionary */ #ifdef Z_SOLO -void *myalloc(void *q, unsigned n, unsigned m) { +static void *myalloc(void *q, unsigned n, unsigned m) { (void)q; return calloc(n, m); } -void myfree(void *q, void *p) { +static void myfree(void *q, void *p) { (void)q; free(p); } @@ -57,7 +57,7 @@ static free_func zfree = (free_func)0; /* =========================================================================== * Test compress() and uncompress() */ -void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, +static void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { int err; uLong len = (uLong)strlen(hello)+1; @@ -81,7 +81,7 @@ void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, /* =========================================================================== * Test read/write of .gz files */ -void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) { +static void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) { #ifdef NO_GZCOMPRESS fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n"); #else @@ -163,7 +163,7 @@ void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) { /* =========================================================================== * Test deflate() with small buffers */ -void test_deflate(Byte *compr, uLong comprLen) { +static void test_deflate(Byte *compr, uLong comprLen) { z_stream c_stream; /* compression stream */ int err; uLong len = (uLong)strlen(hello)+1; @@ -198,7 +198,7 @@ void test_deflate(Byte *compr, uLong comprLen) { /* =========================================================================== * Test inflate() with small buffers */ -void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, +static void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -237,7 +237,7 @@ void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, /* =========================================================================== * Test deflate() with large buffers and dynamic change of compression level */ -void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr, +static void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { z_stream c_stream; /* compression stream */ int err; @@ -290,7 +290,7 @@ void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr, /* =========================================================================== * Test inflate() with large buffers */ -void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr, +static void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -329,7 +329,7 @@ void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr, /* =========================================================================== * Test deflate() with full flush */ -void test_flush(Byte *compr, uLong *comprLen) { +static void test_flush(Byte *compr, uLong *comprLen) { z_stream c_stream; /* compression stream */ int err; uInt len = (uInt)strlen(hello)+1; @@ -364,7 +364,8 @@ void test_flush(Byte *compr, uLong *comprLen) { /* =========================================================================== * Test inflateSync() */ -void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { +static void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -404,7 +405,7 @@ void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { /* =========================================================================== * Test deflate() with preset dictionary */ -void test_dict_deflate(Byte *compr, uLong comprLen) { +static void test_dict_deflate(Byte *compr, uLong comprLen) { z_stream c_stream; /* compression stream */ int err; @@ -438,7 +439,7 @@ void test_dict_deflate(Byte *compr, uLong comprLen) { /* =========================================================================== * Test inflate() with a preset dictionary */ -void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr, +static void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ diff --git a/src/zlib/zlib-1.3/test/infcover.c b/src/zlib/zlib-1.3.1/test/infcover.c similarity index 100% rename from src/zlib/zlib-1.3/test/infcover.c rename to src/zlib/zlib-1.3.1/test/infcover.c diff --git a/src/zlib/zlib-1.3/test/minigzip.c b/src/zlib/zlib-1.3.1/test/minigzip.c similarity index 94% rename from src/zlib/zlib-1.3/test/minigzip.c rename to src/zlib/zlib-1.3.1/test/minigzip.c index 8a21ddfb5..134e10e6c 100644 --- a/src/zlib/zlib-1.3/test/minigzip.c +++ b/src/zlib/zlib-1.3.1/test/minigzip.c @@ -149,12 +149,12 @@ static void pwinerror (s) # include /* for unlink() */ #endif -void *myalloc(void *q, unsigned n, unsigned m) { +static void *myalloc(void *q, unsigned n, unsigned m) { (void)q; return calloc(n, m); } -void myfree(void *q, void *p) { +static void myfree(void *q, void *p) { (void)q; free(p); } @@ -167,7 +167,7 @@ typedef struct gzFile_s { z_stream strm; } *gzFile; -gzFile gz_open(const char *path, int fd, const char *mode) { +static gzFile gz_open(const char *path, int fd, const char *mode) { gzFile gz; int ret; @@ -201,15 +201,15 @@ gzFile gz_open(const char *path, int fd, const char *mode) { return gz; } -gzFile gzopen(const char *path, const char *mode) { +static gzFile gzopen(const char *path, const char *mode) { return gz_open(path, -1, mode); } -gzFile gzdopen(int fd, const char *mode) { +static gzFile gzdopen(int fd, const char *mode) { return gz_open(NULL, fd, mode); } -int gzwrite(gzFile gz, const void *buf, unsigned len) { +static int gzwrite(gzFile gz, const void *buf, unsigned len) { z_stream *strm; unsigned char out[BUFLEN]; @@ -227,7 +227,7 @@ int gzwrite(gzFile gz, const void *buf, unsigned len) { return len; } -int gzread(gzFile gz, void *buf, unsigned len) { +static int gzread(gzFile gz, void *buf, unsigned len) { int ret; unsigned got; unsigned char in[1]; @@ -258,7 +258,7 @@ int gzread(gzFile gz, void *buf, unsigned len) { return len - strm->avail_out; } -int gzclose(gzFile gz) { +static int gzclose(gzFile gz) { z_stream *strm; unsigned char out[BUFLEN]; @@ -283,7 +283,7 @@ int gzclose(gzFile gz) { return Z_OK; } -const char *gzerror(gzFile gz, int *err) { +static const char *gzerror(gzFile gz, int *err) { *err = gz->err; return gz->msg; } @@ -295,7 +295,7 @@ static char *prog; /* =========================================================================== * Display error message and exit */ -void error(const char *msg) { +static void error(const char *msg) { fprintf(stderr, "%s: %s\n", prog, msg); exit(1); } @@ -303,9 +303,9 @@ void error(const char *msg) { #ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ /* Try compressing the input file at once using mmap. Return Z_OK if - * if success, Z_ERRNO otherwise. + * success, Z_ERRNO otherwise. */ -int gz_compress_mmap(FILE *in, gzFile out) { +static int gz_compress_mmap(FILE *in, gzFile out) { int len; int err; int ifd = fileno(in); @@ -338,7 +338,7 @@ int gz_compress_mmap(FILE *in, gzFile out) { * Compress input to output then close both files. */ -void gz_compress(FILE *in, gzFile out) { +static void gz_compress(FILE *in, gzFile out) { local char buf[BUFLEN]; int len; int err; @@ -366,7 +366,7 @@ void gz_compress(FILE *in, gzFile out) { /* =========================================================================== * Uncompress input to output then close both files. */ -void gz_uncompress(gzFile in, FILE *out) { +static void gz_uncompress(gzFile in, FILE *out) { local char buf[BUFLEN]; int len; int err; @@ -390,7 +390,7 @@ void gz_uncompress(gzFile in, FILE *out) { * Compress the given file: create a corresponding .gz file and remove the * original. */ -void file_compress(char *file, char *mode) { +static void file_compress(char *file, char *mode) { local char outfile[MAX_NAME_LEN]; FILE *in; gzFile out; @@ -426,7 +426,7 @@ void file_compress(char *file, char *mode) { /* =========================================================================== * Uncompress the given file and remove the original. */ -void file_uncompress(char *file) { +static void file_uncompress(char *file) { local char buf[MAX_NAME_LEN]; char *infile, *outfile; FILE *out; diff --git a/src/zlib/zlib-1.3/treebuild.xml b/src/zlib/zlib-1.3.1/treebuild.xml similarity index 97% rename from src/zlib/zlib-1.3/treebuild.xml rename to src/zlib/zlib-1.3.1/treebuild.xml index 1d1b00770..930b00be4 100644 --- a/src/zlib/zlib-1.3/treebuild.xml +++ b/src/zlib/zlib-1.3.1/treebuild.xml @@ -1,6 +1,6 @@ - - + + zip compression library diff --git a/src/zlib/zlib-1.3/trees.c b/src/zlib/zlib-1.3.1/trees.c similarity index 98% rename from src/zlib/zlib-1.3/trees.c rename to src/zlib/zlib-1.3.1/trees.c index 8dbdc40ba..6a523ef34 100644 --- a/src/zlib/zlib-1.3/trees.c +++ b/src/zlib/zlib-1.3.1/trees.c @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2021 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -899,14 +899,19 @@ local void compress_block(deflate_state *s, const ct_data *ltree, const ct_data *dtree) { unsigned dist; /* distance of matched string */ int lc; /* match length or unmatched char (if dist == 0) */ - unsigned sx = 0; /* running index in sym_buf */ + unsigned sx = 0; /* running index in symbol buffers */ unsigned code; /* the code to send */ int extra; /* number of extra bits to send */ if (s->sym_next != 0) do { +#ifdef LIT_MEM + dist = s->d_buf[sx]; + lc = s->l_buf[sx++]; +#else dist = s->sym_buf[sx++] & 0xff; dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; lc = s->sym_buf[sx++]; +#endif if (dist == 0) { send_code(s, lc, ltree); /* send a literal byte */ Tracecv(isgraph(lc), (stderr," '%c' ", lc)); @@ -931,8 +936,12 @@ local void compress_block(deflate_state *s, const ct_data *ltree, } } /* literal or match pair ? */ - /* Check that the overlay between pending_buf and sym_buf is ok: */ + /* Check for no overlay of pending_buf on needed symbols */ +#ifdef LIT_MEM + Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow"); +#else Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); +#endif } while (sx < s->sym_next); @@ -1082,9 +1091,14 @@ void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, * the current block must be flushed. */ int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { +#ifdef LIT_MEM + s->d_buf[s->sym_next] = (ush)dist; + s->l_buf[s->sym_next++] = (uch)lc; +#else s->sym_buf[s->sym_next++] = (uch)dist; s->sym_buf[s->sym_next++] = (uch)(dist >> 8); s->sym_buf[s->sym_next++] = (uch)lc; +#endif if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; diff --git a/src/zlib/zlib-1.3/trees.h b/src/zlib/zlib-1.3.1/trees.h similarity index 100% rename from src/zlib/zlib-1.3/trees.h rename to src/zlib/zlib-1.3.1/trees.h diff --git a/src/zlib/zlib-1.3/uncompr.c b/src/zlib/zlib-1.3.1/uncompr.c similarity index 100% rename from src/zlib/zlib-1.3/uncompr.c rename to src/zlib/zlib-1.3.1/uncompr.c diff --git a/src/zlib/zlib-1.3/watcom/watcom_f.mak b/src/zlib/zlib-1.3.1/watcom/watcom_f.mak similarity index 100% rename from src/zlib/zlib-1.3/watcom/watcom_f.mak rename to src/zlib/zlib-1.3.1/watcom/watcom_f.mak diff --git a/src/zlib/zlib-1.3/watcom/watcom_l.mak b/src/zlib/zlib-1.3.1/watcom/watcom_l.mak similarity index 100% rename from src/zlib/zlib-1.3/watcom/watcom_l.mak rename to src/zlib/zlib-1.3.1/watcom/watcom_l.mak diff --git a/src/zlib/zlib-1.3/win32/DLL_FAQ.txt b/src/zlib/zlib-1.3.1/win32/DLL_FAQ.txt similarity index 95% rename from src/zlib/zlib-1.3/win32/DLL_FAQ.txt rename to src/zlib/zlib-1.3.1/win32/DLL_FAQ.txt index 12c009018..d8cf5f31e 100644 --- a/src/zlib/zlib-1.3/win32/DLL_FAQ.txt +++ b/src/zlib/zlib-1.3.1/win32/DLL_FAQ.txt @@ -3,7 +3,7 @@ This document describes the design, the rationale, and the usage -of the official DLL build of zlib, named ZLIB1.DLL. If you have +of the common DLL build of zlib, named ZLIB1.DLL. If you have general questions about zlib, you should see the file "FAQ" found in the zlib distribution, or at the following location: http://www.gzip.org/zlib/zlib_faq.html @@ -11,13 +11,9 @@ in the zlib distribution, or at the following location: 1. What is ZLIB1.DLL, and how can I get it? - - ZLIB1.DLL is the official build of zlib as a DLL. + - ZLIB1.DLL is the common build of zlib as a DLL. (Please remark the character '1' in the name.) - Pointers to a precompiled ZLIB1.DLL can be found in the zlib - web site at: - http://www.zlib.net/ - Applications that link to ZLIB1.DLL can rely on the following specification: @@ -379,18 +375,6 @@ in the zlib distribution, or at the following location: code. But you can make your own private DLL build, under a different file name, as suggested in the previous answer. - -17. I made my own ZLIB1.DLL build. Can I test it for compliance? - - - We prefer that you download the official DLL from the zlib - web site. If you need something peculiar from this DLL, you - can send your suggestion to the zlib mailing list. - - However, in case you do rebuild the DLL yourself, you can run - it with the test programs found in the DLL distribution. - Running these test programs is not a guarantee of compliance, - but a failure can imply a detected problem. - ** This document is written and maintained by diff --git a/src/zlib/zlib-1.3/win32/Makefile.bor b/src/zlib/zlib-1.3.1/win32/Makefile.bor similarity index 100% rename from src/zlib/zlib-1.3/win32/Makefile.bor rename to src/zlib/zlib-1.3.1/win32/Makefile.bor diff --git a/src/zlib/zlib-1.3/win32/Makefile.gcc b/src/zlib/zlib-1.3.1/win32/Makefile.gcc similarity index 100% rename from src/zlib/zlib-1.3/win32/Makefile.gcc rename to src/zlib/zlib-1.3.1/win32/Makefile.gcc diff --git a/src/zlib/zlib-1.3/win32/Makefile.msc b/src/zlib/zlib-1.3.1/win32/Makefile.msc similarity index 100% rename from src/zlib/zlib-1.3/win32/Makefile.msc rename to src/zlib/zlib-1.3.1/win32/Makefile.msc diff --git a/src/zlib/zlib-1.3/win32/README-WIN32.txt b/src/zlib/zlib-1.3.1/win32/README-WIN32.txt similarity index 95% rename from src/zlib/zlib-1.3/win32/README-WIN32.txt rename to src/zlib/zlib-1.3.1/win32/README-WIN32.txt index 384c988fa..14e6398ef 100644 --- a/src/zlib/zlib-1.3/win32/README-WIN32.txt +++ b/src/zlib/zlib-1.3.1/win32/README-WIN32.txt @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.3.0 is a general purpose data compression library. All the code is +zlib 1.3.1 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) @@ -16,13 +16,13 @@ is http://zlib.net/ . Before reporting a problem, please check this site to verify that you have the latest version of zlib; otherwise get the latest version and check whether the problem still exists or not. -PLEASE read DLL_FAQ.txt, and the the zlib FAQ http://zlib.net/zlib_faq.html -before asking for help. +PLEASE read DLL_FAQ.txt, and the zlib FAQ http://zlib.net/zlib_faq.html before +asking for help. Manifest: -The package zlib-1.3.0-win32-x86.zip will contain the following files: +The package zlib-1.3.1-win32-x86.zip will contain the following files: README-WIN32.txt This document ChangeLog Changes since previous zlib packages diff --git a/src/zlib/zlib-1.3/win32/VisualC.txt b/src/zlib/zlib-1.3.1/win32/VisualC.txt similarity index 100% rename from src/zlib/zlib-1.3/win32/VisualC.txt rename to src/zlib/zlib-1.3.1/win32/VisualC.txt diff --git a/src/zlib/zlib-1.3/win32/zlib.def b/src/zlib/zlib-1.3.1/win32/zlib.def similarity index 100% rename from src/zlib/zlib-1.3/win32/zlib.def rename to src/zlib/zlib-1.3.1/win32/zlib.def diff --git a/src/zlib/zlib-1.3/win32/zlib1.rc b/src/zlib/zlib-1.3.1/win32/zlib1.rc similarity index 100% rename from src/zlib/zlib-1.3/win32/zlib1.rc rename to src/zlib/zlib-1.3.1/win32/zlib1.rc diff --git a/src/zlib/zlib-1.3/zconf.h b/src/zlib/zlib-1.3.1/zconf.h similarity index 98% rename from src/zlib/zlib-1.3/zconf.h rename to src/zlib/zlib-1.3.1/zconf.h index fb76ffe31..62adc8d84 100644 --- a/src/zlib/zlib-1.3/zconf.h +++ b/src/zlib/zlib-1.3.1/zconf.h @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -300,14 +300,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have diff --git a/src/zlib/zlib-1.3/zconf.h.cmakein b/src/zlib/zlib-1.3.1/zconf.h.cmakein similarity index 98% rename from src/zlib/zlib-1.3/zconf.h.cmakein rename to src/zlib/zlib-1.3.1/zconf.h.cmakein index 310c43928..0abe3bc9d 100644 --- a/src/zlib/zlib-1.3/zconf.h.cmakein +++ b/src/zlib/zlib-1.3.1/zconf.h.cmakein @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -302,14 +302,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have diff --git a/src/zlib/zlib-1.3/zconf.h.in b/src/zlib/zlib-1.3.1/zconf.h.in similarity index 98% rename from src/zlib/zlib-1.3/zconf.h.in rename to src/zlib/zlib-1.3.1/zconf.h.in index fb76ffe31..62adc8d84 100644 --- a/src/zlib/zlib-1.3/zconf.h.in +++ b/src/zlib/zlib-1.3.1/zconf.h.in @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -300,14 +300,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have diff --git a/src/zlib/zlib-1.3/zlib.3 b/src/zlib/zlib-1.3.1/zlib.3 similarity index 97% rename from src/zlib/zlib-1.3/zlib.3 rename to src/zlib/zlib-1.3.1/zlib.3 index 4dd289675..c716020ea 100644 --- a/src/zlib/zlib-1.3/zlib.3 +++ b/src/zlib/zlib-1.3.1/zlib.3 @@ -1,4 +1,4 @@ -.TH ZLIB 3 "18 Aug 2023" +.TH ZLIB 3 "22 Jan 2024" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS @@ -105,9 +105,9 @@ before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). .SH AUTHORS AND LICENSE -Version 1.3 +Version 1.3.1 .LP -Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler +Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler .LP This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/src/zlib/zlib-1.3.1/zlib.3.pdf b/src/zlib/zlib-1.3.1/zlib.3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b224532bdd8eed1939b7dd04a7a0dd46be649c00 GIT binary patch literal 25523 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 2 ? 9 : 2 - (err)] #define ERR_RETURN(strm,err) \ return (strm->msg = ERR_MSG(err), (err)) @@ -137,17 +137,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # endif #endif -#if defined(MACOS) || defined(TARGET_OS_MAC) +#if defined(MACOS) # define OS_CODE 7 -# ifndef Z_SOLO -# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os -# include /* for fdopen */ -# else -# ifndef fdopen -# define fdopen(fd,mode) NULL /* No fdopen() */ -# endif -# endif -# endif #endif #ifdef __acorn @@ -170,18 +161,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define OS_CODE 19 #endif -#if defined(_BEOS_) || defined(RISCOS) -# define fdopen(fd,mode) NULL /* No fdopen() */ -#endif - -#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX -# if defined(_WIN32_WCE) -# define fdopen(fd,mode) NULL /* No fdopen() */ -# else -# define fdopen(fd,type) _fdopen(fd,type) -# endif -#endif - #if defined(__BORLANDC__) && !defined(MSDOS) #pragma warn -8004 #pragma warn -8008 diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc deleted file mode 100644 index 29af8e11a..000000000 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc +++ /dev/null @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 3, 0, 0 - PRODUCTVERSION 1, 3, 0, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.3.0\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def deleted file mode 100644 index f28aa6c73..000000000 --- a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def +++ /dev/null @@ -1,158 +0,0 @@ -LIBRARY -; zlib data compression and ZIP file I/O library - -VERSION 1.3 - -EXPORTS - adler32 @1 - compress @2 - crc32 @3 - deflate @4 - deflateCopy @5 - deflateEnd @6 - deflateInit2_ @7 - deflateInit_ @8 - deflateParams @9 - deflateReset @10 - deflateSetDictionary @11 - gzclose @12 - gzdopen @13 - gzerror @14 - gzflush @15 - gzopen @16 - gzread @17 - gzwrite @18 - inflate @19 - inflateEnd @20 - inflateInit2_ @21 - inflateInit_ @22 - inflateReset @23 - inflateSetDictionary @24 - inflateSync @25 - uncompress @26 - zlibVersion @27 - gzprintf @28 - gzputc @29 - gzgetc @30 - gzseek @31 - gzrewind @32 - gztell @33 - gzeof @34 - gzsetparams @35 - zError @36 - inflateSyncPoint @37 - get_crc_table @38 - compress2 @39 - gzputs @40 - gzgets @41 - inflateCopy @42 - inflateBackInit_ @43 - inflateBack @44 - inflateBackEnd @45 - compressBound @46 - deflateBound @47 - gzclearerr @48 - gzungetc @49 - zlibCompileFlags @50 - deflatePrime @51 - deflatePending @52 - - unzOpen @61 - unzClose @62 - unzGetGlobalInfo @63 - unzGetCurrentFileInfo @64 - unzGoToFirstFile @65 - unzGoToNextFile @66 - unzOpenCurrentFile @67 - unzReadCurrentFile @68 - unzOpenCurrentFile3 @69 - unztell @70 - unzeof @71 - unzCloseCurrentFile @72 - unzGetGlobalComment @73 - unzStringFileNameCompare @74 - unzLocateFile @75 - unzGetLocalExtrafield @76 - unzOpen2 @77 - unzOpenCurrentFile2 @78 - unzOpenCurrentFilePassword @79 - - zipOpen @80 - zipOpenNewFileInZip @81 - zipWriteInFileInZip @82 - zipCloseFileInZip @83 - zipClose @84 - zipOpenNewFileInZip2 @86 - zipCloseFileInZipRaw @87 - zipOpen2 @88 - zipOpenNewFileInZip3 @89 - - unzGetFilePos @100 - unzGoToFilePos @101 - - fill_win32_filefunc @110 - -; zlibwapi v1.2.4 added: - fill_win32_filefunc64 @111 - fill_win32_filefunc64A @112 - fill_win32_filefunc64W @113 - - unzOpen64 @120 - unzOpen2_64 @121 - unzGetGlobalInfo64 @122 - unzGetCurrentFileInfo64 @124 - unzGetCurrentFileZStreamPos64 @125 - unztell64 @126 - unzGetFilePos64 @127 - unzGoToFilePos64 @128 - - zipOpen64 @130 - zipOpen2_64 @131 - zipOpenNewFileInZip64 @132 - zipOpenNewFileInZip2_64 @133 - zipOpenNewFileInZip3_64 @134 - zipOpenNewFileInZip4_64 @135 - zipCloseFileInZipRaw64 @136 - -; zlib1 v1.2.4 added: - adler32_combine @140 - crc32_combine @142 - deflateSetHeader @144 - deflateTune @145 - gzbuffer @146 - gzclose_r @147 - gzclose_w @148 - gzdirect @149 - gzoffset @150 - inflateGetHeader @156 - inflateMark @157 - inflatePrime @158 - inflateReset2 @159 - inflateUndermine @160 - -; zlib1 v1.2.6 added: - gzgetc_ @161 - inflateResetKeep @163 - deflateResetKeep @164 - -; zlib1 v1.2.7 added: - gzopen_w @165 - -; zlib1 v1.2.8 added: - inflateGetDictionary @166 - gzvprintf @167 - -; zlib1 v1.2.9 added: - inflateCodesUsed @168 - inflateValidate @169 - uncompress2 @170 - gzfread @171 - gzfwrite @172 - deflateGetDictionary @173 - adler32_z @174 - crc32_z @175 - -; zlib1 v1.2.12 added: - crc32_combine_gen @176 - crc32_combine_gen64 @177 - crc32_combine_op @178 diff --git a/src/zlib/zlib-1.3/zlib.3.pdf b/src/zlib/zlib-1.3/zlib.3.pdf deleted file mode 100644 index da12d37183a7371513c0991fd14a7d932fd42e84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19505 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 Date: Thu, 25 Jul 2024 10:18:17 +0000 Subject: [PATCH 04/42] Updated zlib version to build to 1.3.1. --- chevah_build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chevah_build b/chevah_build index 05d651ace..002de6d53 100755 --- a/chevah_build +++ b/chevah_build @@ -14,7 +14,7 @@ set -o pipefail # don't ignore exit codes when piping output PYTHON_BUILD_VERSION="2.7.18" LIBFFI_VERSION="3.4.6" -ZLIB_VERSION="1.3" +ZLIB_VERSION="1.3.1" BZIP2_VERSION="1.0.8" # We statically build the BSD libedit on selected platforms to get the # readline module available without linking to the GPL-only readline libs. From 66fccb960ab77b075c9def95237f2f0f69d8ecdd Mon Sep 17 00:00:00 2001 From: dumol Date: Fri, 26 Jul 2024 09:33:17 +0000 Subject: [PATCH 05/42] Security updates for OpenSSL 1.1.1w from Ubuntu 20.04. --- chevah_build | 5 ++++- .../test_python_binary_dist.py | 2 +- .../ACKNOWLEDGEMENTS | 0 .../AUTHORS | 0 .../CHANGES | 10 +++++++++ .../CONTRIBUTING | 0 .../Configurations/00-base-templates.conf | 0 .../Configurations/10-main.conf | 0 .../Configurations/15-android.conf | 0 .../Configurations/15-ios.conf | 0 .../Configurations/50-djgpp.conf | 0 .../Configurations/50-haiku.conf | 0 .../Configurations/50-masm.conf | 0 .../Configurations/50-win-onecore.conf | 0 .../Configurations/INTERNALS.Configure | 0 .../Configurations/README | 0 .../Configurations/README.design | 0 .../Configurations/common.tmpl | 0 .../Configurations/common0.tmpl | 0 .../Configurations/descrip.mms.tmpl | 0 .../Configurations/shared-info.pl | 0 .../Configurations/unix-Makefile.tmpl | 0 .../Configurations/unix-checker.pm | 0 .../Configurations/windows-checker.pm | 0 .../Configurations/windows-makefile.tmpl | 0 .../Configure | 0 .../FAQ | 0 .../INSTALL | 0 .../LICENSE | 0 .../NEWS | 6 ++++++ .../NOTES.ANDROID | 0 .../NOTES.DJGPP | 0 .../NOTES.PERL | 0 .../NOTES.UNIX | 0 .../NOTES.VMS | 0 .../NOTES.WIN | 0 .../README | 2 +- .../README.ENGINE | 0 .../README.FIPS | 0 .../VMS/VMSify-conf.pl | 0 .../VMS/engine.opt | 0 .../VMS/msg_install.com | 0 .../VMS/msg_staging.com | 0 .../VMS/openssl_ivp.com.in | 0 .../VMS/openssl_shutdown.com.in | 0 .../VMS/openssl_startup.com.in | 0 .../VMS/openssl_utils.com.in | 0 .../VMS/test-includes.com | 0 .../VMS/translatesyms.pl | 0 .../apps/CA.pl.in | 0 .../apps/app_rand.c | 0 .../apps/apps.c | 0 .../apps/apps.h | 0 .../apps/asn1pars.c | 0 .../apps/bf_prefix.c | 0 .../apps/build.info | 0 .../apps/ca-cert.srl | 0 .../apps/ca-key.pem | 0 .../apps/ca-req.pem | 0 .../apps/ca.c | 0 .../apps/cert.pem | 0 .../apps/ciphers.c | 0 .../apps/client.pem | 0 .../apps/cms.c | 0 .../apps/crl.c | 0 .../apps/crl2p7.c | 0 .../apps/ct_log_list.cnf | 0 .../apps/demoSRP/srp_verifier.txt | 0 .../apps/demoSRP/srp_verifier.txt.attr | 0 .../apps/dgst.c | 0 .../apps/dh1024.pem | 0 .../apps/dh2048.pem | 0 .../apps/dh4096.pem | 0 .../apps/dhparam.c | 0 .../apps/dsa-ca.pem | 0 .../apps/dsa-pca.pem | 0 .../apps/dsa.c | 0 .../apps/dsa1024.pem | 0 .../apps/dsa512.pem | 0 .../apps/dsap.pem | 0 .../apps/dsaparam.c | 0 .../apps/ec.c | 0 .../apps/ecparam.c | 0 .../apps/enc.c | 0 .../apps/engine.c | 0 .../apps/errstr.c | 0 .../apps/gendsa.c | 0 .../apps/genpkey.c | 0 .../apps/genrsa.c | 0 .../apps/nseq.c | 0 .../apps/ocsp.c | 0 .../apps/openssl-vms.cnf | 0 .../apps/openssl.c | 0 .../apps/openssl.cnf | 0 .../apps/opt.c | 0 .../apps/passwd.c | 0 .../apps/pca-cert.srl | 0 .../apps/pca-key.pem | 0 .../apps/pca-req.pem | 0 .../apps/pkcs12.c | 0 .../apps/pkcs7.c | 0 .../apps/pkcs8.c | 0 .../apps/pkey.c | 0 .../apps/pkeyparam.c | 0 .../apps/pkeyutl.c | 0 .../apps/prime.c | 0 .../apps/privkey.pem | 0 .../apps/progs.pl | 0 .../apps/rand.c | 0 .../apps/rehash.c | 0 .../apps/req.c | 0 .../apps/req.pem | 0 .../apps/rsa.c | 0 .../apps/rsa8192.pem | 0 .../apps/rsautl.c | 0 .../apps/s1024key.pem | 0 .../apps/s1024req.pem | 0 .../apps/s512-key.pem | 0 .../apps/s512-req.pem | 0 .../apps/s_apps.h | 0 .../apps/s_cb.c | 0 .../apps/s_client.c | 0 .../apps/s_server.c | 0 .../apps/s_socket.c | 0 .../apps/s_time.c | 0 .../apps/server.pem | 0 .../apps/server.srl | 0 .../apps/server2.pem | 0 .../apps/sess_id.c | 0 .../apps/smime.c | 0 .../apps/speed.c | 0 .../apps/spkac.c | 0 .../apps/srp.c | 0 .../apps/storeutl.c | 0 .../apps/testCA.pem | 0 .../apps/testdsa.h | 0 .../apps/testrsa.h | 0 .../apps/timeouts.h | 0 .../apps/ts.c | 0 .../apps/tsget.in | 0 .../apps/verify.c | 0 .../apps/version.c | 0 .../apps/vms_decc_argv.c | 0 .../apps/vms_decc_init.c | 0 .../apps/vms_term_sock.c | 0 .../apps/vms_term_sock.h | 0 .../apps/win32_init.c | 0 .../apps/x509.c | 0 .../build.info | 0 .../config | 0 .../config.com | 0 .../crypto/LPdir_nyi.c | 0 .../crypto/LPdir_unix.c | 0 .../crypto/LPdir_vms.c | 0 .../crypto/LPdir_win.c | 0 .../crypto/LPdir_win32.c | 0 .../crypto/LPdir_wince.c | 0 .../crypto/aes/aes_cbc.c | 0 .../crypto/aes/aes_cfb.c | 0 .../crypto/aes/aes_core.c | 0 .../crypto/aes/aes_ecb.c | 0 .../crypto/aes/aes_ige.c | 0 .../crypto/aes/aes_local.h | 0 .../crypto/aes/aes_misc.c | 0 .../crypto/aes/aes_ofb.c | 0 .../crypto/aes/aes_wrap.c | 0 .../crypto/aes/aes_x86core.c | 0 .../crypto/aes/asm/aes-armv4.pl | 0 .../crypto/aes/asm/aes-c64xplus.pl | 0 .../crypto/aes/asm/aes-ia64.S | 0 .../crypto/aes/asm/aes-mips.pl | 0 .../crypto/aes/asm/aes-parisc.pl | 0 .../crypto/aes/asm/aes-ppc.pl | 0 .../crypto/aes/asm/aes-s390x.pl | 0 .../crypto/aes/asm/aes-sparcv9.pl | 0 .../crypto/aes/asm/aesfx-sparcv9.pl | 0 .../crypto/aes/asm/aesni-mb-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha1-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha256-x86_64.pl | 0 .../crypto/aes/asm/aesni-x86.pl | 0 .../crypto/aes/asm/aesni-x86_64.pl | 0 .../crypto/aes/asm/aesp8-ppc.pl | 0 .../crypto/aes/asm/aest4-sparcv9.pl | 0 .../crypto/aes/asm/aesv8-armx.pl | 0 .../crypto/aes/asm/bsaes-armv7.pl | 0 .../crypto/aes/asm/vpaes-armv8.pl | 0 .../crypto/aes/asm/vpaes-ppc.pl | 0 .../crypto/aes/asm/vpaes-x86.pl | 0 .../crypto/aes/asm/vpaes-x86_64.pl | 0 .../crypto/aes/build.info | 0 .../crypto/alphacpuid.pl | 0 .../crypto/aria/aria.c | 0 .../crypto/aria/build.info | 0 .../crypto/arm64cpuid.pl | 0 .../crypto/arm_arch.h | 0 .../crypto/armcap.c | 0 .../crypto/armv4cpuid.pl | 0 .../crypto/asn1/a_bitstr.c | 0 .../crypto/asn1/a_d2i_fp.c | 0 .../crypto/asn1/a_digest.c | 0 .../crypto/asn1/a_dup.c | 0 .../crypto/asn1/a_gentm.c | 0 .../crypto/asn1/a_i2d_fp.c | 0 .../crypto/asn1/a_int.c | 0 .../crypto/asn1/a_mbstr.c | 0 .../crypto/asn1/a_object.c | 0 .../crypto/asn1/a_octet.c | 0 .../crypto/asn1/a_print.c | 0 .../crypto/asn1/a_sign.c | 0 .../crypto/asn1/a_strex.c | 0 .../crypto/asn1/a_strnid.c | 0 .../crypto/asn1/a_time.c | 0 .../crypto/asn1/a_type.c | 0 .../crypto/asn1/a_utctm.c | 0 .../crypto/asn1/a_utf8.c | 0 .../crypto/asn1/a_verify.c | 0 .../crypto/asn1/ameth_lib.c | 0 .../crypto/asn1/asn1_err.c | 0 .../crypto/asn1/asn1_gen.c | 0 .../crypto/asn1/asn1_item_list.c | 0 .../crypto/asn1/asn1_item_list.h | 0 .../crypto/asn1/asn1_lib.c | 0 .../crypto/asn1/asn1_local.h | 0 .../crypto/asn1/asn1_par.c | 0 .../crypto/asn1/asn_mime.c | 0 .../crypto/asn1/asn_moid.c | 0 .../crypto/asn1/asn_mstbl.c | 0 .../crypto/asn1/asn_pack.c | 0 .../crypto/asn1/bio_asn1.c | 0 .../crypto/asn1/bio_ndef.c | 0 .../crypto/asn1/build.info | 0 .../crypto/asn1/charmap.h | 0 .../crypto/asn1/charmap.pl | 0 .../crypto/asn1/d2i_pr.c | 0 .../crypto/asn1/d2i_pu.c | 0 .../crypto/asn1/evp_asn1.c | 0 .../crypto/asn1/f_int.c | 0 .../crypto/asn1/f_string.c | 0 .../crypto/asn1/i2d_pr.c | 0 .../crypto/asn1/i2d_pu.c | 0 .../crypto/asn1/n_pkey.c | 0 .../crypto/asn1/nsseq.c | 0 .../crypto/asn1/p5_pbe.c | 0 .../crypto/asn1/p5_pbev2.c | 0 .../crypto/asn1/p5_scrypt.c | 0 .../crypto/asn1/p8_pkey.c | 0 .../crypto/asn1/standard_methods.h | 0 .../crypto/asn1/t_bitst.c | 0 .../crypto/asn1/t_pkey.c | 0 .../crypto/asn1/t_spki.c | 0 .../crypto/asn1/tasn_dec.c | 0 .../crypto/asn1/tasn_enc.c | 0 .../crypto/asn1/tasn_fre.c | 0 .../crypto/asn1/tasn_new.c | 0 .../crypto/asn1/tasn_prn.c | 0 .../crypto/asn1/tasn_scn.c | 0 .../crypto/asn1/tasn_typ.c | 0 .../crypto/asn1/tasn_utl.c | 0 .../crypto/asn1/tbl_standard.h | 0 .../crypto/asn1/x_algor.c | 0 .../crypto/asn1/x_bignum.c | 0 .../crypto/asn1/x_info.c | 0 .../crypto/asn1/x_int64.c | 0 .../crypto/asn1/x_long.c | 0 .../crypto/asn1/x_pkey.c | 0 .../crypto/asn1/x_sig.c | 0 .../crypto/asn1/x_spki.c | 0 .../crypto/asn1/x_val.c | 0 .../crypto/async/arch/async_null.c | 0 .../crypto/async/arch/async_null.h | 0 .../crypto/async/arch/async_posix.c | 0 .../crypto/async/arch/async_posix.h | 0 .../crypto/async/arch/async_win.c | 0 .../crypto/async/arch/async_win.h | 0 .../crypto/async/async.c | 0 .../crypto/async/async_err.c | 0 .../crypto/async/async_local.h | 0 .../crypto/async/async_wait.c | 0 .../crypto/async/build.info | 0 .../crypto/bf/asm/bf-586.pl | 0 .../crypto/bf/bf_cfb64.c | 0 .../crypto/bf/bf_ecb.c | 0 .../crypto/bf/bf_enc.c | 0 .../crypto/bf/bf_local.h | 0 .../crypto/bf/bf_ofb64.c | 0 .../crypto/bf/bf_pi.h | 0 .../crypto/bf/bf_skey.c | 0 .../crypto/bf/build.info | 0 .../crypto/bio/b_addr.c | 0 .../crypto/bio/b_dump.c | 0 .../crypto/bio/b_print.c | 0 .../crypto/bio/b_sock.c | 0 .../crypto/bio/b_sock2.c | 0 .../crypto/bio/bf_buff.c | 0 .../crypto/bio/bf_lbuf.c | 0 .../crypto/bio/bf_nbio.c | 0 .../crypto/bio/bf_null.c | 0 .../crypto/bio/bio_cb.c | 0 .../crypto/bio/bio_err.c | 0 .../crypto/bio/bio_lib.c | 0 .../crypto/bio/bio_local.h | 0 .../crypto/bio/bio_meth.c | 0 .../crypto/bio/bss_acpt.c | 0 .../crypto/bio/bss_bio.c | 0 .../crypto/bio/bss_conn.c | 0 .../crypto/bio/bss_dgram.c | 0 .../crypto/bio/bss_fd.c | 0 .../crypto/bio/bss_file.c | 0 .../crypto/bio/bss_log.c | 0 .../crypto/bio/bss_mem.c | 0 .../crypto/bio/bss_null.c | 0 .../crypto/bio/bss_sock.c | 0 .../crypto/bio/build.info | 0 .../crypto/blake2/blake2_impl.h | 0 .../crypto/blake2/blake2_local.h | 0 .../crypto/blake2/blake2b.c | 0 .../crypto/blake2/blake2s.c | 0 .../crypto/blake2/build.info | 0 .../crypto/blake2/m_blake2b.c | 0 .../crypto/blake2/m_blake2s.c | 0 .../crypto/bn/README.pod | 0 .../crypto/bn/asm/alpha-mont.pl | 0 .../crypto/bn/asm/armv4-gf2m.pl | 0 .../crypto/bn/asm/armv4-mont.pl | 0 .../crypto/bn/asm/armv8-mont.pl | 0 .../crypto/bn/asm/bn-586.pl | 0 .../crypto/bn/asm/bn-c64xplus.asm | 0 .../crypto/bn/asm/c64xplus-gf2m.pl | 0 .../crypto/bn/asm/co-586.pl | 0 .../crypto/bn/asm/ia64-mont.pl | 0 .../crypto/bn/asm/ia64.S | 0 .../crypto/bn/asm/mips-mont.pl | 0 .../crypto/bn/asm/mips.pl | 0 .../crypto/bn/asm/parisc-mont.pl | 0 .../crypto/bn/asm/ppc-mont.pl | 0 .../crypto/bn/asm/ppc.pl | 0 .../crypto/bn/asm/ppc64-mont.pl | 0 .../crypto/bn/asm/rsaz-avx2.pl | 0 .../crypto/bn/asm/rsaz-x86_64.pl | 0 .../crypto/bn/asm/s390x-gf2m.pl | 0 .../crypto/bn/asm/s390x-mont.pl | 0 .../crypto/bn/asm/s390x.S | 0 .../crypto/bn/asm/sparct4-mont.pl | 0 .../crypto/bn/asm/sparcv8.S | 0 .../crypto/bn/asm/sparcv8plus.S | 0 .../crypto/bn/asm/sparcv9-gf2m.pl | 0 .../crypto/bn/asm/sparcv9-mont.pl | 0 .../crypto/bn/asm/sparcv9a-mont.pl | 0 .../crypto/bn/asm/via-mont.pl | 0 .../crypto/bn/asm/vis3-mont.pl | 0 .../crypto/bn/asm/x86-gf2m.pl | 0 .../crypto/bn/asm/x86-mont.pl | 0 .../crypto/bn/asm/x86_64-gcc.c | 0 .../crypto/bn/asm/x86_64-gf2m.pl | 0 .../crypto/bn/asm/x86_64-mont.pl | 0 .../crypto/bn/asm/x86_64-mont5.pl | 0 .../crypto/bn/bn_add.c | 0 .../crypto/bn/bn_asm.c | 0 .../crypto/bn/bn_blind.c | 0 .../crypto/bn/bn_const.c | 0 .../crypto/bn/bn_ctx.c | 0 .../crypto/bn/bn_depr.c | 0 .../crypto/bn/bn_dh.c | 0 .../crypto/bn/bn_div.c | 0 .../crypto/bn/bn_err.c | 0 .../crypto/bn/bn_exp.c | 0 .../crypto/bn/bn_exp2.c | 0 .../crypto/bn/bn_gcd.c | 0 .../crypto/bn/bn_gf2m.c | 0 .../crypto/bn/bn_intern.c | 0 .../crypto/bn/bn_kron.c | 0 .../crypto/bn/bn_lib.c | 0 .../crypto/bn/bn_local.h | 0 .../crypto/bn/bn_mod.c | 0 .../crypto/bn/bn_mont.c | 0 .../crypto/bn/bn_mpi.c | 0 .../crypto/bn/bn_mul.c | 0 .../crypto/bn/bn_nist.c | 0 .../crypto/bn/bn_prime.c | 0 .../crypto/bn/bn_prime.h | 0 .../crypto/bn/bn_prime.pl | 0 .../crypto/bn/bn_print.c | 0 .../crypto/bn/bn_rand.c | 0 .../crypto/bn/bn_recp.c | 0 .../crypto/bn/bn_shift.c | 0 .../crypto/bn/bn_sqr.c | 0 .../crypto/bn/bn_sqrt.c | 0 .../crypto/bn/bn_srp.c | 0 .../crypto/bn/bn_word.c | 0 .../crypto/bn/bn_x931p.c | 0 .../crypto/bn/build.info | 0 .../crypto/bn/rsaz_exp.c | 0 .../crypto/bn/rsaz_exp.h | 0 .../crypto/buffer/buf_err.c | 0 .../crypto/buffer/buffer.c | 0 .../crypto/buffer/build.info | 0 .../crypto/build.info | 0 .../crypto/c64xpluscpuid.pl | 0 .../crypto/camellia/asm/cmll-x86.pl | 0 .../crypto/camellia/asm/cmll-x86_64.pl | 0 .../crypto/camellia/asm/cmllt4-sparcv9.pl | 0 .../crypto/camellia/build.info | 0 .../crypto/camellia/camellia.c | 0 .../crypto/camellia/cmll_cbc.c | 0 .../crypto/camellia/cmll_cfb.c | 0 .../crypto/camellia/cmll_ctr.c | 0 .../crypto/camellia/cmll_ecb.c | 0 .../crypto/camellia/cmll_local.h | 0 .../crypto/camellia/cmll_misc.c | 0 .../crypto/camellia/cmll_ofb.c | 0 .../crypto/cast/asm/cast-586.pl | 0 .../crypto/cast/build.info | 0 .../crypto/cast/c_cfb64.c | 0 .../crypto/cast/c_ecb.c | 0 .../crypto/cast/c_enc.c | 0 .../crypto/cast/c_ofb64.c | 0 .../crypto/cast/c_skey.c | 0 .../crypto/cast/cast_local.h | 0 .../crypto/cast/cast_s.h | 0 .../crypto/chacha/asm/chacha-armv4.pl | 0 .../crypto/chacha/asm/chacha-armv8.pl | 0 .../crypto/chacha/asm/chacha-c64xplus.pl | 0 .../crypto/chacha/asm/chacha-ppc.pl | 0 .../crypto/chacha/asm/chacha-s390x.pl | 0 .../crypto/chacha/asm/chacha-x86.pl | 0 .../crypto/chacha/asm/chacha-x86_64.pl | 0 .../crypto/chacha/build.info | 0 .../crypto/chacha/chacha_enc.c | 0 .../crypto/cmac/build.info | 0 .../crypto/cmac/cm_ameth.c | 0 .../crypto/cmac/cm_pmeth.c | 0 .../crypto/cmac/cmac.c | 0 .../crypto/cms/build.info | 0 .../crypto/cms/cms_asn1.c | 0 .../crypto/cms/cms_att.c | 0 .../crypto/cms/cms_cd.c | 0 .../crypto/cms/cms_dd.c | 0 .../crypto/cms/cms_enc.c | 0 .../crypto/cms/cms_env.c | 0 .../crypto/cms/cms_err.c | 0 .../crypto/cms/cms_ess.c | 0 .../crypto/cms/cms_io.c | 0 .../crypto/cms/cms_kari.c | 0 .../crypto/cms/cms_lib.c | 0 .../crypto/cms/cms_local.h | 0 .../crypto/cms/cms_pwri.c | 0 .../crypto/cms/cms_sd.c | 0 .../crypto/cms/cms_smime.c | 0 .../crypto/comp/build.info | 0 .../crypto/comp/c_zlib.c | 0 .../crypto/comp/comp_err.c | 0 .../crypto/comp/comp_lib.c | 0 .../crypto/comp/comp_local.h | 0 .../crypto/conf/build.info | 0 .../crypto/conf/conf_api.c | 0 .../crypto/conf/conf_def.c | 0 .../crypto/conf/conf_def.h | 0 .../crypto/conf/conf_err.c | 0 .../crypto/conf/conf_lib.c | 0 .../crypto/conf/conf_local.h | 0 .../crypto/conf/conf_mall.c | 0 .../crypto/conf/conf_mod.c | 0 .../crypto/conf/conf_sap.c | 0 .../crypto/conf/conf_ssl.c | 0 .../crypto/conf/keysets.pl | 0 .../crypto/cpt_err.c | 0 .../crypto/cryptlib.c | 0 .../crypto/ct/build.info | 0 .../crypto/ct/ct_b64.c | 0 .../crypto/ct/ct_err.c | 0 .../crypto/ct/ct_local.h | 0 .../crypto/ct/ct_log.c | 0 .../crypto/ct/ct_oct.c | 0 .../crypto/ct/ct_policy.c | 0 .../crypto/ct/ct_prn.c | 0 .../crypto/ct/ct_sct.c | 0 .../crypto/ct/ct_sct_ctx.c | 0 .../crypto/ct/ct_vfy.c | 0 .../crypto/ct/ct_x509v3.c | 0 .../crypto/ctype.c | 0 .../crypto/cversion.c | 0 .../crypto/des/asm/crypt586.pl | 0 .../crypto/des/asm/des-586.pl | 0 .../crypto/des/asm/des_enc.m4 | 0 .../crypto/des/asm/desboth.pl | 0 .../crypto/des/asm/dest4-sparcv9.pl | 0 .../crypto/des/build.info | 0 .../crypto/des/cbc_cksm.c | 0 .../crypto/des/cbc_enc.c | 0 .../crypto/des/cfb64ede.c | 0 .../crypto/des/cfb64enc.c | 0 .../crypto/des/cfb_enc.c | 0 .../crypto/des/des_enc.c | 0 .../crypto/des/des_local.h | 0 .../crypto/des/ecb3_enc.c | 0 .../crypto/des/ecb_enc.c | 0 .../crypto/des/fcrypt.c | 0 .../crypto/des/fcrypt_b.c | 0 .../crypto/des/ncbc_enc.c | 0 .../crypto/des/ofb64ede.c | 0 .../crypto/des/ofb64enc.c | 0 .../crypto/des/ofb_enc.c | 0 .../crypto/des/pcbc_enc.c | 0 .../crypto/des/qud_cksm.c | 0 .../crypto/des/rand_key.c | 0 .../crypto/des/set_key.c | 0 .../crypto/des/spr.h | 0 .../crypto/des/str2key.c | 0 .../crypto/des/xcbc_enc.c | 0 .../crypto/dh/build.info | 0 .../crypto/dh/dh1024.pem | 0 .../crypto/dh/dh192.pem | 0 .../crypto/dh/dh2048.pem | 0 .../crypto/dh/dh4096.pem | 0 .../crypto/dh/dh512.pem | 0 .../crypto/dh/dh_ameth.c | 0 .../crypto/dh/dh_asn1.c | 0 .../crypto/dh/dh_check.c | 14 ++++++++++++ .../crypto/dh/dh_depr.c | 0 .../crypto/dh/dh_err.c | 1 + .../crypto/dh/dh_gen.c | 0 .../crypto/dh/dh_kdf.c | 0 .../crypto/dh/dh_key.c | 12 +++++++++++ .../crypto/dh/dh_lib.c | 0 .../crypto/dh/dh_local.h | 0 .../crypto/dh/dh_meth.c | 0 .../crypto/dh/dh_pmeth.c | 0 .../crypto/dh/dh_prn.c | 0 .../crypto/dh/dh_rfc5114.c | 0 .../crypto/dh/dh_rfc7919.c | 0 .../crypto/dllmain.c | 0 .../crypto/dsa/build.info | 0 .../crypto/dsa/dsa_ameth.c | 0 .../crypto/dsa/dsa_asn1.c | 0 .../crypto/dsa/dsa_depr.c | 0 .../crypto/dsa/dsa_err.c | 0 .../crypto/dsa/dsa_gen.c | 0 .../crypto/dsa/dsa_key.c | 0 .../crypto/dsa/dsa_lib.c | 0 .../crypto/dsa/dsa_local.h | 0 .../crypto/dsa/dsa_meth.c | 0 .../crypto/dsa/dsa_ossl.c | 0 .../crypto/dsa/dsa_pmeth.c | 0 .../crypto/dsa/dsa_prn.c | 0 .../crypto/dsa/dsa_sign.c | 0 .../crypto/dsa/dsa_vrf.c | 0 .../crypto/dso/build.info | 0 .../crypto/dso/dso_dl.c | 0 .../crypto/dso/dso_dlfcn.c | 0 .../crypto/dso/dso_err.c | 0 .../crypto/dso/dso_lib.c | 0 .../crypto/dso/dso_local.h | 0 .../crypto/dso/dso_openssl.c | 0 .../crypto/dso/dso_vms.c | 0 .../crypto/dso/dso_win32.c | 0 .../crypto/ebcdic.c | 0 .../crypto/ec/asm/ecp_nistz256-armv4.pl | 0 .../crypto/ec/asm/ecp_nistz256-armv8.pl | 0 .../crypto/ec/asm/ecp_nistz256-ppc64.pl | 0 .../crypto/ec/asm/ecp_nistz256-sparcv9.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86_64.pl | 0 .../crypto/ec/asm/x25519-ppc64.pl | 0 .../crypto/ec/asm/x25519-x86_64.pl | 0 .../crypto/ec/build.info | 0 .../crypto/ec/curve25519.c | 0 .../ec/curve448/arch_32/arch_intrinsics.h | 0 .../crypto/ec/curve448/arch_32/f_impl.c | 0 .../crypto/ec/curve448/arch_32/f_impl.h | 0 .../crypto/ec/curve448/curve448.c | 0 .../crypto/ec/curve448/curve448_local.h | 0 .../crypto/ec/curve448/curve448_tables.c | 0 .../crypto/ec/curve448/curve448utils.h | 0 .../crypto/ec/curve448/ed448.h | 0 .../crypto/ec/curve448/eddsa.c | 0 .../crypto/ec/curve448/f_generic.c | 0 .../crypto/ec/curve448/field.h | 0 .../crypto/ec/curve448/point_448.h | 0 .../crypto/ec/curve448/scalar.c | 0 .../crypto/ec/curve448/word.h | 0 .../crypto/ec/ec2_oct.c | 0 .../crypto/ec/ec2_smpl.c | 0 .../crypto/ec/ec_ameth.c | 0 .../crypto/ec/ec_asn1.c | 0 .../crypto/ec/ec_check.c | 0 .../crypto/ec/ec_curve.c | 0 .../crypto/ec/ec_cvt.c | 0 .../crypto/ec/ec_err.c | 0 .../crypto/ec/ec_key.c | 0 .../crypto/ec/ec_kmeth.c | 0 .../crypto/ec/ec_lib.c | 0 .../crypto/ec/ec_local.h | 0 .../crypto/ec/ec_mult.c | 0 .../crypto/ec/ec_oct.c | 0 .../crypto/ec/ec_pmeth.c | 0 .../crypto/ec/ec_print.c | 0 .../crypto/ec/ecdh_kdf.c | 0 .../crypto/ec/ecdh_ossl.c | 0 .../crypto/ec/ecdsa_ossl.c | 0 .../crypto/ec/ecdsa_sign.c | 0 .../crypto/ec/ecdsa_vrf.c | 0 .../crypto/ec/eck_prn.c | 0 .../crypto/ec/ecp_mont.c | 0 .../crypto/ec/ecp_nist.c | 0 .../crypto/ec/ecp_nistp224.c | 0 .../crypto/ec/ecp_nistp256.c | 0 .../crypto/ec/ecp_nistp521.c | 0 .../crypto/ec/ecp_nistputil.c | 0 .../crypto/ec/ecp_nistz256.c | 0 .../crypto/ec/ecp_nistz256_table.c | 0 .../crypto/ec/ecp_oct.c | 0 .../crypto/ec/ecp_smpl.c | 0 .../crypto/ec/ecx_meth.c | 0 .../crypto/engine/README | 0 .../crypto/engine/build.info | 0 .../crypto/engine/eng_all.c | 0 .../crypto/engine/eng_cnf.c | 0 .../crypto/engine/eng_ctrl.c | 0 .../crypto/engine/eng_devcrypto.c | 0 .../crypto/engine/eng_dyn.c | 0 .../crypto/engine/eng_err.c | 0 .../crypto/engine/eng_fat.c | 0 .../crypto/engine/eng_init.c | 0 .../crypto/engine/eng_lib.c | 0 .../crypto/engine/eng_list.c | 0 .../crypto/engine/eng_local.h | 0 .../crypto/engine/eng_openssl.c | 0 .../crypto/engine/eng_pkey.c | 0 .../crypto/engine/eng_rdrand.c | 0 .../crypto/engine/eng_table.c | 0 .../crypto/engine/tb_asnmth.c | 0 .../crypto/engine/tb_cipher.c | 0 .../crypto/engine/tb_dh.c | 0 .../crypto/engine/tb_digest.c | 0 .../crypto/engine/tb_dsa.c | 0 .../crypto/engine/tb_eckey.c | 0 .../crypto/engine/tb_pkmeth.c | 0 .../crypto/engine/tb_rand.c | 0 .../crypto/engine/tb_rsa.c | 0 .../crypto/err/README | 0 .../crypto/err/build.info | 0 .../crypto/err/err.c | 0 .../crypto/err/err_all.c | 0 .../crypto/err/err_prn.c | 0 .../crypto/err/openssl.ec | 0 .../crypto/err/openssl.txt | 1 + .../crypto/evp/bio_b64.c | 0 .../crypto/evp/bio_enc.c | 0 .../crypto/evp/bio_md.c | 0 .../crypto/evp/bio_ok.c | 0 .../crypto/evp/build.info | 0 .../crypto/evp/c_allc.c | 0 .../crypto/evp/c_alld.c | 0 .../crypto/evp/cmeth_lib.c | 0 .../crypto/evp/digest.c | 0 .../crypto/evp/e_aes.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha1.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha256.c | 0 .../crypto/evp/e_aria.c | 0 .../crypto/evp/e_bf.c | 0 .../crypto/evp/e_camellia.c | 0 .../crypto/evp/e_cast.c | 0 .../crypto/evp/e_chacha20_poly1305.c | 0 .../crypto/evp/e_des.c | 0 .../crypto/evp/e_des3.c | 0 .../crypto/evp/e_idea.c | 0 .../crypto/evp/e_null.c | 0 .../crypto/evp/e_old.c | 0 .../crypto/evp/e_rc2.c | 0 .../crypto/evp/e_rc4.c | 0 .../crypto/evp/e_rc4_hmac_md5.c | 0 .../crypto/evp/e_rc5.c | 0 .../crypto/evp/e_seed.c | 0 .../crypto/evp/e_sm4.c | 0 .../crypto/evp/e_xcbc_d.c | 0 .../crypto/evp/encode.c | 0 .../crypto/evp/evp_cnf.c | 0 .../crypto/evp/evp_enc.c | 0 .../crypto/evp/evp_err.c | 0 .../crypto/evp/evp_key.c | 0 .../crypto/evp/evp_lib.c | 0 .../crypto/evp/evp_local.h | 0 .../crypto/evp/evp_pbe.c | 0 .../crypto/evp/evp_pkey.c | 0 .../crypto/evp/m_md2.c | 0 .../crypto/evp/m_md4.c | 0 .../crypto/evp/m_md5.c | 0 .../crypto/evp/m_md5_sha1.c | 0 .../crypto/evp/m_mdc2.c | 0 .../crypto/evp/m_null.c | 0 .../crypto/evp/m_ripemd.c | 0 .../crypto/evp/m_sha1.c | 0 .../crypto/evp/m_sha3.c | 0 .../crypto/evp/m_sigver.c | 0 .../crypto/evp/m_wp.c | 0 .../crypto/evp/names.c | 0 .../crypto/evp/p5_crpt.c | 0 .../crypto/evp/p5_crpt2.c | 0 .../crypto/evp/p_dec.c | 0 .../crypto/evp/p_enc.c | 0 .../crypto/evp/p_lib.c | 0 .../crypto/evp/p_open.c | 0 .../crypto/evp/p_seal.c | 0 .../crypto/evp/p_sign.c | 0 .../crypto/evp/p_verify.c | 0 .../crypto/evp/pbe_scrypt.c | 0 .../crypto/evp/pmeth_fn.c | 0 .../crypto/evp/pmeth_gn.c | 0 .../crypto/evp/pmeth_lib.c | 0 .../crypto/ex_data.c | 0 .../crypto/getenv.c | 0 .../crypto/hmac/build.info | 0 .../crypto/hmac/hm_ameth.c | 0 .../crypto/hmac/hm_pmeth.c | 0 .../crypto/hmac/hmac.c | 0 .../crypto/hmac/hmac_local.h | 0 .../crypto/ia64cpuid.S | 0 .../crypto/idea/build.info | 0 .../crypto/idea/i_cbc.c | 0 .../crypto/idea/i_cfb64.c | 0 .../crypto/idea/i_ecb.c | 0 .../crypto/idea/i_ofb64.c | 0 .../crypto/idea/i_skey.c | 0 .../crypto/idea/idea_local.h | 0 .../crypto/init.c | 0 .../crypto/kdf/build.info | 0 .../crypto/kdf/hkdf.c | 0 .../crypto/kdf/kdf_err.c | 0 .../crypto/kdf/scrypt.c | 0 .../crypto/kdf/tls1_prf.c | 0 .../crypto/lhash/build.info | 0 .../crypto/lhash/lh_stats.c | 0 .../crypto/lhash/lhash.c | 0 .../crypto/lhash/lhash_local.h | 0 .../crypto/md2/build.info | 0 .../crypto/md2/md2_dgst.c | 0 .../crypto/md2/md2_one.c | 0 .../crypto/md4/build.info | 0 .../crypto/md4/md4_dgst.c | 0 .../crypto/md4/md4_local.h | 0 .../crypto/md4/md4_one.c | 0 .../crypto/md5/asm/md5-586.pl | 0 .../crypto/md5/asm/md5-sparcv9.pl | 0 .../crypto/md5/asm/md5-x86_64.pl | 0 .../crypto/md5/build.info | 0 .../crypto/md5/md5_dgst.c | 0 .../crypto/md5/md5_local.h | 0 .../crypto/md5/md5_one.c | 0 .../crypto/mdc2/build.info | 0 .../crypto/mdc2/mdc2_one.c | 0 .../crypto/mdc2/mdc2dgst.c | 0 .../crypto/mem.c | 0 .../crypto/mem_clr.c | 0 .../crypto/mem_dbg.c | 0 .../crypto/mem_sec.c | 0 .../crypto/mips_arch.h | 0 .../crypto/modes/asm/aesni-gcm-x86_64.pl | 0 .../crypto/modes/asm/ghash-alpha.pl | 0 .../crypto/modes/asm/ghash-armv4.pl | 0 .../crypto/modes/asm/ghash-c64xplus.pl | 0 .../crypto/modes/asm/ghash-ia64.pl | 0 .../crypto/modes/asm/ghash-parisc.pl | 0 .../crypto/modes/asm/ghash-s390x.pl | 0 .../crypto/modes/asm/ghash-sparcv9.pl | 0 .../crypto/modes/asm/ghash-x86.pl | 0 .../crypto/modes/asm/ghash-x86_64.pl | 0 .../crypto/modes/asm/ghashp8-ppc.pl | 0 .../crypto/modes/asm/ghashv8-armx.pl | 0 .../crypto/modes/build.info | 0 .../crypto/modes/cbc128.c | 0 .../crypto/modes/ccm128.c | 0 .../crypto/modes/cfb128.c | 0 .../crypto/modes/ctr128.c | 0 .../crypto/modes/cts128.c | 0 .../crypto/modes/gcm128.c | 0 .../crypto/modes/modes_local.h | 0 .../crypto/modes/ocb128.c | 0 .../crypto/modes/ofb128.c | 0 .../crypto/modes/wrap128.c | 0 .../crypto/modes/xts128.c | 0 .../crypto/o_dir.c | 0 .../crypto/o_fips.c | 0 .../crypto/o_fopen.c | 0 .../crypto/o_init.c | 0 .../crypto/o_str.c | 0 .../crypto/o_time.c | 0 .../crypto/objects/README | 0 .../crypto/objects/build.info | 0 .../crypto/objects/o_names.c | 0 .../crypto/objects/obj_dat.c | 0 .../crypto/objects/obj_dat.h | 0 .../crypto/objects/obj_dat.pl | 0 .../crypto/objects/obj_err.c | 0 .../crypto/objects/obj_lib.c | 0 .../crypto/objects/obj_local.h | 0 .../crypto/objects/obj_mac.num | 0 .../crypto/objects/obj_xref.c | 0 .../crypto/objects/obj_xref.h | 0 .../crypto/objects/obj_xref.txt | 0 .../crypto/objects/objects.pl | 0 .../crypto/objects/objects.txt | 0 .../crypto/objects/objxref.pl | 0 .../crypto/ocsp/build.info | 0 .../crypto/ocsp/ocsp_asn.c | 0 .../crypto/ocsp/ocsp_cl.c | 0 .../crypto/ocsp/ocsp_err.c | 0 .../crypto/ocsp/ocsp_ext.c | 0 .../crypto/ocsp/ocsp_ht.c | 0 .../crypto/ocsp/ocsp_lib.c | 0 .../crypto/ocsp/ocsp_local.h | 0 .../crypto/ocsp/ocsp_prn.c | 0 .../crypto/ocsp/ocsp_srv.c | 0 .../crypto/ocsp/ocsp_vfy.c | 0 .../crypto/ocsp/v3_ocsp.c | 0 .../crypto/pariscid.pl | 0 .../crypto/pem/build.info | 0 .../crypto/pem/pem_all.c | 0 .../crypto/pem/pem_err.c | 0 .../crypto/pem/pem_info.c | 0 .../crypto/pem/pem_lib.c | 0 .../crypto/pem/pem_oth.c | 0 .../crypto/pem/pem_pk8.c | 0 .../crypto/pem/pem_pkey.c | 0 .../crypto/pem/pem_sign.c | 0 .../crypto/pem/pem_x509.c | 0 .../crypto/pem/pem_xaux.c | 0 .../crypto/pem/pvkfmt.c | 0 .../crypto/perlasm/README | 0 .../crypto/perlasm/arm-xlate.pl | 0 .../crypto/perlasm/cbc.pl | 0 .../crypto/perlasm/ppc-xlate.pl | 0 .../crypto/perlasm/sparcv9_modes.pl | 0 .../crypto/perlasm/x86_64-xlate.pl | 0 .../crypto/perlasm/x86asm.pl | 0 .../crypto/perlasm/x86gas.pl | 0 .../crypto/perlasm/x86masm.pl | 0 .../crypto/perlasm/x86nasm.pl | 0 .../crypto/pkcs12/build.info | 0 .../crypto/pkcs12/p12_add.c | 20 ++++++++++++++++++ .../crypto/pkcs12/p12_asn.c | 0 .../crypto/pkcs12/p12_attr.c | 0 .../crypto/pkcs12/p12_crpt.c | 0 .../crypto/pkcs12/p12_crt.c | 0 .../crypto/pkcs12/p12_decr.c | 0 .../crypto/pkcs12/p12_init.c | 0 .../crypto/pkcs12/p12_key.c | 0 .../crypto/pkcs12/p12_kiss.c | 0 .../crypto/pkcs12/p12_local.h | 0 .../crypto/pkcs12/p12_mutl.c | 5 +++++ .../crypto/pkcs12/p12_npas.c | 5 +++-- .../crypto/pkcs12/p12_p8d.c | 0 .../crypto/pkcs12/p12_p8e.c | 0 .../crypto/pkcs12/p12_sbag.c | 0 .../crypto/pkcs12/p12_utl.c | 0 .../crypto/pkcs12/pk12err.c | 0 .../crypto/pkcs7/bio_pk7.c | 0 .../crypto/pkcs7/build.info | 0 .../crypto/pkcs7/pk7_asn1.c | 0 .../crypto/pkcs7/pk7_attr.c | 0 .../crypto/pkcs7/pk7_doit.c | 0 .../crypto/pkcs7/pk7_lib.c | 0 .../crypto/pkcs7/pk7_mime.c | 7 ++++-- .../crypto/pkcs7/pk7_smime.c | 0 .../crypto/pkcs7/pkcs7err.c | 0 .../crypto/poly1305/asm/poly1305-armv4.pl | 0 .../crypto/poly1305/asm/poly1305-armv8.pl | 0 .../crypto/poly1305/asm/poly1305-c64xplus.pl | 0 .../crypto/poly1305/asm/poly1305-mips.pl | 0 .../crypto/poly1305/asm/poly1305-ppc.pl | 0 .../crypto/poly1305/asm/poly1305-ppcfp.pl | 0 .../crypto/poly1305/asm/poly1305-s390x.pl | 0 .../crypto/poly1305/asm/poly1305-sparcv9.pl | 0 .../crypto/poly1305/asm/poly1305-x86.pl | 0 .../crypto/poly1305/asm/poly1305-x86_64.pl | 0 .../crypto/poly1305/build.info | 0 .../crypto/poly1305/poly1305.c | 0 .../crypto/poly1305/poly1305_ameth.c | 0 .../crypto/poly1305/poly1305_base2_44.c | 0 .../crypto/poly1305/poly1305_ieee754.c | 0 .../crypto/poly1305/poly1305_local.h | 0 .../crypto/poly1305/poly1305_pmeth.c | 0 .../crypto/ppc_arch.h | 0 .../crypto/ppccap.c | 0 .../crypto/ppccpuid.pl | 0 .../crypto/rand/build.info | 0 .../crypto/rand/drbg_ctr.c | 0 .../crypto/rand/drbg_lib.c | 0 .../crypto/rand/rand_egd.c | 0 .../crypto/rand/rand_err.c | 0 .../crypto/rand/rand_lib.c | 0 .../crypto/rand/rand_local.h | 0 .../crypto/rand/rand_unix.c | 0 .../crypto/rand/rand_vms.c | 0 .../crypto/rand/rand_win.c | 0 .../crypto/rand/randfile.c | 0 .../crypto/rc2/build.info | 0 .../crypto/rc2/rc2_cbc.c | 0 .../crypto/rc2/rc2_ecb.c | 0 .../crypto/rc2/rc2_local.h | 0 .../crypto/rc2/rc2_skey.c | 0 .../crypto/rc2/rc2cfb64.c | 0 .../crypto/rc2/rc2ofb64.c | 0 .../crypto/rc4/asm/rc4-586.pl | 0 .../crypto/rc4/asm/rc4-c64xplus.pl | 0 .../crypto/rc4/asm/rc4-md5-x86_64.pl | 0 .../crypto/rc4/asm/rc4-parisc.pl | 0 .../crypto/rc4/asm/rc4-s390x.pl | 0 .../crypto/rc4/asm/rc4-x86_64.pl | 0 .../crypto/rc4/build.info | 0 .../crypto/rc4/rc4_enc.c | 0 .../crypto/rc4/rc4_local.h | 0 .../crypto/rc4/rc4_skey.c | 0 .../crypto/rc5/asm/rc5-586.pl | 0 .../crypto/rc5/build.info | 0 .../crypto/rc5/rc5_ecb.c | 0 .../crypto/rc5/rc5_enc.c | 0 .../crypto/rc5/rc5_local.h | 0 .../crypto/rc5/rc5_skey.c | 0 .../crypto/rc5/rc5cfb64.c | 0 .../crypto/rc5/rc5ofb64.c | 0 .../crypto/ripemd/asm/rmd-586.pl | 0 .../crypto/ripemd/build.info | 0 .../crypto/ripemd/rmd_dgst.c | 0 .../crypto/ripemd/rmd_local.h | 0 .../crypto/ripemd/rmd_one.c | 0 .../crypto/ripemd/rmdconst.h | 0 .../crypto/rsa/build.info | 0 .../crypto/rsa/rsa_ameth.c | 0 .../crypto/rsa/rsa_asn1.c | 0 .../crypto/rsa/rsa_chk.c | 0 .../crypto/rsa/rsa_crpt.c | 0 .../crypto/rsa/rsa_depr.c | 0 .../crypto/rsa/rsa_err.c | 0 .../crypto/rsa/rsa_gen.c | 0 .../crypto/rsa/rsa_lib.c | 0 .../crypto/rsa/rsa_local.h | 0 .../crypto/rsa/rsa_meth.c | 0 .../crypto/rsa/rsa_mp.c | 0 .../crypto/rsa/rsa_none.c | 0 .../crypto/rsa/rsa_oaep.c | 0 .../crypto/rsa/rsa_ossl.c | 0 .../crypto/rsa/rsa_pk1.c | 0 .../crypto/rsa/rsa_pmeth.c | 0 .../crypto/rsa/rsa_prn.c | 0 .../crypto/rsa/rsa_pss.c | 0 .../crypto/rsa/rsa_saos.c | 0 .../crypto/rsa/rsa_sign.c | 0 .../crypto/rsa/rsa_ssl.c | 0 .../crypto/rsa/rsa_x931.c | 0 .../crypto/rsa/rsa_x931g.c | 0 .../crypto/s390x_arch.h | 0 .../crypto/s390xcap.c | 0 .../crypto/s390xcpuid.pl | 0 .../crypto/seed/build.info | 0 .../crypto/seed/seed.c | 0 .../crypto/seed/seed_cbc.c | 0 .../crypto/seed/seed_cfb.c | 0 .../crypto/seed/seed_ecb.c | 0 .../crypto/seed/seed_local.h | 0 .../crypto/seed/seed_ofb.c | 0 .../crypto/sha/asm/keccak1600-armv4.pl | 0 .../crypto/sha/asm/keccak1600-armv8.pl | 0 .../crypto/sha/asm/keccak1600-avx2.pl | 0 .../crypto/sha/asm/keccak1600-avx512.pl | 0 .../crypto/sha/asm/keccak1600-avx512vl.pl | 0 .../crypto/sha/asm/keccak1600-c64x.pl | 0 .../crypto/sha/asm/keccak1600-mmx.pl | 0 .../crypto/sha/asm/keccak1600-ppc64.pl | 0 .../crypto/sha/asm/keccak1600-s390x.pl | 0 .../crypto/sha/asm/keccak1600-x86_64.pl | 0 .../crypto/sha/asm/keccak1600p8-ppc.pl | 0 .../crypto/sha/asm/sha1-586.pl | 0 .../crypto/sha/asm/sha1-alpha.pl | 0 .../crypto/sha/asm/sha1-armv4-large.pl | 0 .../crypto/sha/asm/sha1-armv8.pl | 0 .../crypto/sha/asm/sha1-c64xplus.pl | 0 .../crypto/sha/asm/sha1-ia64.pl | 0 .../crypto/sha/asm/sha1-mb-x86_64.pl | 0 .../crypto/sha/asm/sha1-mips.pl | 0 .../crypto/sha/asm/sha1-parisc.pl | 0 .../crypto/sha/asm/sha1-ppc.pl | 0 .../crypto/sha/asm/sha1-s390x.pl | 0 .../crypto/sha/asm/sha1-sparcv9.pl | 0 .../crypto/sha/asm/sha1-sparcv9a.pl | 0 .../crypto/sha/asm/sha1-thumb.pl | 0 .../crypto/sha/asm/sha1-x86_64.pl | 0 .../crypto/sha/asm/sha256-586.pl | 0 .../crypto/sha/asm/sha256-armv4.pl | 0 .../crypto/sha/asm/sha256-c64xplus.pl | 0 .../crypto/sha/asm/sha256-mb-x86_64.pl | 0 .../crypto/sha/asm/sha512-586.pl | 0 .../crypto/sha/asm/sha512-armv4.pl | 0 .../crypto/sha/asm/sha512-armv8.pl | 0 .../crypto/sha/asm/sha512-c64xplus.pl | 0 .../crypto/sha/asm/sha512-ia64.pl | 0 .../crypto/sha/asm/sha512-mips.pl | 0 .../crypto/sha/asm/sha512-parisc.pl | 0 .../crypto/sha/asm/sha512-ppc.pl | 0 .../crypto/sha/asm/sha512-s390x.pl | 0 .../crypto/sha/asm/sha512-sparcv9.pl | 0 .../crypto/sha/asm/sha512-x86_64.pl | 0 .../crypto/sha/asm/sha512p8-ppc.pl | 0 .../crypto/sha/build.info | 0 .../crypto/sha/keccak1600.c | 0 .../crypto/sha/sha1_one.c | 0 .../crypto/sha/sha1dgst.c | 0 .../crypto/sha/sha256.c | 0 .../crypto/sha/sha512.c | 0 .../crypto/sha/sha_local.h | 0 .../crypto/siphash/build.info | 0 .../crypto/siphash/siphash.c | 0 .../crypto/siphash/siphash_ameth.c | 0 .../crypto/siphash/siphash_local.h | 0 .../crypto/siphash/siphash_pmeth.c | 0 .../crypto/sm2/build.info | 0 .../crypto/sm2/sm2_crypt.c | 0 .../crypto/sm2/sm2_err.c | 0 .../crypto/sm2/sm2_pmeth.c | 0 .../crypto/sm2/sm2_sign.c | 0 .../crypto/sm3/build.info | 0 .../crypto/sm3/m_sm3.c | 0 .../crypto/sm3/sm3.c | 0 .../crypto/sm3/sm3_local.h | 0 .../crypto/sm4/build.info | 0 .../crypto/sm4/sm4.c | 0 .../crypto/sparc_arch.h | 0 .../crypto/sparccpuid.S | 0 .../crypto/sparcv9cap.c | 0 .../crypto/srp/build.info | 0 .../crypto/srp/srp_lib.c | 0 .../crypto/srp/srp_vfy.c | 0 .../crypto/stack/build.info | 0 .../crypto/stack/stack.c | 0 .../crypto/store/build.info | 0 .../crypto/store/loader_file.c | 0 .../crypto/store/store_err.c | 0 .../crypto/store/store_init.c | 0 .../crypto/store/store_lib.c | 0 .../crypto/store/store_local.h | 0 .../crypto/store/store_register.c | 0 .../crypto/store/store_strings.c | 0 .../crypto/threads_none.c | 0 .../crypto/threads_pthread.c | 0 .../crypto/threads_win.c | 0 .../crypto/ts/build.info | 0 .../crypto/ts/ts_asn1.c | 0 .../crypto/ts/ts_conf.c | 0 .../crypto/ts/ts_err.c | 0 .../crypto/ts/ts_lib.c | 0 .../crypto/ts/ts_local.h | 0 .../crypto/ts/ts_req_print.c | 0 .../crypto/ts/ts_req_utils.c | 0 .../crypto/ts/ts_rsp_print.c | 0 .../crypto/ts/ts_rsp_sign.c | 0 .../crypto/ts/ts_rsp_utils.c | 0 .../crypto/ts/ts_rsp_verify.c | 0 .../crypto/ts/ts_verify_ctx.c | 0 .../crypto/txt_db/build.info | 0 .../crypto/txt_db/txt_db.c | 0 .../crypto/ui/build.info | 0 .../crypto/ui/ui_err.c | 0 .../crypto/ui/ui_lib.c | 0 .../crypto/ui/ui_local.h | 0 .../crypto/ui/ui_null.c | 0 .../crypto/ui/ui_openssl.c | 0 .../crypto/ui/ui_util.c | 0 .../crypto/uid.c | 0 .../crypto/vms_rms.h | 0 .../crypto/whrlpool/asm/wp-mmx.pl | 0 .../crypto/whrlpool/asm/wp-x86_64.pl | 0 .../crypto/whrlpool/build.info | 0 .../crypto/whrlpool/wp_block.c | 0 .../crypto/whrlpool/wp_dgst.c | 0 .../crypto/whrlpool/wp_local.h | 0 .../crypto/x509/build.info | 0 .../crypto/x509/by_dir.c | 0 .../crypto/x509/by_file.c | 0 .../crypto/x509/t_crl.c | 0 .../crypto/x509/t_req.c | 0 .../crypto/x509/t_x509.c | 0 .../crypto/x509/x509_att.c | 0 .../crypto/x509/x509_cmp.c | 0 .../crypto/x509/x509_d2.c | 0 .../crypto/x509/x509_def.c | 0 .../crypto/x509/x509_err.c | 0 .../crypto/x509/x509_ext.c | 0 .../crypto/x509/x509_local.h | 0 .../crypto/x509/x509_lu.c | 0 .../crypto/x509/x509_meth.c | 0 .../crypto/x509/x509_obj.c | 0 .../crypto/x509/x509_r2x.c | 0 .../crypto/x509/x509_req.c | 0 .../crypto/x509/x509_set.c | 0 .../crypto/x509/x509_trs.c | 0 .../crypto/x509/x509_txt.c | 0 .../crypto/x509/x509_v3.c | 0 .../crypto/x509/x509_vfy.c | 0 .../crypto/x509/x509_vpm.c | 0 .../crypto/x509/x509cset.c | 0 .../crypto/x509/x509name.c | 0 .../crypto/x509/x509rset.c | 0 .../crypto/x509/x509spki.c | 0 .../crypto/x509/x509type.c | 0 .../crypto/x509/x_all.c | 0 .../crypto/x509/x_attrib.c | 0 .../crypto/x509/x_crl.c | 0 .../crypto/x509/x_exten.c | 0 .../crypto/x509/x_name.c | 0 .../crypto/x509/x_pubkey.c | 0 .../crypto/x509/x_req.c | 0 .../crypto/x509/x_x509.c | 0 .../crypto/x509/x_x509a.c | 0 .../crypto/x509v3/build.info | 0 .../crypto/x509v3/ext_dat.h | 0 .../crypto/x509v3/pcy_cache.c | 0 .../crypto/x509v3/pcy_data.c | 0 .../crypto/x509v3/pcy_lib.c | 0 .../crypto/x509v3/pcy_local.h | 0 .../crypto/x509v3/pcy_map.c | 0 .../crypto/x509v3/pcy_node.c | 0 .../crypto/x509v3/pcy_tree.c | 0 .../crypto/x509v3/standard_exts.h | 0 .../crypto/x509v3/v3_addr.c | 0 .../crypto/x509v3/v3_admis.c | 0 .../crypto/x509v3/v3_admis.h | 0 .../crypto/x509v3/v3_akey.c | 0 .../crypto/x509v3/v3_akeya.c | 0 .../crypto/x509v3/v3_alt.c | 0 .../crypto/x509v3/v3_asid.c | 0 .../crypto/x509v3/v3_bcons.c | 0 .../crypto/x509v3/v3_bitst.c | 0 .../crypto/x509v3/v3_conf.c | 0 .../crypto/x509v3/v3_cpols.c | 0 .../crypto/x509v3/v3_crld.c | 0 .../crypto/x509v3/v3_enum.c | 0 .../crypto/x509v3/v3_extku.c | 0 .../crypto/x509v3/v3_genn.c | 0 .../crypto/x509v3/v3_ia5.c | 0 .../crypto/x509v3/v3_info.c | 0 .../crypto/x509v3/v3_int.c | 0 .../crypto/x509v3/v3_lib.c | 0 .../crypto/x509v3/v3_ncons.c | 0 .../crypto/x509v3/v3_pci.c | 0 .../crypto/x509v3/v3_pcia.c | 0 .../crypto/x509v3/v3_pcons.c | 0 .../crypto/x509v3/v3_pku.c | 0 .../crypto/x509v3/v3_pmaps.c | 0 .../crypto/x509v3/v3_prn.c | 0 .../crypto/x509v3/v3_purp.c | 0 .../crypto/x509v3/v3_skey.c | 0 .../crypto/x509v3/v3_sxnet.c | 0 .../crypto/x509v3/v3_tlsf.c | 0 .../crypto/x509v3/v3_utl.c | 0 .../crypto/x509v3/v3err.c | 0 .../crypto/x86_64cpuid.pl | 0 .../crypto/x86cpuid.pl | 0 .../demos/README | 0 .../demos/bio/Makefile | 0 .../demos/bio/README | 0 .../demos/bio/accept.cnf | 0 .../demos/bio/client-arg.c | 0 .../demos/bio/client-conf.c | 0 .../demos/bio/cmod.cnf | 0 .../demos/bio/connect.cnf | 0 .../demos/bio/descrip.mms | 0 .../demos/bio/intca.pem | 0 .../demos/bio/root.pem | 0 .../demos/bio/saccept.c | 0 .../demos/bio/sconnect.c | 0 .../demos/bio/server-arg.c | 0 .../demos/bio/server-cmod.c | 0 .../demos/bio/server-conf.c | 0 .../demos/bio/server-ec.pem | 0 .../demos/bio/server.pem | 0 .../demos/bio/shared.opt | 0 .../demos/bio/static.opt | 0 .../demos/certs/README | 0 .../demos/certs/apps/apps.cnf | 0 .../demos/certs/apps/ckey.pem | 0 .../demos/certs/apps/intkey.pem | 0 .../demos/certs/apps/mkacerts.sh | 0 .../demos/certs/apps/mkxcerts.sh | 0 .../demos/certs/apps/rootkey.pem | 0 .../demos/certs/apps/skey.pem | 0 .../demos/certs/apps/skey2.pem | 0 .../demos/certs/ca.cnf | 0 .../demos/certs/mkcerts.sh | 0 .../demos/certs/ocspquery.sh | 0 .../demos/certs/ocsprun.sh | 0 .../demos/cms/cacert.pem | 0 .../demos/cms/cakey.pem | 0 .../demos/cms/cms_comp.c | 0 .../demos/cms/cms_ddec.c | 0 .../demos/cms/cms_dec.c | 0 .../demos/cms/cms_denc.c | 0 .../demos/cms/cms_enc.c | 0 .../demos/cms/cms_sign.c | 0 .../demos/cms/cms_sign2.c | 0 .../demos/cms/cms_uncomp.c | 0 .../demos/cms/cms_ver.c | 0 .../demos/cms/comp.txt | 0 .../demos/cms/encr.txt | 0 .../demos/cms/sign.txt | 0 .../demos/cms/signer.pem | 0 .../demos/cms/signer2.pem | 0 .../demos/engines/e_chil.txt | 0 .../demos/evp/Makefile | 0 .../demos/evp/aesccm.c | 0 .../demos/evp/aesgcm.c | 0 .../demos/pkcs12/pkread.c | 0 .../demos/pkcs12/pkwrite.c | 0 .../demos/smime/cacert.pem | 0 .../demos/smime/cakey.pem | 0 .../demos/smime/encr.txt | 0 .../demos/smime/sign.txt | 0 .../demos/smime/signer.pem | 0 .../demos/smime/signer2.pem | 0 .../demos/smime/smdec.c | 0 .../demos/smime/smenc.c | 0 .../demos/smime/smsign.c | 0 .../demos/smime/smsign2.c | 0 .../demos/smime/smver.c | 0 .../doc/HOWTO/certificates.txt | 0 .../doc/HOWTO/keys.txt | 0 .../doc/README | 0 .../doc/dir-locals.example.el | 0 .../doc/fingerprints.txt | 0 .../doc/man1/CA.pl.pod | 0 .../doc/man1/asn1parse.pod | 0 .../doc/man1/ca.pod | 0 .../doc/man1/ciphers.pod | 0 .../doc/man1/cms.pod | 0 .../doc/man1/crl.pod | 0 .../doc/man1/crl2pkcs7.pod | 0 .../doc/man1/dgst.pod | 0 .../doc/man1/dhparam.pod | 0 .../doc/man1/dsa.pod | 0 .../doc/man1/dsaparam.pod | 0 .../doc/man1/ec.pod | 0 .../doc/man1/ecparam.pod | 0 .../doc/man1/enc.pod | 0 .../doc/man1/engine.pod | 0 .../doc/man1/errstr.pod | 0 .../doc/man1/gendsa.pod | 0 .../doc/man1/genpkey.pod | 0 .../doc/man1/genrsa.pod | 0 .../doc/man1/list.pod | 0 .../doc/man1/nseq.pod | 0 .../doc/man1/ocsp.pod | 0 .../doc/man1/openssl.pod | 0 .../doc/man1/passwd.pod | 0 .../doc/man1/pkcs12.pod | 0 .../doc/man1/pkcs7.pod | 0 .../doc/man1/pkcs8.pod | 0 .../doc/man1/pkey.pod | 0 .../doc/man1/pkeyparam.pod | 0 .../doc/man1/pkeyutl.pod | 0 .../doc/man1/prime.pod | 0 .../doc/man1/rand.pod | 0 .../doc/man1/rehash.pod | 0 .../doc/man1/req.pod | 0 .../doc/man1/rsa.pod | 0 .../doc/man1/rsautl.pod | 0 .../doc/man1/s_client.pod | 0 .../doc/man1/s_server.pod | 0 .../doc/man1/s_time.pod | 0 .../doc/man1/sess_id.pod | 0 .../doc/man1/smime.pod | 0 .../doc/man1/speed.pod | 0 .../doc/man1/spkac.pod | 0 .../doc/man1/srp.pod | 0 .../doc/man1/storeutl.pod | 0 .../doc/man1/ts.pod | 0 .../doc/man1/tsget.pod | 0 .../doc/man1/verify.pod | 0 .../doc/man1/version.pod | 0 .../doc/man1/x509.pod | 0 .../doc/man3/ADMISSIONS.pod | 0 .../doc/man3/ASN1_INTEGER_get_int64.pod | 0 .../doc/man3/ASN1_ITEM_lookup.pod | 0 .../doc/man3/ASN1_OBJECT_new.pod | 0 .../doc/man3/ASN1_STRING_TABLE_add.pod | 0 .../doc/man3/ASN1_STRING_length.pod | 0 .../doc/man3/ASN1_STRING_new.pod | 0 .../doc/man3/ASN1_STRING_print_ex.pod | 0 .../doc/man3/ASN1_TIME_set.pod | 0 .../doc/man3/ASN1_TYPE_get.pod | 0 .../doc/man3/ASN1_generate_nconf.pod | 0 .../doc/man3/ASYNC_WAIT_CTX_new.pod | 0 .../doc/man3/ASYNC_start_job.pod | 0 .../doc/man3/BF_encrypt.pod | 0 .../doc/man3/BIO_ADDR.pod | 0 .../doc/man3/BIO_ADDRINFO.pod | 0 .../doc/man3/BIO_connect.pod | 0 .../doc/man3/BIO_ctrl.pod | 0 .../doc/man3/BIO_f_base64.pod | 0 .../doc/man3/BIO_f_buffer.pod | 0 .../doc/man3/BIO_f_cipher.pod | 0 .../doc/man3/BIO_f_md.pod | 0 .../doc/man3/BIO_f_null.pod | 0 .../doc/man3/BIO_f_ssl.pod | 0 .../doc/man3/BIO_find_type.pod | 0 .../doc/man3/BIO_get_data.pod | 0 .../doc/man3/BIO_get_ex_new_index.pod | 0 .../doc/man3/BIO_meth_new.pod | 0 .../doc/man3/BIO_new.pod | 0 .../doc/man3/BIO_new_CMS.pod | 0 .../doc/man3/BIO_parse_hostserv.pod | 0 .../doc/man3/BIO_printf.pod | 0 .../doc/man3/BIO_push.pod | 0 .../doc/man3/BIO_read.pod | 0 .../doc/man3/BIO_s_accept.pod | 0 .../doc/man3/BIO_s_bio.pod | 0 .../doc/man3/BIO_s_connect.pod | 0 .../doc/man3/BIO_s_fd.pod | 0 .../doc/man3/BIO_s_file.pod | 0 .../doc/man3/BIO_s_mem.pod | 0 .../doc/man3/BIO_s_null.pod | 0 .../doc/man3/BIO_s_socket.pod | 0 .../doc/man3/BIO_set_callback.pod | 0 .../doc/man3/BIO_should_retry.pod | 0 .../doc/man3/BN_BLINDING_new.pod | 0 .../doc/man3/BN_CTX_new.pod | 0 .../doc/man3/BN_CTX_start.pod | 0 .../doc/man3/BN_add.pod | 0 .../doc/man3/BN_add_word.pod | 0 .../doc/man3/BN_bn2bin.pod | 0 .../doc/man3/BN_cmp.pod | 0 .../doc/man3/BN_copy.pod | 0 .../doc/man3/BN_generate_prime.pod | 0 .../doc/man3/BN_mod_inverse.pod | 0 .../doc/man3/BN_mod_mul_montgomery.pod | 0 .../doc/man3/BN_mod_mul_reciprocal.pod | 0 .../doc/man3/BN_new.pod | 0 .../doc/man3/BN_num_bytes.pod | 0 .../doc/man3/BN_rand.pod | 0 .../doc/man3/BN_security_bits.pod | 0 .../doc/man3/BN_set_bit.pod | 0 .../doc/man3/BN_swap.pod | 0 .../doc/man3/BN_zero.pod | 0 .../doc/man3/BUF_MEM_new.pod | 0 .../doc/man3/CMS_add0_cert.pod | 0 .../doc/man3/CMS_add1_recipient_cert.pod | 0 .../doc/man3/CMS_add1_signer.pod | 0 .../doc/man3/CMS_compress.pod | 0 .../doc/man3/CMS_decrypt.pod | 0 .../doc/man3/CMS_encrypt.pod | 0 .../doc/man3/CMS_final.pod | 0 .../doc/man3/CMS_get0_RecipientInfos.pod | 0 .../doc/man3/CMS_get0_SignerInfos.pod | 0 .../doc/man3/CMS_get0_type.pod | 0 .../doc/man3/CMS_get1_ReceiptRequest.pod | 0 .../doc/man3/CMS_sign.pod | 0 .../doc/man3/CMS_sign_receipt.pod | 0 .../doc/man3/CMS_uncompress.pod | 0 .../doc/man3/CMS_verify.pod | 0 .../doc/man3/CMS_verify_receipt.pod | 0 .../doc/man3/CONF_modules_free.pod | 0 .../doc/man3/CONF_modules_load_file.pod | 0 .../doc/man3/CRYPTO_THREAD_run_once.pod | 0 .../doc/man3/CRYPTO_get_ex_new_index.pod | 0 .../doc/man3/CRYPTO_memcmp.pod | 0 .../doc/man3/CTLOG_STORE_get0_log_by_id.pod | 0 .../doc/man3/CTLOG_STORE_new.pod | 0 .../doc/man3/CTLOG_new.pod | 0 .../doc/man3/CT_POLICY_EVAL_CTX_new.pod | 0 .../doc/man3/DEFINE_STACK_OF.pod | 0 .../doc/man3/DES_random_key.pod | 0 .../doc/man3/DH_generate_key.pod | 0 .../doc/man3/DH_generate_parameters.pod | 0 .../doc/man3/DH_get0_pqg.pod | 0 .../doc/man3/DH_get_1024_160.pod | 0 .../doc/man3/DH_meth_new.pod | 0 .../doc/man3/DH_new.pod | 0 .../doc/man3/DH_new_by_nid.pod | 0 .../doc/man3/DH_set_method.pod | 0 .../doc/man3/DH_size.pod | 0 .../doc/man3/DSA_SIG_new.pod | 0 .../doc/man3/DSA_do_sign.pod | 0 .../doc/man3/DSA_dup_DH.pod | 0 .../doc/man3/DSA_generate_key.pod | 0 .../doc/man3/DSA_generate_parameters.pod | 0 .../doc/man3/DSA_get0_pqg.pod | 0 .../doc/man3/DSA_meth_new.pod | 0 .../doc/man3/DSA_new.pod | 0 .../doc/man3/DSA_set_method.pod | 0 .../doc/man3/DSA_sign.pod | 0 .../doc/man3/DSA_size.pod | 0 .../doc/man3/DTLS_get_data_mtu.pod | 0 .../doc/man3/DTLS_set_timer_cb.pod | 0 .../doc/man3/DTLSv1_listen.pod | 0 .../doc/man3/ECDSA_SIG_new.pod | 0 .../doc/man3/ECPKParameters_print.pod | 0 .../doc/man3/EC_GFp_simple_method.pod | 0 .../doc/man3/EC_GROUP_copy.pod | 0 .../doc/man3/EC_GROUP_new.pod | 0 .../doc/man3/EC_KEY_get_enc_flags.pod | 0 .../doc/man3/EC_KEY_new.pod | 0 .../doc/man3/EC_POINT_add.pod | 0 .../doc/man3/EC_POINT_new.pod | 0 .../doc/man3/ENGINE_add.pod | 0 .../doc/man3/ERR_GET_LIB.pod | 0 .../doc/man3/ERR_clear_error.pod | 0 .../doc/man3/ERR_error_string.pod | 0 .../doc/man3/ERR_get_error.pod | 0 .../doc/man3/ERR_load_crypto_strings.pod | 0 .../doc/man3/ERR_load_strings.pod | 0 .../doc/man3/ERR_print_errors.pod | 0 .../doc/man3/ERR_put_error.pod | 0 .../doc/man3/ERR_remove_state.pod | 0 .../doc/man3/ERR_set_mark.pod | 0 .../doc/man3/EVP_BytesToKey.pod | 0 .../man3/EVP_CIPHER_CTX_get_cipher_data.pod | 0 .../doc/man3/EVP_CIPHER_meth_new.pod | 0 .../doc/man3/EVP_DigestInit.pod | 0 .../doc/man3/EVP_DigestSignInit.pod | 0 .../doc/man3/EVP_DigestVerifyInit.pod | 0 .../doc/man3/EVP_EncodeInit.pod | 0 .../doc/man3/EVP_EncryptInit.pod | 0 .../doc/man3/EVP_MD_meth_new.pod | 0 .../doc/man3/EVP_OpenInit.pod | 0 .../doc/man3/EVP_PKEY_ASN1_METHOD.pod | 0 .../doc/man3/EVP_PKEY_CTX_ctrl.pod | 0 .../doc/man3/EVP_PKEY_CTX_new.pod | 0 .../doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod | 0 .../EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod | 0 .../doc/man3/EVP_PKEY_asn1_get_count.pod | 0 .../doc/man3/EVP_PKEY_cmp.pod | 0 .../doc/man3/EVP_PKEY_decrypt.pod | 0 .../doc/man3/EVP_PKEY_derive.pod | 0 .../doc/man3/EVP_PKEY_encrypt.pod | 0 .../man3/EVP_PKEY_get_default_digest_nid.pod | 0 .../doc/man3/EVP_PKEY_keygen.pod | 0 .../doc/man3/EVP_PKEY_meth_get_count.pod | 0 .../doc/man3/EVP_PKEY_meth_new.pod | 0 .../doc/man3/EVP_PKEY_new.pod | 0 .../doc/man3/EVP_PKEY_print_private.pod | 0 .../doc/man3/EVP_PKEY_set1_RSA.pod | 0 .../doc/man3/EVP_PKEY_sign.pod | 0 .../doc/man3/EVP_PKEY_size.pod | 0 .../doc/man3/EVP_PKEY_verify.pod | 0 .../doc/man3/EVP_PKEY_verify_recover.pod | 0 .../doc/man3/EVP_SealInit.pod | 0 .../doc/man3/EVP_SignInit.pod | 0 .../doc/man3/EVP_VerifyInit.pod | 0 .../doc/man3/EVP_aes.pod | 0 .../doc/man3/EVP_aria.pod | 0 .../doc/man3/EVP_bf_cbc.pod | 0 .../doc/man3/EVP_blake2b512.pod | 0 .../doc/man3/EVP_camellia.pod | 0 .../doc/man3/EVP_cast5_cbc.pod | 0 .../doc/man3/EVP_chacha20.pod | 0 .../doc/man3/EVP_des.pod | 0 .../doc/man3/EVP_desx_cbc.pod | 0 .../doc/man3/EVP_idea_cbc.pod | 0 .../doc/man3/EVP_md2.pod | 0 .../doc/man3/EVP_md4.pod | 0 .../doc/man3/EVP_md5.pod | 0 .../doc/man3/EVP_mdc2.pod | 0 .../doc/man3/EVP_rc2_cbc.pod | 0 .../doc/man3/EVP_rc4.pod | 0 .../doc/man3/EVP_rc5_32_12_16_cbc.pod | 0 .../doc/man3/EVP_ripemd160.pod | 0 .../doc/man3/EVP_seed_cbc.pod | 0 .../doc/man3/EVP_sha1.pod | 0 .../doc/man3/EVP_sha224.pod | 0 .../doc/man3/EVP_sha3_224.pod | 0 .../doc/man3/EVP_sm3.pod | 0 .../doc/man3/EVP_sm4_cbc.pod | 0 .../doc/man3/EVP_whirlpool.pod | 0 .../doc/man3/HMAC.pod | 0 .../doc/man3/MD5.pod | 0 .../doc/man3/MDC2_Init.pod | 0 .../doc/man3/OBJ_nid2obj.pod | 0 .../doc/man3/OCSP_REQUEST_new.pod | 0 .../doc/man3/OCSP_cert_to_id.pod | 0 .../doc/man3/OCSP_request_add1_nonce.pod | 0 .../doc/man3/OCSP_resp_find_status.pod | 0 .../doc/man3/OCSP_response_status.pod | 0 .../doc/man3/OCSP_sendreq_new.pod | 0 .../doc/man3/OPENSSL_Applink.pod | 0 .../doc/man3/OPENSSL_LH_COMPFUNC.pod | 0 .../doc/man3/OPENSSL_LH_stats.pod | 0 .../doc/man3/OPENSSL_VERSION_NUMBER.pod | 0 .../doc/man3/OPENSSL_config.pod | 0 .../doc/man3/OPENSSL_fork_prepare.pod | 0 .../doc/man3/OPENSSL_ia32cap.pod | 0 .../doc/man3/OPENSSL_init_crypto.pod | 0 .../doc/man3/OPENSSL_init_ssl.pod | 0 .../doc/man3/OPENSSL_instrument_bus.pod | 0 .../doc/man3/OPENSSL_load_builtin_modules.pod | 0 .../doc/man3/OPENSSL_malloc.pod | 0 .../doc/man3/OPENSSL_secure_malloc.pod | 0 .../doc/man3/OSSL_STORE_INFO.pod | 0 .../doc/man3/OSSL_STORE_LOADER.pod | 0 .../doc/man3/OSSL_STORE_SEARCH.pod | 0 .../doc/man3/OSSL_STORE_expect.pod | 0 .../doc/man3/OSSL_STORE_open.pod | 0 .../doc/man3/OpenSSL_add_all_algorithms.pod | 0 .../doc/man3/PEM_bytes_read_bio.pod | 0 .../doc/man3/PEM_read.pod | 0 .../doc/man3/PEM_read_CMS.pod | 0 .../doc/man3/PEM_read_bio_PrivateKey.pod | 0 .../doc/man3/PEM_read_bio_ex.pod | 0 .../doc/man3/PEM_write_bio_CMS_stream.pod | 0 .../doc/man3/PEM_write_bio_PKCS7_stream.pod | 0 .../doc/man3/PKCS12_create.pod | 0 .../doc/man3/PKCS12_newpass.pod | 0 .../doc/man3/PKCS12_parse.pod | 0 .../doc/man3/PKCS5_PBKDF2_HMAC.pod | 0 .../doc/man3/PKCS7_decrypt.pod | 0 .../doc/man3/PKCS7_encrypt.pod | 0 .../doc/man3/PKCS7_sign.pod | 0 .../doc/man3/PKCS7_sign_add_signer.pod | 0 .../doc/man3/PKCS7_verify.pod | 0 .../doc/man3/RAND_DRBG_generate.pod | 0 .../doc/man3/RAND_DRBG_get0_master.pod | 0 .../doc/man3/RAND_DRBG_new.pod | 0 .../doc/man3/RAND_DRBG_reseed.pod | 0 .../doc/man3/RAND_DRBG_set_callbacks.pod | 0 .../doc/man3/RAND_DRBG_set_ex_data.pod | 0 .../doc/man3/RAND_add.pod | 0 .../doc/man3/RAND_bytes.pod | 0 .../doc/man3/RAND_cleanup.pod | 0 .../doc/man3/RAND_egd.pod | 0 .../doc/man3/RAND_load_file.pod | 0 .../doc/man3/RAND_set_rand_method.pod | 0 .../doc/man3/RC4_set_key.pod | 0 .../doc/man3/RIPEMD160_Init.pod | 0 .../doc/man3/RSA_blinding_on.pod | 0 .../doc/man3/RSA_check_key.pod | 0 .../doc/man3/RSA_generate_key.pod | 0 .../doc/man3/RSA_get0_key.pod | 0 .../doc/man3/RSA_meth_new.pod | 0 .../doc/man3/RSA_new.pod | 0 .../doc/man3/RSA_padding_add_PKCS1_type_1.pod | 0 .../doc/man3/RSA_print.pod | 0 .../doc/man3/RSA_private_encrypt.pod | 0 .../doc/man3/RSA_public_encrypt.pod | 0 .../doc/man3/RSA_set_method.pod | 0 .../doc/man3/RSA_sign.pod | 0 .../doc/man3/RSA_sign_ASN1_OCTET_STRING.pod | 0 .../doc/man3/RSA_size.pod | 0 .../doc/man3/SCT_new.pod | 0 .../doc/man3/SCT_print.pod | 0 .../doc/man3/SCT_validate.pod | 0 .../doc/man3/SHA256_Init.pod | 0 .../doc/man3/SMIME_read_CMS.pod | 0 .../doc/man3/SMIME_read_PKCS7.pod | 0 .../doc/man3/SMIME_write_CMS.pod | 0 .../doc/man3/SMIME_write_PKCS7.pod | 0 .../doc/man3/SSL_CIPHER_get_name.pod | 0 .../man3/SSL_COMP_add_compression_method.pod | 0 .../doc/man3/SSL_CONF_CTX_new.pod | 0 .../doc/man3/SSL_CONF_CTX_set1_prefix.pod | 0 .../doc/man3/SSL_CONF_CTX_set_flags.pod | 0 .../doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod | 0 .../doc/man3/SSL_CONF_cmd.pod | 0 .../doc/man3/SSL_CONF_cmd_argv.pod | 0 .../doc/man3/SSL_CTX_add1_chain_cert.pod | 0 .../doc/man3/SSL_CTX_add_extra_chain_cert.pod | 0 .../doc/man3/SSL_CTX_add_session.pod | 0 .../doc/man3/SSL_CTX_config.pod | 0 .../doc/man3/SSL_CTX_ctrl.pod | 0 .../doc/man3/SSL_CTX_dane_enable.pod | 0 .../doc/man3/SSL_CTX_flush_sessions.pod | 0 .../doc/man3/SSL_CTX_free.pod | 0 .../doc/man3/SSL_CTX_get0_param.pod | 0 .../doc/man3/SSL_CTX_get_verify_mode.pod | 0 .../man3/SSL_CTX_has_client_custom_ext.pod | 0 .../man3/SSL_CTX_load_verify_locations.pod | 0 .../doc/man3/SSL_CTX_new.pod | 0 .../doc/man3/SSL_CTX_sess_number.pod | 0 .../doc/man3/SSL_CTX_sess_set_cache_size.pod | 0 .../doc/man3/SSL_CTX_sess_set_get_cb.pod | 0 .../doc/man3/SSL_CTX_sessions.pod | 0 .../doc/man3/SSL_CTX_set0_CA_list.pod | 0 .../doc/man3/SSL_CTX_set1_curves.pod | 0 .../doc/man3/SSL_CTX_set1_sigalgs.pod | 0 .../man3/SSL_CTX_set1_verify_cert_store.pod | 0 .../doc/man3/SSL_CTX_set_alpn_select_cb.pod | 0 .../doc/man3/SSL_CTX_set_cert_cb.pod | 0 .../doc/man3/SSL_CTX_set_cert_store.pod | 0 .../man3/SSL_CTX_set_cert_verify_callback.pod | 0 .../doc/man3/SSL_CTX_set_cipher_list.pod | 0 .../doc/man3/SSL_CTX_set_client_cert_cb.pod | 0 .../doc/man3/SSL_CTX_set_client_hello_cb.pod | 0 .../SSL_CTX_set_ct_validation_callback.pod | 0 .../doc/man3/SSL_CTX_set_ctlog_list_file.pod | 0 .../man3/SSL_CTX_set_default_passwd_cb.pod | 0 .../doc/man3/SSL_CTX_set_ex_data.pod | 0 .../man3/SSL_CTX_set_generate_session_id.pod | 0 .../doc/man3/SSL_CTX_set_info_callback.pod | 0 .../doc/man3/SSL_CTX_set_keylog_callback.pod | 0 .../doc/man3/SSL_CTX_set_max_cert_list.pod | 0 .../man3/SSL_CTX_set_min_proto_version.pod | 0 .../doc/man3/SSL_CTX_set_mode.pod | 0 .../doc/man3/SSL_CTX_set_msg_callback.pod | 0 .../doc/man3/SSL_CTX_set_num_tickets.pod | 0 .../doc/man3/SSL_CTX_set_options.pod | 0 .../man3/SSL_CTX_set_psk_client_callback.pod | 0 .../doc/man3/SSL_CTX_set_quiet_shutdown.pod | 0 .../doc/man3/SSL_CTX_set_read_ahead.pod | 0 .../SSL_CTX_set_record_padding_callback.pod | 0 .../doc/man3/SSL_CTX_set_security_level.pod | 0 .../man3/SSL_CTX_set_session_cache_mode.pod | 0 .../man3/SSL_CTX_set_session_id_context.pod | 0 .../man3/SSL_CTX_set_session_ticket_cb.pod | 0 .../man3/SSL_CTX_set_split_send_fragment.pod | 0 .../doc/man3/SSL_CTX_set_ssl_version.pod | 0 ...L_CTX_set_stateless_cookie_generate_cb.pod | 0 .../doc/man3/SSL_CTX_set_timeout.pod | 0 ...SSL_CTX_set_tlsext_servername_callback.pod | 0 .../doc/man3/SSL_CTX_set_tlsext_status_cb.pod | 0 .../man3/SSL_CTX_set_tlsext_ticket_key_cb.pod | 0 .../doc/man3/SSL_CTX_set_tlsext_use_srtp.pod | 0 .../doc/man3/SSL_CTX_set_tmp_dh_callback.pod | 0 .../doc/man3/SSL_CTX_set_verify.pod | 0 .../doc/man3/SSL_CTX_use_certificate.pod | 0 .../man3/SSL_CTX_use_psk_identity_hint.pod | 0 .../doc/man3/SSL_CTX_use_serverinfo.pod | 0 .../doc/man3/SSL_SESSION_free.pod | 0 .../doc/man3/SSL_SESSION_get0_cipher.pod | 0 .../doc/man3/SSL_SESSION_get0_hostname.pod | 0 .../doc/man3/SSL_SESSION_get0_id_context.pod | 0 .../doc/man3/SSL_SESSION_get0_peer.pod | 0 .../doc/man3/SSL_SESSION_get_compress_id.pod | 0 .../doc/man3/SSL_SESSION_get_ex_data.pod | 0 .../man3/SSL_SESSION_get_protocol_version.pod | 0 .../doc/man3/SSL_SESSION_get_time.pod | 0 .../doc/man3/SSL_SESSION_has_ticket.pod | 0 .../doc/man3/SSL_SESSION_is_resumable.pod | 0 .../doc/man3/SSL_SESSION_print.pod | 0 .../doc/man3/SSL_SESSION_set1_id.pod | 0 .../doc/man3/SSL_accept.pod | 0 .../doc/man3/SSL_alert_type_string.pod | 0 .../doc/man3/SSL_alloc_buffers.pod | 0 .../doc/man3/SSL_check_chain.pod | 0 .../doc/man3/SSL_clear.pod | 0 .../doc/man3/SSL_connect.pod | 0 .../doc/man3/SSL_do_handshake.pod | 0 .../doc/man3/SSL_export_keying_material.pod | 0 .../doc/man3/SSL_extension_supported.pod | 0 .../doc/man3/SSL_free.pod | 0 .../doc/man3/SSL_get0_peer_scts.pod | 0 .../doc/man3/SSL_get_SSL_CTX.pod | 0 .../doc/man3/SSL_get_all_async_fds.pod | 0 .../doc/man3/SSL_get_ciphers.pod | 0 .../doc/man3/SSL_get_client_random.pod | 0 .../doc/man3/SSL_get_current_cipher.pod | 0 .../doc/man3/SSL_get_default_timeout.pod | 0 .../doc/man3/SSL_get_error.pod | 0 .../doc/man3/SSL_get_extms_support.pod | 0 .../doc/man3/SSL_get_fd.pod | 0 .../doc/man3/SSL_get_peer_cert_chain.pod | 0 .../doc/man3/SSL_get_peer_certificate.pod | 0 .../doc/man3/SSL_get_peer_signature_nid.pod | 0 .../doc/man3/SSL_get_peer_tmp_key.pod | 0 .../doc/man3/SSL_get_psk_identity.pod | 0 .../doc/man3/SSL_get_rbio.pod | 0 .../doc/man3/SSL_get_session.pod | 0 .../doc/man3/SSL_get_shared_sigalgs.pod | 0 .../doc/man3/SSL_get_verify_result.pod | 0 .../doc/man3/SSL_get_version.pod | 0 .../doc/man3/SSL_in_init.pod | 0 .../doc/man3/SSL_key_update.pod | 0 .../doc/man3/SSL_library_init.pod | 0 .../doc/man3/SSL_load_client_CA_file.pod | 0 .../doc/man3/SSL_new.pod | 0 .../doc/man3/SSL_pending.pod | 0 .../doc/man3/SSL_read.pod | 0 .../doc/man3/SSL_read_early_data.pod | 0 .../doc/man3/SSL_rstate_string.pod | 0 .../doc/man3/SSL_session_reused.pod | 0 .../doc/man3/SSL_set1_host.pod | 0 .../doc/man3/SSL_set_bio.pod | 0 .../doc/man3/SSL_set_connect_state.pod | 0 .../doc/man3/SSL_set_fd.pod | 0 .../doc/man3/SSL_set_session.pod | 0 .../doc/man3/SSL_set_shutdown.pod | 0 .../doc/man3/SSL_set_verify_result.pod | 0 .../doc/man3/SSL_shutdown.pod | 0 .../doc/man3/SSL_state_string.pod | 0 .../doc/man3/SSL_want.pod | 0 .../doc/man3/SSL_write.pod | 0 .../doc/man3/UI_STRING.pod | 0 .../doc/man3/UI_UTIL_read_pw.pod | 0 .../doc/man3/UI_create_method.pod | 0 .../doc/man3/UI_new.pod | 0 .../doc/man3/X509V3_get_d2i.pod | 0 .../doc/man3/X509_ALGOR_dup.pod | 0 .../doc/man3/X509_CRL_get0_by_serial.pod | 0 .../doc/man3/X509_EXTENSION_set_object.pod | 0 .../doc/man3/X509_LOOKUP.pod | 0 .../doc/man3/X509_LOOKUP_hash_dir.pod | 0 .../doc/man3/X509_LOOKUP_meth_new.pod | 0 .../doc/man3/X509_NAME_ENTRY_get_object.pod | 0 .../doc/man3/X509_NAME_add_entry_by_txt.pod | 0 .../doc/man3/X509_NAME_get0_der.pod | 0 .../doc/man3/X509_NAME_get_index_by_NID.pod | 0 .../doc/man3/X509_NAME_print_ex.pod | 0 .../doc/man3/X509_PUBKEY_new.pod | 0 .../doc/man3/X509_SIG_get0.pod | 0 .../doc/man3/X509_STORE_CTX_get_error.pod | 0 .../doc/man3/X509_STORE_CTX_new.pod | 0 .../doc/man3/X509_STORE_CTX_set_verify_cb.pod | 0 .../doc/man3/X509_STORE_add_cert.pod | 0 .../doc/man3/X509_STORE_get0_param.pod | 0 .../doc/man3/X509_STORE_new.pod | 0 .../man3/X509_STORE_set_verify_cb_func.pod | 0 .../doc/man3/X509_VERIFY_PARAM_set_flags.pod | 0 .../doc/man3/X509_check_ca.pod | 0 .../doc/man3/X509_check_host.pod | 0 .../doc/man3/X509_check_issued.pod | 0 .../doc/man3/X509_check_private_key.pod | 0 .../doc/man3/X509_check_purpose.pod | 0 .../doc/man3/X509_cmp.pod | 0 .../doc/man3/X509_cmp_time.pod | 0 .../doc/man3/X509_digest.pod | 0 .../doc/man3/X509_dup.pod | 0 .../doc/man3/X509_get0_notBefore.pod | 0 .../doc/man3/X509_get0_signature.pod | 0 .../doc/man3/X509_get0_uids.pod | 0 .../doc/man3/X509_get_extension_flags.pod | 0 .../doc/man3/X509_get_pubkey.pod | 0 .../doc/man3/X509_get_serialNumber.pod | 0 .../doc/man3/X509_get_subject_name.pod | 0 .../doc/man3/X509_get_version.pod | 0 .../doc/man3/X509_new.pod | 0 .../doc/man3/X509_sign.pod | 0 .../doc/man3/X509_verify_cert.pod | 0 .../doc/man3/X509v3_get_ext_by_NID.pod | 0 .../doc/man3/d2i_DHparams.pod | 0 .../doc/man3/d2i_PKCS8PrivateKey_bio.pod | 0 .../doc/man3/d2i_PrivateKey.pod | 0 .../doc/man3/d2i_SSL_SESSION.pod | 0 .../doc/man3/d2i_X509.pod | 0 .../doc/man3/i2d_CMS_bio_stream.pod | 0 .../doc/man3/i2d_PKCS7_bio_stream.pod | 0 .../doc/man3/i2d_re_X509_tbs.pod | 0 .../doc/man3/o2i_SCT_LIST.pod | 0 .../doc/man5/config.pod | 0 .../doc/man5/x509v3_config.pod | 0 .../doc/man7/Ed25519.pod | 0 .../doc/man7/RAND.pod | 0 .../doc/man7/RAND_DRBG.pod | 0 .../doc/man7/RSA-PSS.pod | 0 .../doc/man7/SM2.pod | 0 .../doc/man7/X25519.pod | 0 .../doc/man7/bio.pod | 0 .../doc/man7/crypto.pod | 0 .../doc/man7/ct.pod | 0 .../doc/man7/des_modes.pod | 0 .../doc/man7/evp.pod | 0 .../doc/man7/ossl_store-file.pod | 0 .../doc/man7/ossl_store.pod | 0 .../doc/man7/passphrase-encoding.pod | 0 .../doc/man7/proxy-certificates.pod | 0 .../doc/man7/scrypt.pod | 0 .../doc/man7/ssl.pod | 0 .../doc/man7/x509.pod | 0 .../doc/openssl-c-indent.el | 0 .../e_os.h | 0 .../engines/asm/e_padlock-x86.pl | 0 .../engines/asm/e_padlock-x86_64.pl | 0 .../engines/build.info | 0 .../engines/e_afalg.c | 0 .../engines/e_afalg.ec | 0 .../engines/e_afalg.h | 0 .../engines/e_afalg.txt | 0 .../engines/e_afalg_err.c | 0 .../engines/e_afalg_err.h | 0 .../engines/e_capi.c | 0 .../engines/e_capi.ec | 0 .../engines/e_capi.txt | 0 .../engines/e_capi_err.c | 0 .../engines/e_capi_err.h | 0 .../engines/e_dasync.c | 0 .../engines/e_dasync.ec | 0 .../engines/e_dasync.txt | 0 .../engines/e_dasync_err.c | 0 .../engines/e_dasync_err.h | 0 .../engines/e_ossltest.c | 0 .../engines/e_ossltest.ec | 0 .../engines/e_ossltest.txt | 0 .../engines/e_ossltest_err.c | 0 .../engines/e_ossltest_err.h | 0 .../engines/e_padlock.c | 0 .../external/perl/Downloaded.txt | 0 .../external/perl/Text-Template-1.46/Artistic | 0 .../external/perl/Text-Template-1.46/COPYING | 0 .../external/perl/Text-Template-1.46/INSTALL | 0 .../external/perl/Text-Template-1.46/MANIFEST | 0 .../perl/Text-Template-1.46/META.json | 0 .../external/perl/Text-Template-1.46/META.yml | 0 .../perl/Text-Template-1.46/Makefile.PL | 0 .../external/perl/Text-Template-1.46/README | 0 .../Text-Template-1.46/lib/Text/Template.pm | 0 .../lib/Text/Template/Preprocess.pm | 0 .../perl/Text-Template-1.46/t/00-version.t | 0 .../perl/Text-Template-1.46/t/01-basic.t | 0 .../perl/Text-Template-1.46/t/02-hash.t | 0 .../perl/Text-Template-1.46/t/03-out.t | 0 .../perl/Text-Template-1.46/t/04-safe.t | 0 .../perl/Text-Template-1.46/t/05-safe2.t | 0 .../perl/Text-Template-1.46/t/06-ofh.t | 0 .../perl/Text-Template-1.46/t/07-safe3.t | 0 .../perl/Text-Template-1.46/t/08-exported.t | 0 .../perl/Text-Template-1.46/t/09-error.t | 0 .../perl/Text-Template-1.46/t/10-delimiters.t | 0 .../perl/Text-Template-1.46/t/11-prepend.t | 0 .../perl/Text-Template-1.46/t/12-preprocess.t | 0 .../perl/Text-Template-1.46/t/13-taint.t | 0 .../perl/Text-Template-1.46/t/14-broken.t | 0 .../external/perl/transfer/Text/Template.pm | 0 .../fuzz/README.md | 0 .../fuzz/asn1.c | 0 .../fuzz/asn1parse.c | 0 .../fuzz/bignum.c | 0 .../fuzz/bndiv.c | 0 .../fuzz/build.info | 0 .../fuzz/client.c | 0 .../fuzz/cms.c | 0 .../fuzz/conf.c | 0 .../fuzz/crl.c | 0 .../fuzz/ct.c | 0 .../fuzz/driver.c | 0 .../fuzz/fuzzer.h | 0 .../fuzz/helper.py | 0 .../fuzz/mkfuzzoids.pl | 0 .../fuzz/oids.txt | 0 .../fuzz/rand.inc | 0 .../fuzz/server.c | 0 .../fuzz/test-corpus.c | 0 .../fuzz/x509.c | 0 .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 0 .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/crypto/aria.h | 0 .../include/crypto/asn1.h | 0 .../include/crypto/async.h | 0 .../include/crypto/bn.h | 0 .../include/crypto/bn_conf.h.in | 0 .../include/crypto/bn_dh.h | 0 .../include/crypto/bn_srp.h | 0 .../include/crypto/chacha.h | 0 .../include/crypto/cryptlib.h | 0 .../include/crypto/ctype.h | 0 .../include/crypto/dso_conf.h.in | 0 .../include/crypto/ec.h | 0 .../include/crypto/engine.h | 0 .../include/crypto/err.h | 0 .../include/crypto/evp.h | 0 .../include/crypto/lhash.h | 0 .../include/crypto/md32_common.h | 0 .../include/crypto/objects.h | 0 .../include/crypto/poly1305.h | 0 .../include/crypto/rand.h | 0 .../include/crypto/sha.h | 0 .../include/crypto/siphash.h | 0 .../include/crypto/sm2.h | 0 .../include/crypto/sm2err.h | 0 .../include/crypto/sm3.h | 0 .../include/crypto/sm4.h | 0 .../include/crypto/store.h | 0 .../include/crypto/x509.h | 0 .../internal/__DECC_INCLUDE_EPILOGUE.H | 0 .../internal/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/internal/bio.h | 0 .../include/internal/comp.h | 0 .../include/internal/conf.h | 0 .../include/internal/constant_time.h | 0 .../include/internal/cryptlib.h | 0 .../include/internal/dane.h | 0 .../include/internal/dso.h | 0 .../include/internal/dsoerr.h | 0 .../include/internal/err.h | 0 .../include/internal/nelem.h | 0 .../include/internal/numbers.h | 0 .../include/internal/o_dir.h | 0 .../include/internal/o_str.h | 0 .../include/internal/refcount.h | 0 .../include/internal/sockets.h | 0 .../include/internal/sslconf.h | 0 .../include/internal/thread_once.h | 0 .../include/internal/tsan_assist.h | 0 .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 0 .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/openssl/aes.h | 0 .../include/openssl/asn1.h | 0 .../include/openssl/asn1_mac.h | 0 .../include/openssl/asn1err.h | 0 .../include/openssl/asn1t.h | 0 .../include/openssl/async.h | 0 .../include/openssl/asyncerr.h | 0 .../include/openssl/bio.h | 0 .../include/openssl/bioerr.h | 0 .../include/openssl/blowfish.h | 0 .../include/openssl/bn.h | 0 .../include/openssl/bnerr.h | 0 .../include/openssl/buffer.h | 0 .../include/openssl/buffererr.h | 0 .../include/openssl/camellia.h | 0 .../include/openssl/cast.h | 0 .../include/openssl/cmac.h | 0 .../include/openssl/cms.h | 0 .../include/openssl/cmserr.h | 0 .../include/openssl/comp.h | 0 .../include/openssl/comperr.h | 0 .../include/openssl/conf.h | 0 .../include/openssl/conf_api.h | 0 .../include/openssl/conferr.h | 0 .../include/openssl/crypto.h | 0 .../include/openssl/cryptoerr.h | 0 .../include/openssl/ct.h | 0 .../include/openssl/cterr.h | 0 .../include/openssl/des.h | 0 .../include/openssl/dh.h | 6 ++++-- .../include/openssl/dherr.h | 1 + .../include/openssl/dsa.h | 0 .../include/openssl/dsaerr.h | 0 .../include/openssl/dtls1.h | 0 .../include/openssl/e_os2.h | 0 .../include/openssl/ebcdic.h | 0 .../include/openssl/ec.h | 0 .../include/openssl/ecdh.h | 0 .../include/openssl/ecdsa.h | 0 .../include/openssl/ecerr.h | 0 .../include/openssl/engine.h | 0 .../include/openssl/engineerr.h | 0 .../include/openssl/err.h | 0 .../include/openssl/evp.h | 0 .../include/openssl/evperr.h | 0 .../include/openssl/hmac.h | 0 .../include/openssl/idea.h | 0 .../include/openssl/kdf.h | 0 .../include/openssl/kdferr.h | 0 .../include/openssl/lhash.h | 0 .../include/openssl/md2.h | 0 .../include/openssl/md4.h | 0 .../include/openssl/md5.h | 0 .../include/openssl/mdc2.h | 0 .../include/openssl/modes.h | 0 .../include/openssl/obj_mac.h | 0 .../include/openssl/objects.h | 0 .../include/openssl/objectserr.h | 0 .../include/openssl/ocsp.h | 0 .../include/openssl/ocsperr.h | 0 .../include/openssl/opensslconf.h.in | 0 .../include/openssl/opensslv.h | 2 +- .../include/openssl/ossl_typ.h | 0 .../include/openssl/pem.h | 0 .../include/openssl/pem2.h | 0 .../include/openssl/pemerr.h | 0 .../include/openssl/pkcs12.h | 0 .../include/openssl/pkcs12err.h | 0 .../include/openssl/pkcs7.h | 0 .../include/openssl/pkcs7err.h | 0 .../include/openssl/rand.h | 0 .../include/openssl/rand_drbg.h | 0 .../include/openssl/randerr.h | 0 .../include/openssl/rc2.h | 0 .../include/openssl/rc4.h | 0 .../include/openssl/rc5.h | 0 .../include/openssl/ripemd.h | 0 .../include/openssl/rsa.h | 0 .../include/openssl/rsaerr.h | 0 .../include/openssl/safestack.h | 0 .../include/openssl/seed.h | 0 .../include/openssl/sha.h | 0 .../include/openssl/srp.h | 0 .../include/openssl/srtp.h | 0 .../include/openssl/ssl.h | 0 .../include/openssl/ssl2.h | 0 .../include/openssl/ssl3.h | 0 .../include/openssl/sslerr.h | 0 .../include/openssl/stack.h | 0 .../include/openssl/store.h | 0 .../include/openssl/storeerr.h | 0 .../include/openssl/symhacks.h | 0 .../include/openssl/tls1.h | 0 .../include/openssl/ts.h | 0 .../include/openssl/tserr.h | 0 .../include/openssl/txt_db.h | 0 .../include/openssl/ui.h | 0 .../include/openssl/uierr.h | 0 .../include/openssl/whrlpool.h | 0 .../include/openssl/x509.h | 0 .../include/openssl/x509_vfy.h | 0 .../include/openssl/x509err.h | 0 .../include/openssl/x509v3.h | 0 .../include/openssl/x509v3err.h | 0 .../ms/applink.c | 0 .../ms/cmp.pl | 0 .../ms/uplink-common.pl | 0 .../ms/uplink-ia64.pl | 0 .../ms/uplink-x86.pl | 0 .../ms/uplink-x86_64.pl | 0 .../ms/uplink.c | 0 .../ms/uplink.h | 0 .../os-dep/haiku.h | 0 .../ssl/bio_ssl.c | 0 .../ssl/build.info | 0 .../ssl/d1_lib.c | 0 .../ssl/d1_msg.c | 0 .../ssl/d1_srtp.c | 0 .../ssl/methods.c | 0 .../ssl/packet.c | 0 .../ssl/packet_local.h | 0 .../ssl/pqueue.c | 0 .../ssl/record/README | 0 .../ssl/record/dtls1_bitmap.c | 0 .../ssl/record/rec_layer_d1.c | 0 .../ssl/record/rec_layer_s3.c | 0 .../ssl/record/record.h | 0 .../ssl/record/record_local.h | 0 .../ssl/record/ssl3_buffer.c | 0 .../ssl/record/ssl3_record.c | 0 .../ssl/record/ssl3_record_tls13.c | 0 .../ssl/s3_cbc.c | 0 .../ssl/s3_enc.c | 0 .../ssl/s3_lib.c | 0 .../ssl/s3_msg.c | 0 .../ssl/ssl_asn1.c | 0 .../ssl/ssl_cert.c | 0 .../ssl/ssl_cert_table.h | 0 .../ssl/ssl_ciph.c | 0 .../ssl/ssl_conf.c | 0 .../ssl/ssl_err.c | 0 .../ssl/ssl_init.c | 0 .../ssl/ssl_lib.c | 0 .../ssl/ssl_local.h | 0 .../ssl/ssl_mcnf.c | 0 .../ssl/ssl_rsa.c | 0 .../ssl/ssl_sess.c | 0 .../ssl/ssl_stat.c | 0 .../ssl/ssl_txt.c | 0 .../ssl/ssl_utst.c | 0 .../ssl/statem/README | 0 .../ssl/statem/extensions.c | 0 .../ssl/statem/extensions_clnt.c | 0 .../ssl/statem/extensions_cust.c | 0 .../ssl/statem/extensions_srvr.c | 0 .../ssl/statem/statem.c | 0 .../ssl/statem/statem.h | 0 .../ssl/statem/statem_clnt.c | 0 .../ssl/statem/statem_dtls.c | 0 .../ssl/statem/statem_lib.c | 0 .../ssl/statem/statem_local.h | 0 .../ssl/statem/statem_srvr.c | 0 .../ssl/t1_enc.c | 0 .../ssl/t1_lib.c | 0 .../ssl/t1_trce.c | 0 .../ssl/tls13_enc.c | 0 .../ssl/tls_srp.c | 0 .../test/CAss.cnf | 0 .../test/CAssdh.cnf | 0 .../test/CAssdsa.cnf | 0 .../test/CAssrsa.cnf | 0 .../test/CAtsa.cnf | 0 .../test/P1ss.cnf | 0 .../test/P2ss.cnf | 0 .../test/README | 0 .../test/README.external | 0 .../test/README.ssltest.md | 0 .../test/Sssdsa.cnf | 0 .../test/Sssrsa.cnf | 0 .../test/Uss.cnf | 0 .../test/aborttest.c | 0 .../test/afalgtest.c | 0 .../test/asn1_decode_test.c | 0 .../test/asn1_encode_test.c | 0 .../test/asn1_internal_test.c | 0 .../test/asn1_string_table_test.c | 0 .../test/asn1_time_test.c | 0 .../test/asynciotest.c | 0 .../test/asynctest.c | 0 .../test/bad_dtls_test.c | 0 .../test/bftest.c | 0 .../test/bio_callback_test.c | 0 .../test/bio_enc_test.c | 0 .../test/bio_memleak_test.c | 0 .../test/bioprinttest.c | 0 .../test/bntest.c | 0 .../test/bntests.pl | 0 .../test/build.info | 0 .../test/casttest.c | 0 .../test/certs/alt1-cert.pem | 0 .../test/certs/alt1-key.pem | 0 .../test/certs/alt2-cert.pem | 0 .../test/certs/alt2-key.pem | 0 .../test/certs/alt3-cert.pem | 0 .../test/certs/alt3-key.pem | 0 .../test/certs/bad-pc3-cert.pem | 0 .../test/certs/bad-pc3-key.pem | 0 .../test/certs/bad-pc4-cert.pem | 0 .../test/certs/bad-pc4-key.pem | 0 .../test/certs/bad-pc6-cert.pem | 0 .../test/certs/bad-pc6-key.pem | 0 .../test/certs/bad.key | 0 .../test/certs/bad.pem | 0 .../test/certs/badalt1-cert.pem | 0 .../test/certs/badalt1-key.pem | 0 .../test/certs/badalt10-cert.pem | 0 .../test/certs/badalt10-key.pem | 0 .../test/certs/badalt2-cert.pem | 0 .../test/certs/badalt2-key.pem | 0 .../test/certs/badalt3-cert.pem | 0 .../test/certs/badalt3-key.pem | 0 .../test/certs/badalt4-cert.pem | 0 .../test/certs/badalt4-key.pem | 0 .../test/certs/badalt5-cert.pem | 0 .../test/certs/badalt5-key.pem | 0 .../test/certs/badalt6-cert.pem | 0 .../test/certs/badalt6-key.pem | 0 .../test/certs/badalt7-cert.pem | 0 .../test/certs/badalt7-key.pem | 0 .../test/certs/badalt8-cert.pem | 0 .../test/certs/badalt8-key.pem | 0 .../test/certs/badalt9-cert.pem | 0 .../test/certs/badalt9-key.pem | 0 .../test/certs/badcn1-cert.pem | 0 .../test/certs/badcn1-key.pem | 0 .../test/certs/ca+anyEKU.pem | 0 .../test/certs/ca+clientAuth.pem | 0 .../test/certs/ca+serverAuth.pem | 0 .../test/certs/ca-anyEKU.pem | 0 .../test/certs/ca-cert-768.pem | 0 .../test/certs/ca-cert-768i.pem | 0 .../test/certs/ca-cert-ec-explicit.pem | 0 .../test/certs/ca-cert-ec-named.pem | 0 .../test/certs/ca-cert-md5-any.pem | 0 .../test/certs/ca-cert-md5.pem | 0 .../test/certs/ca-cert.pem | 0 .../test/certs/ca-cert2.pem | 0 .../test/certs/ca-clientAuth.pem | 0 .../test/certs/ca-expired.pem | 0 .../test/certs/ca-key-768.pem | 0 .../test/certs/ca-key-ec-explicit.pem | 0 .../test/certs/ca-key-ec-named.pem | 0 .../test/certs/ca-key.pem | 0 .../test/certs/ca-key2.pem | 0 .../test/certs/ca-name2.pem | 0 .../test/certs/ca-nonbc.pem | 0 .../test/certs/ca-nonca.pem | 0 .../test/certs/ca-pol-cert.pem | 0 .../test/certs/ca-pss-cert.pem | 0 .../test/certs/ca-pss-key.pem | 0 .../test/certs/ca-root2.pem | 0 .../test/certs/ca-serverAuth.pem | 0 .../test/certs/cca+anyEKU.pem | 0 .../test/certs/cca+clientAuth.pem | 0 .../test/certs/cca+serverAuth.pem | 0 .../test/certs/cca-anyEKU.pem | 0 .../test/certs/cca-cert.pem | 0 .../test/certs/cca-clientAuth.pem | 0 .../test/certs/cca-serverAuth.pem | 0 .../test/certs/client-ed25519-cert.pem | 0 .../test/certs/client-ed25519-key.pem | 0 .../test/certs/client-ed448-cert.pem | 0 .../test/certs/client-ed448-key.pem | 0 .../test/certs/croot+anyEKU.pem | 0 .../test/certs/croot+clientAuth.pem | 0 .../test/certs/croot+serverAuth.pem | 0 .../test/certs/croot-anyEKU.pem | 0 .../test/certs/croot-cert.pem | 0 .../test/certs/croot-clientAuth.pem | 0 .../test/certs/croot-serverAuth.pem | 0 .../test/certs/cross-key.pem | 0 .../test/certs/cross-root.pem | 0 .../test/certs/cyrillic.msb | 0 .../test/certs/cyrillic.pem | 0 .../test/certs/cyrillic.utf8 | 0 .../test/certs/cyrillic_crl.pem | 0 .../test/certs/cyrillic_crl.utf8 | 0 .../test/certs/dhp2048.pem | 0 .../test/certs/ee+clientAuth.pem | 0 .../test/certs/ee+serverAuth.pem | 0 .../test/certs/ee-cert-768.pem | 0 .../test/certs/ee-cert-768i.pem | 0 .../test/certs/ee-cert-ec-explicit.pem | 0 .../test/certs/ee-cert-ec-named-explicit.pem | 0 .../test/certs/ee-cert-ec-named-named.pem | 0 .../test/certs/ee-cert-md5.pem | 0 .../test/certs/ee-cert-policies-bad.pem | 0 .../test/certs/ee-cert-policies.pem | 0 .../test/certs/ee-cert.pem | 0 .../test/certs/ee-cert2.pem | 0 .../test/certs/ee-client-chain.pem | 0 .../test/certs/ee-client.pem | 0 .../test/certs/ee-clientAuth.pem | 0 .../test/certs/ee-ecdsa-client-chain.pem | 0 .../test/certs/ee-ecdsa-key.pem | 0 .../test/certs/ee-ed25519.pem | 0 .../test/certs/ee-expired.pem | 0 .../test/certs/ee-key-768.pem | 0 .../test/certs/ee-key-ec-explicit.pem | 0 .../test/certs/ee-key-ec-named-explicit.pem | 0 .../test/certs/ee-key-ec-named-named.pem | 0 .../test/certs/ee-key.pem | 0 .../test/certs/ee-name2.pem | 0 .../test/certs/ee-pathlen.pem | 0 .../test/certs/ee-pss-cert.pem | 0 .../test/certs/ee-pss-sha1-cert.pem | 0 .../test/certs/ee-pss-sha256-cert.pem | 0 .../test/certs/ee-self-signed.pem | 0 .../test/certs/ee-serverAuth.pem | 0 .../test/certs/embeddedSCTs1-key.pem | 0 .../test/certs/embeddedSCTs1.pem | 0 .../test/certs/embeddedSCTs1.sct | 0 .../test/certs/embeddedSCTs1_issuer-key.pem | 0 .../test/certs/embeddedSCTs1_issuer.pem | 0 .../test/certs/embeddedSCTs3.pem | 0 .../test/certs/embeddedSCTs3.sct | 0 .../test/certs/embeddedSCTs3_issuer.pem | 0 .../test/certs/goodcn1-cert.pem | 0 .../test/certs/goodcn1-key.pem | 0 .../test/certs/interCA.key | 0 .../test/certs/interCA.pem | 0 .../test/certs/invalid-cert.pem | 0 .../test/certs/leaf.key | 0 .../test/certs/leaf.pem | 0 .../test/certs/many-constraints.pem | 0 .../test/certs/many-names1.pem | 0 .../test/certs/many-names2.pem | 0 .../test/certs/many-names3.pem | 0 .../test/certs/mkcert.sh | 0 .../test/certs/nca+anyEKU.pem | 0 .../test/certs/nca+serverAuth.pem | 0 .../test/certs/ncca-cert.pem | 0 .../test/certs/ncca-key.pem | 0 .../test/certs/ncca1-cert.pem | 0 .../test/certs/ncca1-key.pem | 0 .../test/certs/ncca2-cert.pem | 0 .../test/certs/ncca2-key.pem | 0 .../test/certs/ncca3-cert.pem | 0 .../test/certs/ncca3-key.pem | 0 .../test/certs/nroot+anyEKU.pem | 0 .../test/certs/nroot+serverAuth.pem | 0 .../test/certs/p256-server-cert.pem | 0 .../test/certs/p256-server-key.pem | 0 .../test/certs/p384-root-key.pem | 0 .../test/certs/p384-root.pem | 0 .../test/certs/p384-server-cert.pem | 0 .../test/certs/p384-server-key.pem | 0 .../test/certs/pathlen.pem | 0 .../test/certs/pc1-cert.pem | 0 .../test/certs/pc1-key.pem | 0 .../test/certs/pc2-cert.pem | 0 .../test/certs/pc2-key.pem | 0 .../test/certs/pc5-cert.pem | 0 .../test/certs/pc5-key.pem | 0 .../test/certs/root+anyEKU.pem | 0 .../test/certs/root+clientAuth.pem | 0 .../test/certs/root+serverAuth.pem | 0 .../test/certs/root-anyEKU.pem | 0 .../test/certs/root-cert-768.pem | 0 .../test/certs/root-cert-md5.pem | 0 .../test/certs/root-cert-rsa2.pem | 0 .../test/certs/root-cert.pem | 0 .../test/certs/root-cert2.pem | 0 .../test/certs/root-clientAuth.pem | 0 .../test/certs/root-cross-cert.pem | 0 .../test/certs/root-ed25519.pem | 0 .../test/certs/root-ed448-cert.pem | 0 .../test/certs/root-ed448-key.pem | 0 .../test/certs/root-expired.pem | 0 .../test/certs/root-key-768.pem | 0 .../test/certs/root-key.pem | 0 .../test/certs/root-key2.pem | 0 .../test/certs/root-name2.pem | 0 .../test/certs/root-nonca.pem | 0 .../test/certs/root-noserver.pem | 0 .../test/certs/root-serverAuth.pem | 0 .../test/certs/root2+clientAuth.pem | 0 .../test/certs/root2+serverAuth.pem | 0 .../test/certs/root2-serverAuth.pem | 0 .../test/certs/rootCA.key | 0 .../test/certs/rootCA.pem | 0 .../test/certs/rootcert.pem | 0 .../test/certs/rootkey.pem | 0 .../test/certs/roots.pem | 0 .../test/certs/sca+anyEKU.pem | 0 .../test/certs/sca+clientAuth.pem | 0 .../test/certs/sca+serverAuth.pem | 0 .../test/certs/sca-anyEKU.pem | 0 .../test/certs/sca-cert.pem | 0 .../test/certs/sca-clientAuth.pem | 0 .../test/certs/sca-serverAuth.pem | 0 .../test/certs/server-cecdsa-cert.pem | 0 .../test/certs/server-cecdsa-key.pem | 0 .../test/certs/server-dsa-cert.pem | 0 .../test/certs/server-dsa-key.pem | 0 .../server-ecdsa-brainpoolP256r1-cert.pem | 0 .../server-ecdsa-brainpoolP256r1-key.pem | 0 .../test/certs/server-ecdsa-cert.pem | 0 .../test/certs/server-ecdsa-key.pem | 0 .../test/certs/server-ed25519-cert.pem | 0 .../test/certs/server-ed25519-key.pem | 0 .../test/certs/server-ed448-cert.pem | 0 .../test/certs/server-ed448-key.pem | 0 .../test/certs/server-pss-cert.pem | 0 .../test/certs/server-pss-key.pem | 0 .../test/certs/server-pss-restrict-cert.pem | 0 .../test/certs/server-pss-restrict-key.pem | 0 .../test/certs/server-trusted.pem | 0 .../test/certs/servercert.pem | 0 .../test/certs/serverkey.pem | 0 .../test/certs/setup.sh | 0 .../test/certs/some-names1.pem | 0 .../test/certs/some-names2.pem | 0 .../test/certs/some-names3.pem | 0 .../test/certs/sroot+anyEKU.pem | 0 .../test/certs/sroot+clientAuth.pem | 0 .../test/certs/sroot+serverAuth.pem | 0 .../test/certs/sroot-anyEKU.pem | 0 .../test/certs/sroot-cert.pem | 0 .../test/certs/sroot-clientAuth.pem | 0 .../test/certs/sroot-serverAuth.pem | 0 .../test/certs/subinterCA-ss.pem | 0 .../test/certs/subinterCA.key | 0 .../test/certs/subinterCA.pem | 0 .../test/certs/untrusted.pem | 0 .../test/certs/wrongcert.pem | 0 .../test/certs/wrongkey.pem | 0 .../test/certs/x509-check-key.pem | 0 .../test/certs/x509-check.csr | 0 .../test/chacha_internal_test.c | 0 .../test/cipher_overhead_test.c | 0 .../test/cipherbytes_test.c | 0 .../test/cipherlist_test.c | 0 .../test/ciphername_test.c | 0 .../test/clienthellotest.c | 0 .../test/cmactest.c | 0 .../test/cms-examples.pl | 0 .../test/cmsapitest.c | 0 .../test/conf_include_test.c | 0 .../test/constant_time_test.c | 0 .../test/crltest.c | 0 .../test/ct/log_list.conf | 0 .../test/ct/tls1.sct | 0 .../test/ct_test.c | 0 .../test/ctype_internal_test.c | 0 .../test/curve448_internal_test.c | 0 .../test/d2i-tests/bad-cms.der | 0 .../test/d2i-tests/bad-int-pad0.der | Bin .../test/d2i-tests/bad-int-padminus1.der | 0 .../test/d2i-tests/bad_bio.der | Bin .../test/d2i-tests/bad_cert.der | Bin .../test/d2i-tests/bad_generalname.der | 0 .../test/d2i-tests/high_tag.der | Bin .../test/d2i-tests/int0.der | Bin .../test/d2i-tests/int1.der | 0 .../test/d2i-tests/intminus1.der | 0 .../test/d2i_test.c | 0 .../test/dane-cross.in | 0 .../test/danetest.c | 0 .../test/danetest.in | 0 .../test/danetest.pem | 0 .../test/data.bin | 0 .../test/destest.c | 0 .../test/dhtest.c | 0 .../test/drbg_cavs_data.c | 0 .../test/drbg_cavs_data.h | 0 .../test/drbg_cavs_test.c | 0 .../test/drbgtest.c | 0 .../test/drbgtest.h | 0 .../test/dsa_no_digest_size_test.c | 0 .../test/dsatest.c | 0 .../test/dtls_mtu_test.c | 0 .../test/dtlstest.c | 0 .../test/dtlsv1listentest.c | 0 .../test/ec_internal_test.c | 0 .../test/ecdsatest.c | 0 .../test/ecdsatest.h | 0 .../test/ecstresstest.c | 0 .../test/ectest.c | 0 .../test/enginetest.c | 0 .../test/errtest.c | 0 .../test/evp_extra_test.c | 0 .../test/evp_test.c | 0 .../test/evp_test.h | 0 .../test/exdatatest.c | 0 .../test/exptest.c | 0 .../test/fatalerrtest.c | 0 .../test/generate_buildtest.pl | 0 .../test/generate_ssl_tests.pl | 0 .../test/gmdifftest.c | 0 .../test/gosttest.c | 0 .../test/handshake_helper.c | 0 .../test/handshake_helper.h | 0 .../test/hmactest.c | 0 .../test/ideatest.c | 0 .../test/igetest.c | 0 .../test/lhash_test.c | 0 .../test/md2test.c | 0 .../test/mdc2_internal_test.c | 0 .../test/mdc2test.c | 0 .../test/memleaktest.c | 0 .../test/modes_internal_test.c | 0 .../test/ocsp-tests/D1.ors | 0 .../test/ocsp-tests/D1_Cert_EE.pem | 0 .../test/ocsp-tests/D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/D2.ors | 0 .../test/ocsp-tests/D2_Cert_ICA.pem | 0 .../test/ocsp-tests/D2_Issuer_Root.pem | 0 .../test/ocsp-tests/D3.ors | 0 .../test/ocsp-tests/D3_Cert_EE.pem | 0 .../test/ocsp-tests/D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISDOSC_D1.ors | 0 .../test/ocsp-tests/ISDOSC_D2.ors | 0 .../test/ocsp-tests/ISDOSC_D3.ors | 0 .../test/ocsp-tests/ISIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISOP_D1.ors | 0 .../test/ocsp-tests/ISOP_D2.ors | 0 .../test/ocsp-tests/ISOP_D3.ors | 0 .../test/ocsp-tests/ISOP_ND1.ors | 0 .../test/ocsp-tests/ISOP_ND2.ors | 0 .../test/ocsp-tests/ISOP_ND3.ors | 0 .../test/ocsp-tests/ND1.ors | 0 .../test/ocsp-tests/ND1_Cert_EE.pem | 0 .../test/ocsp-tests/ND1_Cross_Root.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA-Cross.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ND2.ors | 0 .../test/ocsp-tests/ND2_Cert_ICA.pem | 0 .../test/ocsp-tests/ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ND3.ors | 0 .../test/ocsp-tests/ND3_Cert_EE.pem | 0 .../test/ocsp-tests/ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WIKH_D1.ors | 0 .../test/ocsp-tests/WIKH_D2.ors | 0 .../test/ocsp-tests/WIKH_D3.ors | 0 .../test/ocsp-tests/WIKH_ND1.ors | 0 .../test/ocsp-tests/WIKH_ND2.ors | 0 .../test/ocsp-tests/WIKH_ND3.ors | 0 .../test/ocsp-tests/WINH_D1.ors | 0 .../test/ocsp-tests/WINH_D2.ors | 0 .../test/ocsp-tests/WINH_D3.ors | 0 .../test/ocsp-tests/WINH_ND1.ors | 0 .../test/ocsp-tests/WINH_ND2.ors | 0 .../test/ocsp-tests/WINH_ND3.ors | 0 .../test/ocsp-tests/WKDOSC_D1.ors | 0 .../test/ocsp-tests/WKDOSC_D2.ors | 0 .../test/ocsp-tests/WKDOSC_D3.ors | 0 .../test/ocsp-tests/WKIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WRID_D1.ors | 0 .../test/ocsp-tests/WRID_D2.ors | 0 .../test/ocsp-tests/WRID_D3.ors | 0 .../test/ocsp-tests/WRID_ND1.ors | 0 .../test/ocsp-tests/WRID_ND2.ors | 0 .../test/ocsp-tests/WRID_ND3.ors | 0 .../test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem | 0 .../test/ocspapitest.c | 0 .../test/ossl_shim/async_bio.cc | 0 .../test/ossl_shim/async_bio.h | 0 .../test/ossl_shim/build.info | 0 .../test/ossl_shim/include/openssl/base.h | 0 .../test/ossl_shim/ossl_config.json | 0 .../test/ossl_shim/ossl_shim.cc | 0 .../test/ossl_shim/packeted_bio.cc | 0 .../test/ossl_shim/packeted_bio.h | 0 .../test/ossl_shim/test_config.cc | 0 .../test/ossl_shim/test_config.h | 0 .../test/packettest.c | 0 .../test/pbelutest.c | 0 .../test/pemtest.c | 0 .../test/pkcs7-1.pem | 0 .../test/pkcs7.pem | 0 .../test/pkey_meth_kdf_test.c | 0 .../test/pkey_meth_test.c | 0 .../test/pkits-test.pl | 0 .../test/poly1305_internal_test.c | 0 .../test/rc2test.c | 0 .../test/rc4test.c | 0 .../test/rc5test.c | 0 .../test/rdrand_sanitytest.c | 0 .../test/recipes/01-test_abort.t | 0 .../test/recipes/01-test_sanity.t | 0 .../test/recipes/01-test_symbol_presence.t | 0 .../test/recipes/01-test_test.t | 0 .../test/recipes/02-test_errstr.t | 0 .../test/recipes/02-test_internal_ctype.t | 0 .../test/recipes/02-test_lhash.t | 0 .../test/recipes/02-test_ordinals.t | 0 .../test/recipes/02-test_stack.t | 0 .../test/recipes/03-test_exdata.t | 0 .../test/recipes/03-test_internal_asn1.t | 0 .../test/recipes/03-test_internal_chacha.t | 0 .../test/recipes/03-test_internal_curve448.t | 0 .../test/recipes/03-test_internal_ec.t | 0 .../test/recipes/03-test_internal_mdc2.t | 0 .../test/recipes/03-test_internal_modes.t | 0 .../test/recipes/03-test_internal_poly1305.t | 0 .../test/recipes/03-test_internal_siphash.t | 0 .../test/recipes/03-test_internal_sm2.t | 0 .../test/recipes/03-test_internal_sm4.t | 0 .../recipes/03-test_internal_ssl_cert_table.t | 0 .../test/recipes/03-test_internal_x509.t | 0 .../test/recipes/03-test_ui.t | 0 .../test/recipes/04-test_asn1_decode.t | 0 .../test/recipes/04-test_asn1_encode.t | 0 .../test/recipes/04-test_asn1_string_table.t | 0 .../test/recipes/04-test_bio_callback.t | 0 .../test/recipes/04-test_bioprint.t | 0 .../test/recipes/04-test_err.t | 0 .../test/recipes/04-test_pem.t | 0 .../test/recipes/04-test_pem_data/NOTES | 0 .../test/recipes/04-test_pem_data/beermug.pem | 0 .../04-test_pem_data/cert-1023line.pem | 0 .../04-test_pem_data/cert-1024line.pem | 0 .../04-test_pem_data/cert-1025line.pem | 0 .../cert-254-chars-at-the-end.pem | 0 .../cert-254-chars-in-the-middle.pem | 0 .../recipes/04-test_pem_data/cert-255line.pem | 0 .../recipes/04-test_pem_data/cert-256line.pem | 0 .../recipes/04-test_pem_data/cert-257line.pem | 0 .../04-test_pem_data/cert-blankline.pem | 0 .../recipes/04-test_pem_data/cert-comment.pem | 0 .../04-test_pem_data/cert-earlypad.pem | 0 .../04-test_pem_data/cert-extrapad.pem | 0 .../04-test_pem_data/cert-infixwhitespace.pem | 0 .../recipes/04-test_pem_data/cert-junk.pem | 0 .../cert-leadingwhitespace.pem | 0 .../04-test_pem_data/cert-longline.pem | 0 .../04-test_pem_data/cert-misalignedpad.pem | 0 .../04-test_pem_data/cert-onecolumn.pem | 0 .../cert-oneline-multiple-of-254.pem | 0 .../recipes/04-test_pem_data/cert-oneline.pem | 0 .../cert-shortandlongline.pem | 0 .../04-test_pem_data/cert-shortline.pem | 0 .../04-test_pem_data/cert-threecolumn.pem | 0 .../cert-trailingwhitespace.pem | 0 .../test/recipes/04-test_pem_data/cert.pem | 0 .../test/recipes/04-test_pem_data/csr.pem | 0 .../recipes/04-test_pem_data/dsa-1023line.pem | 0 .../recipes/04-test_pem_data/dsa-1024line.pem | 0 .../recipes/04-test_pem_data/dsa-1025line.pem | 0 .../recipes/04-test_pem_data/dsa-255line.pem | 0 .../recipes/04-test_pem_data/dsa-256line.pem | 0 .../recipes/04-test_pem_data/dsa-257line.pem | 0 .../04-test_pem_data/dsa-blankline.pem | 0 .../recipes/04-test_pem_data/dsa-comment.pem | 0 .../04-test_pem_data/dsa-corruptedheader.pem | 0 .../04-test_pem_data/dsa-corruptiv.pem | 0 .../recipes/04-test_pem_data/dsa-earlypad.pem | 0 .../recipes/04-test_pem_data/dsa-extrapad.pem | 0 .../04-test_pem_data/dsa-infixwhitespace.pem | 0 .../recipes/04-test_pem_data/dsa-junk.pem | 0 .../dsa-leadingwhitespace.pem | 0 .../recipes/04-test_pem_data/dsa-longline.pem | 0 .../04-test_pem_data/dsa-misalignedpad.pem | 0 .../04-test_pem_data/dsa-onecolumn.pem | 0 .../recipes/04-test_pem_data/dsa-oneline.pem | 0 .../04-test_pem_data/dsa-onelineheader.pem | 0 .../04-test_pem_data/dsa-shortandlongline.pem | 0 .../04-test_pem_data/dsa-shortline.pem | 0 .../04-test_pem_data/dsa-threecolumn.pem | 0 .../dsa-trailingwhitespace.pem | 0 .../test/recipes/04-test_pem_data/dsa.pem | 0 .../recipes/04-test_pem_data/dsaparam.pem | 0 .../test/recipes/04-test_pem_data/key.pem | 0 .../test/recipes/04-test_pem_data/wellknown | 0 .../test/recipes/05-test_bf.t | 0 .../test/recipes/05-test_cast.t | 0 .../test/recipes/05-test_cmac.t | 0 .../test/recipes/05-test_des.t | 0 .../test/recipes/05-test_hmac.t | 0 .../test/recipes/05-test_idea.t | 0 .../test/recipes/05-test_md2.t | 0 .../test/recipes/05-test_mdc2.t | 0 .../test/recipes/05-test_rand.t | 0 .../test/recipes/05-test_rc2.t | 0 .../test/recipes/05-test_rc4.t | 0 .../test/recipes/05-test_rc5.t | 0 .../test/recipes/06-test-rdrand.t | 0 .../test/recipes/10-test_bn.t | 0 .../test/recipes/10-test_bn_data/bnexp.txt | 0 .../test/recipes/10-test_bn_data/bngcd.txt | 0 .../test/recipes/10-test_bn_data/bnmod.txt | 0 .../test/recipes/10-test_bn_data/bnmul.txt | 0 .../test/recipes/10-test_bn_data/bnshift.txt | 0 .../test/recipes/10-test_bn_data/bnsum.txt | 0 .../test/recipes/10-test_exp.t | 0 .../test/recipes/15-test_dh.t | 0 .../test/recipes/15-test_dsa.t | 0 .../test/recipes/15-test_ec.t | 0 .../test/recipes/15-test_ecdsa.t | 0 .../test/recipes/15-test_ecparam.t | 0 .../invalid/c2pnb208w1-reducible.pem | 0 .../invalid/nistp256-nonprime.pem | 0 .../invalid/nistp256-offcurve.pem | 0 .../invalid/nistp256-wrongorder.pem | 0 .../valid/c2pnb163v1-explicit.pem | 0 .../valid/c2pnb163v1-named.pem | 0 .../valid/c2pnb163v2-explicit.pem | 0 .../valid/c2pnb163v2-named.pem | 0 .../valid/c2pnb163v3-explicit.pem | 0 .../valid/c2pnb163v3-named.pem | 0 .../valid/c2pnb176v1-explicit.pem | 0 .../valid/c2pnb176v1-named.pem | 0 .../valid/c2pnb208w1-explicit.pem | 0 .../valid/c2pnb208w1-named.pem | 0 .../valid/c2pnb272w1-explicit.pem | 0 .../valid/c2pnb272w1-named.pem | 0 .../valid/c2pnb304w1-explicit.pem | 0 .../valid/c2pnb304w1-named.pem | 0 .../valid/c2pnb368w1-explicit.pem | 0 .../valid/c2pnb368w1-named.pem | 0 .../valid/c2tnb191v1-explicit.pem | 0 .../valid/c2tnb191v1-named.pem | 0 .../valid/c2tnb191v2-explicit.pem | 0 .../valid/c2tnb191v2-named.pem | 0 .../valid/c2tnb191v3-explicit.pem | 0 .../valid/c2tnb191v3-named.pem | 0 .../valid/c2tnb239v1-explicit.pem | 0 .../valid/c2tnb239v1-named.pem | 0 .../valid/c2tnb239v2-explicit.pem | 0 .../valid/c2tnb239v2-named.pem | 0 .../valid/c2tnb239v3-explicit.pem | 0 .../valid/c2tnb239v3-named.pem | 0 .../valid/c2tnb359v1-explicit.pem | 0 .../valid/c2tnb359v1-named.pem | 0 .../valid/c2tnb431r1-explicit.pem | 0 .../valid/c2tnb431r1-named.pem | 0 .../valid/prime192v1-explicit.pem | 0 .../valid/prime192v1-named.pem | 0 .../valid/prime192v2-explicit.pem | 0 .../valid/prime192v2-named.pem | 0 .../valid/prime192v3-explicit.pem | 0 .../valid/prime192v3-named.pem | 0 .../valid/prime239v1-explicit.pem | 0 .../valid/prime239v1-named.pem | 0 .../valid/prime239v2-explicit.pem | 0 .../valid/prime239v2-named.pem | 0 .../valid/prime239v3-explicit.pem | 0 .../valid/prime239v3-named.pem | 0 .../valid/prime256v1-explicit.pem | 0 .../valid/prime256v1-named.pem | 0 .../valid/secp112r1-explicit.pem | 0 .../valid/secp112r1-named.pem | 0 .../valid/secp112r2-explicit.pem | 0 .../valid/secp112r2-named.pem | 0 .../valid/secp128r1-explicit.pem | 0 .../valid/secp128r1-named.pem | 0 .../valid/secp128r2-explicit.pem | 0 .../valid/secp128r2-named.pem | 0 .../valid/secp160k1-explicit.pem | 0 .../valid/secp160k1-named.pem | 0 .../valid/secp160r1-explicit.pem | 0 .../valid/secp160r1-named.pem | 0 .../valid/secp160r2-explicit.pem | 0 .../valid/secp160r2-named.pem | 0 .../valid/secp192k1-explicit.pem | 0 .../valid/secp192k1-named.pem | 0 .../valid/secp224k1-explicit.pem | 0 .../valid/secp224k1-named.pem | 0 .../valid/secp224r1-explicit.pem | 0 .../valid/secp224r1-named.pem | 0 .../valid/secp256k1-explicit.pem | 0 .../valid/secp256k1-named.pem | 0 .../valid/secp384r1-explicit.pem | 0 .../valid/secp384r1-named.pem | 0 .../valid/secp521r1-explicit.pem | 0 .../valid/secp521r1-named.pem | 0 .../valid/sect113r1-explicit.pem | 0 .../valid/sect113r1-named.pem | 0 .../valid/sect113r2-explicit.pem | 0 .../valid/sect113r2-named.pem | 0 .../valid/sect131r1-explicit.pem | 0 .../valid/sect131r1-named.pem | 0 .../valid/sect131r2-explicit.pem | 0 .../valid/sect131r2-named.pem | 0 .../valid/sect163k1-explicit.pem | 0 .../valid/sect163k1-named.pem | 0 .../valid/sect163r1-explicit.pem | 0 .../valid/sect163r1-named.pem | 0 .../valid/sect163r2-explicit.pem | 0 .../valid/sect163r2-named.pem | 0 .../valid/sect193r1-explicit.pem | 0 .../valid/sect193r1-named.pem | 0 .../valid/sect193r2-explicit.pem | 0 .../valid/sect193r2-named.pem | 0 .../valid/sect233k1-explicit.pem | 0 .../valid/sect233k1-named.pem | 0 .../valid/sect233r1-explicit.pem | 0 .../valid/sect233r1-named.pem | 0 .../valid/sect239k1-explicit.pem | 0 .../valid/sect239k1-named.pem | 0 .../valid/sect283k1-explicit.pem | 0 .../valid/sect283k1-named.pem | 0 .../valid/sect283r1-explicit.pem | 0 .../valid/sect283r1-named.pem | 0 .../valid/sect409k1-explicit.pem | 0 .../valid/sect409k1-named.pem | 0 .../valid/sect409r1-explicit.pem | 0 .../valid/sect409r1-named.pem | 0 .../valid/sect571k1-explicit.pem | 0 .../valid/sect571k1-named.pem | 0 .../valid/sect571r1-explicit.pem | 0 .../valid/sect571r1-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls1-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls1-named.pem | 0 .../wap-wsg-idm-ecid-wtls10-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls10-named.pem | 0 .../wap-wsg-idm-ecid-wtls11-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls11-named.pem | 0 .../wap-wsg-idm-ecid-wtls12-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls12-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls3-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls3-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls4-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls4-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls5-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls5-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls6-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls6-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls7-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls7-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls8-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls8-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls9-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls9-named.pem | 0 .../test/recipes/15-test_genec.t | 0 .../test/recipes/15-test_genrsa.t | 0 .../test/recipes/15-test_mp_rsa.t | 0 .../recipes/15-test_mp_rsa_data/plain_text | 0 .../test/recipes/15-test_out_option.t | 0 .../test/recipes/15-test_rsa.t | 0 .../test/recipes/15-test_rsapss.t | 0 .../test/recipes/20-test_dgst.t | 0 .../test/recipes/20-test_enc.t | 0 .../test/recipes/20-test_enc_more.t | 0 .../test/recipes/20-test_passwd.t | 0 .../test/recipes/25-test_crl.t | 0 .../test/recipes/25-test_d2i.t | 0 .../test/recipes/25-test_pkcs7.t | 0 .../test/recipes/25-test_req.t | 0 .../test/recipes/25-test_sid.t | 0 .../test/recipes/25-test_verify.t | 0 .../test/recipes/25-test_x509.t | 0 .../test/recipes/30-test_afalg.t | 0 .../test/recipes/30-test_engine.t | 0 .../test/recipes/30-test_evp.t | 0 .../test/recipes/30-test_evp_data/evpcase.txt | 0 .../recipes/30-test_evp_data/evpccmcavs.txt | 0 .../test/recipes/30-test_evp_data/evpciph.txt | 0 .../recipes/30-test_evp_data/evpdigest.txt | 0 .../recipes/30-test_evp_data/evpencod.txt | 0 .../test/recipes/30-test_evp_data/evpkdf.txt | 0 .../test/recipes/30-test_evp_data/evpmac.txt | 0 .../test/recipes/30-test_evp_data/evppbe.txt | 0 .../test/recipes/30-test_evp_data/evppkey.txt | 0 .../recipes/30-test_evp_data/evppkey_ecc.txt | 0 .../test/recipes/30-test_evp_extra.t | 0 .../test/recipes/30-test_pbelu.t | 0 .../test/recipes/30-test_pkey_meth.t | 0 .../test/recipes/30-test_pkey_meth_kdf.t | 0 .../test/recipes/40-test_rehash.t | 0 .../recipes/60-test_x509_check_cert_pkey.t | 0 .../test/recipes/60-test_x509_dup_cert.t | 0 .../test/recipes/60-test_x509_store.t | 0 .../test/recipes/60-test_x509_time.t | 0 .../test/recipes/70-test_asyncio.t | 0 .../test/recipes/70-test_bad_dtls.t | 0 .../test/recipes/70-test_clienthello.t | 0 .../test/recipes/70-test_comp.t | 0 .../test/recipes/70-test_key_share.t | 0 .../test/recipes/70-test_packet.t | 0 .../test/recipes/70-test_recordlen.t | 0 .../test/recipes/70-test_renegotiation.t | 0 .../test/recipes/70-test_servername.t | 0 .../test/recipes/70-test_sslcbcpadding.t | 0 .../test/recipes/70-test_sslcertstatus.t | 0 .../test/recipes/70-test_sslextension.t | 0 .../test/recipes/70-test_sslmessages.t | 0 .../test/recipes/70-test_sslrecords.t | 0 .../test/recipes/70-test_sslsessiontick.t | 0 .../test/recipes/70-test_sslsigalgs.t | 0 .../test/recipes/70-test_sslsignature.t | 0 .../test/recipes/70-test_sslskewith0p.t | 0 .../test/recipes/70-test_sslversions.t | 0 .../test/recipes/70-test_sslvertol.t | 0 .../test/recipes/70-test_tls13alerts.t | 0 .../test/recipes/70-test_tls13cookie.t | 0 .../test/recipes/70-test_tls13downgrade.t | 0 .../test/recipes/70-test_tls13hrr.t | 0 .../test/recipes/70-test_tls13kexmodes.t | 0 .../test/recipes/70-test_tls13messages.t | 0 .../test/recipes/70-test_tls13psk.t | 0 .../test/recipes/70-test_tlsextms.t | 0 .../test/recipes/70-test_verify_extra.t | 0 .../test/recipes/70-test_wpacket.t | 0 .../test/recipes/80-test_ca.t | 0 .../test/recipes/80-test_cipherbytes.t | 0 .../test/recipes/80-test_cipherlist.t | 0 .../test/recipes/80-test_ciphername.t | 0 .../test/recipes/80-test_cms.t | 0 .../80-test_cms_data/bad_signtime_attr.cms | Bin .../80-test_cms_data/ct_multiple_attr.cms | Bin .../recipes/80-test_cms_data/no_ct_attr.cms | Bin .../recipes/80-test_cms_data/no_md_attr.cms | Bin .../test/recipes/80-test_cmsapi.t | 0 .../test/recipes/80-test_ct.t | 0 .../test/recipes/80-test_dane.t | 0 .../test/recipes/80-test_dtls.t | 0 .../test/recipes/80-test_dtls_mtu.t | 0 .../test/recipes/80-test_dtlsv1listen.t | 0 .../test/recipes/80-test_ocsp.t | 0 .../test/recipes/80-test_ocsp_data/cert.pem | 0 .../test/recipes/80-test_ocsp_data/key.pem | 0 .../test/recipes/80-test_pkcs12.t | 0 .../test/recipes/80-test_policy_tree.t | 0 .../80-test_policy_tree_data/large_leaf.pem | 0 .../large_policy_tree.pem | 0 .../80-test_policy_tree_data/small_leaf.pem | 0 .../small_policy_tree.pem | 0 .../test/recipes/80-test_ssl_new.t | 0 .../test/recipes/80-test_ssl_old.t | 0 .../test/recipes/80-test_ssl_test_ctx.t | 0 .../test/recipes/80-test_sslcorrupt.t | 0 .../test/recipes/80-test_tsa.t | 0 .../test/recipes/80-test_x509aux.t | 0 .../test/recipes/90-test_asn1_time.t | 0 .../test/recipes/90-test_async.t | 0 .../test/recipes/90-test_bio_enc.t | 0 .../test/recipes/90-test_bio_memleak.t | 0 .../test/recipes/90-test_constant_time.t | 0 .../test/recipes/90-test_fatalerr.t | 0 .../test/recipes/90-test_gmdiff.t | 0 .../test/recipes/90-test_gost.t | 0 .../test/recipes/90-test_gost_data/gost.conf | 0 .../90-test_gost_data/server-cert2001.pem | 0 .../90-test_gost_data/server-cert2012.pem | 0 .../90-test_gost_data/server-key2001.pem | 0 .../90-test_gost_data/server-key2012.pem | 0 .../test/recipes/90-test_ige.t | 0 .../test/recipes/90-test_includes.t | 0 .../conf-includes/includes1.cnf | 0 .../conf-includes/includes2.cnf | 0 .../90-test_includes_data/includes-broken.cnf | 0 .../90-test_includes_data/includes-eq-ws.cnf | 0 .../90-test_includes_data/includes-eq.cnf | 0 .../90-test_includes_data/includes-file.cnf | 0 .../90-test_includes_data/includes.cnf | 0 .../vms-includes-file.cnf | 0 .../90-test_includes_data/vms-includes.cnf | 0 .../test/recipes/90-test_memleak.t | 0 .../test/recipes/90-test_overhead.t | 0 .../test/recipes/90-test_secmem.t | 0 .../test/recipes/90-test_shlibload.t | 0 .../test/recipes/90-test_srp.t | 0 .../test/recipes/90-test_sslapi.t | 0 .../recipes/90-test_sslapi_data/passwd.txt | 0 .../test/recipes/90-test_sslbuffers.t | 0 .../test/recipes/90-test_store.t | 0 .../test/recipes/90-test_store_data/ca.cnf | 0 .../test/recipes/90-test_store_data/user.cnf | 0 .../test/recipes/90-test_sysdefault.t | 0 .../test/recipes/90-test_threads.t | 0 .../test/recipes/90-test_time_offset.t | 0 .../test/recipes/90-test_tls13ccs.t | 0 .../test/recipes/90-test_tls13encryption.t | 0 .../test/recipes/90-test_tls13secrets.t | 0 .../test/recipes/90-test_v3name.t | 0 .../test/recipes/95-test_external_boringssl.t | 0 .../test/recipes/95-test_external_krb5.t | 0 .../95-test_external_krb5_data/krb5.sh | 0 .../test/recipes/95-test_external_pyca.t | 0 .../cryptography.sh | 0 .../test/recipes/99-test_ecstress.t | 0 .../test/recipes/99-test_fuzz.t | 0 .../test/recipes/ocsp-response.der | Bin .../test/recipes/tconversion.pl | 0 .../test/recordlentest.c | 0 .../test/rsa_complex.c | 0 .../test/rsa_mp_test.c | 0 .../test/rsa_test.c | 0 .../test/run_tests.pl | 0 .../test/sanitytest.c | 0 .../test/secmemtest.c | 0 .../test/serverinfo.pem | 0 .../test/serverinfo2.pem | 0 .../test/servername_test.c | 0 .../test/session.pem | 0 .../test/shibboleth.pfx | Bin .../test/shlibloadtest.c | 0 .../test/siphash_internal_test.c | 0 .../test/sm2_internal_test.c | 0 .../test/sm4_internal_test.c | 0 .../test/smcont.txt | 0 .../test/smime-certs/badrsa.pem | 0 .../test/smime-certs/ca.cnf | 0 .../test/smime-certs/mksmime-certs.sh | 0 .../test/smime-certs/smdh.pem | 0 .../test/smime-certs/smdsa1.pem | 0 .../test/smime-certs/smdsa2.pem | 0 .../test/smime-certs/smdsa3.pem | 0 .../test/smime-certs/smdsap.pem | 0 .../test/smime-certs/smec1.pem | 0 .../test/smime-certs/smec2.pem | 0 .../test/smime-certs/smec3.pem | 0 .../test/smime-certs/smroot.pem | 0 .../test/smime-certs/smrsa1.pem | 0 .../test/smime-certs/smrsa2.pem | 0 .../test/smime-certs/smrsa3.pem | 0 .../test/srptest.c | 0 .../test/ssl-tests/01-simple.conf | 0 .../test/ssl-tests/01-simple.conf.in | 0 .../test/ssl-tests/02-protocol-version.conf | 0 .../ssl-tests/02-protocol-version.conf.in | 0 .../test/ssl-tests/03-custom_verify.conf | 0 .../test/ssl-tests/03-custom_verify.conf.in | 0 .../test/ssl-tests/04-client_auth.conf | 0 .../test/ssl-tests/04-client_auth.conf.in | 0 .../test/ssl-tests/05-sni.conf | 0 .../test/ssl-tests/05-sni.conf.in | 0 .../test/ssl-tests/06-sni-ticket.conf | 0 .../test/ssl-tests/06-sni-ticket.conf.in | 0 .../ssl-tests/07-dtls-protocol-version.conf | 0 .../07-dtls-protocol-version.conf.in | 0 .../test/ssl-tests/08-npn.conf | 0 .../test/ssl-tests/08-npn.conf.in | 0 .../test/ssl-tests/09-alpn.conf | 0 .../test/ssl-tests/09-alpn.conf.in | 0 .../test/ssl-tests/10-resumption.conf | 0 .../test/ssl-tests/10-resumption.conf.in | 0 .../test/ssl-tests/11-dtls_resumption.conf | 0 .../test/ssl-tests/11-dtls_resumption.conf.in | 0 .../test/ssl-tests/12-ct.conf | 0 .../test/ssl-tests/12-ct.conf.in | 0 .../test/ssl-tests/13-fragmentation.conf | 0 .../test/ssl-tests/13-fragmentation.conf.in | 0 .../test/ssl-tests/14-curves.conf | 0 .../test/ssl-tests/14-curves.conf.in | 0 .../test/ssl-tests/15-certstatus.conf | 0 .../test/ssl-tests/15-certstatus.conf.in | 0 .../test/ssl-tests/16-dtls-certstatus.conf | 0 .../test/ssl-tests/16-dtls-certstatus.conf.in | 0 .../test/ssl-tests/17-renegotiate.conf | 0 .../test/ssl-tests/17-renegotiate.conf.in | 0 .../test/ssl-tests/18-dtls-renegotiate.conf | 0 .../ssl-tests/18-dtls-renegotiate.conf.in | 0 .../test/ssl-tests/19-mac-then-encrypt.conf | 0 .../ssl-tests/19-mac-then-encrypt.conf.in | 0 .../test/ssl-tests/20-cert-select.conf | 0 .../test/ssl-tests/20-cert-select.conf.in | 0 .../test/ssl-tests/21-key-update.conf | 0 .../test/ssl-tests/21-key-update.conf.in | 0 .../test/ssl-tests/22-compression.conf | 0 .../test/ssl-tests/22-compression.conf.in | 0 .../test/ssl-tests/23-srp.conf | 0 .../test/ssl-tests/23-srp.conf.in | 0 .../test/ssl-tests/24-padding.conf | 0 .../test/ssl-tests/24-padding.conf.in | 0 .../test/ssl-tests/25-cipher.conf | 0 .../test/ssl-tests/25-cipher.conf.in | 0 .../test/ssl-tests/26-tls13_client_auth.conf | 0 .../ssl-tests/26-tls13_client_auth.conf.in | 0 .../test/ssl-tests/27-ticket-appdata.conf | 0 .../test/ssl-tests/27-ticket-appdata.conf.in | 0 .../test/ssl-tests/28-seclevel.conf | 0 .../test/ssl-tests/28-seclevel.conf.in | 0 .../ssl-tests/29-dtls-sctp-label-bug.conf | 0 .../ssl-tests/29-dtls-sctp-label-bug.conf.in | 0 .../test/ssl-tests/30-supported-groups.conf | 0 .../ssl-tests/30-supported-groups.conf.in | 0 .../test/ssl-tests/protocol_version.pm | 0 .../test/ssl-tests/ssltests_base.pm | 0 .../test/ssl_cert_table_internal_test.c | 0 .../test/ssl_ctx_test.c | 0 .../test/ssl_test.c | 0 .../test/ssl_test.tmpl | 0 .../test/ssl_test_ctx.c | 0 .../test/ssl_test_ctx.h | 0 .../test/ssl_test_ctx_test.c | 0 .../test/ssl_test_ctx_test.conf | 0 .../test/sslapitest.c | 0 .../test/sslbuffertest.c | 0 .../test/sslcorrupttest.c | 0 .../test/ssltest_old.c | 0 .../test/ssltestlib.c | 0 .../test/ssltestlib.h | 0 .../test/stack_test.c | 0 .../test/sysdefault.cnf | 0 .../test/sysdefaulttest.c | 0 .../test/test.cnf | 0 .../test/test_test.c | 0 .../test/testcrl.pem | 0 .../test/testdsa.pem | 0 .../test/testdsapub.pem | 0 .../test/testec-p256.pem | 0 .../test/testecpub-p256.pem | 0 .../test/tested25519.pem | 0 .../test/tested25519pub.pem | 0 .../test/tested448.pem | 0 .../test/tested448pub.pem | 0 .../test/testp7.pem | 0 .../test/testreq2.pem | 0 .../test/testrsa.pem | 0 .../test/testrsa_withattrs.der | Bin .../test/testrsa_withattrs.pem | 0 .../test/testrsapub.pem | 0 .../test/testsid.pem | 0 .../test/testutil.h | 0 .../test/testutil/basic_output.c | 0 .../test/testutil/cb.c | 0 .../test/testutil/driver.c | 0 .../test/testutil/format_output.c | 0 .../test/testutil/main.c | 0 .../test/testutil/output.h | 0 .../test/testutil/output_helpers.c | 0 .../test/testutil/random.c | 0 .../test/testutil/stanza.c | 0 .../test/testutil/tap_bio.c | 0 .../test/testutil/test_cleanup.c | 0 .../test/testutil/tests.c | 0 .../test/testutil/testutil_init.c | 0 .../test/testutil/tu_local.h | 0 .../test/testx509.pem | 0 .../test/threadstest.c | 0 .../test/time_offset_test.c | 0 .../test/tls13ccstest.c | 0 .../test/tls13encryptiontest.c | 0 .../test/tls13secretstest.c | 0 .../test/uitest.c | 0 .../test/v3-cert1.pem | 0 .../test/v3-cert2.pem | 0 .../test/v3ext.c | 0 .../test/v3nametest.c | 0 .../test/verify_extra_test.c | 0 .../test/versions.c | 0 .../test/wpackettest.c | 0 .../test/x509_check_cert_pkey_test.c | 0 .../test/x509_dup_cert_test.c | 0 .../test/x509_internal_test.c | 0 .../test/x509_time_test.c | 0 .../test/x509aux.c | 0 .../tools/build.info | 0 .../tools/c_rehash.in | 0 .../util/add-depends.pl | 0 .../util/build.info | 0 .../util/cavs-to-evptest.pl | 0 .../util/check-malloc-errs | 0 .../util/ck_errf.pl | 0 .../util/copy.pl | 0 .../util/dofile.pl | 0 .../util/echo.pl | 0 .../util/find-doc-nits | 0 .../util/find-unused-errs | 0 .../util/fix-includes | 0 .../util/fix-includes.sed | 0 .../util/indent.pro | 0 .../util/libcrypto.num | 0 .../util/libssl.num | 0 .../util/local_shlib.com.in | 0 .../util/mkbuildinf.pl | 0 .../util/mkdef.pl | 0 .../util/mkdir-p.pl | 0 .../util/mkerr.pl | 0 .../util/mkrc.pl | 0 .../util/openssl-format-source | 0 .../util/openssl-update-copyright | 0 .../util/opensslwrap.sh | 0 .../util/perl/OpenSSL/Glob.pm | 0 .../util/perl/OpenSSL/Test.pm | 0 .../util/perl/OpenSSL/Test/Simple.pm | 0 .../util/perl/OpenSSL/Test/Utils.pm | 0 .../util/perl/OpenSSL/Util/Pod.pm | 0 .../util/perl/OpenSSL/copyright.pm | 0 .../util/perl/TLSProxy/Alert.pm | 0 .../util/perl/TLSProxy/Certificate.pm | 0 .../util/perl/TLSProxy/CertificateRequest.pm | 0 .../util/perl/TLSProxy/CertificateVerify.pm | 0 .../util/perl/TLSProxy/ClientHello.pm | 0 .../util/perl/TLSProxy/EncryptedExtensions.pm | 0 .../util/perl/TLSProxy/Message.pm | 0 .../util/perl/TLSProxy/NewSessionTicket.pm | 0 .../util/perl/TLSProxy/Proxy.pm | 0 .../util/perl/TLSProxy/Record.pm | 0 .../util/perl/TLSProxy/ServerHello.pm | 0 .../util/perl/TLSProxy/ServerKeyExchange.pm | 0 .../util/perl/checkhandshake.pm | 0 .../util/perl/with_fallback.pm | 0 .../util/private.num | 0 .../util/process_docs.pl | 0 .../util/shlib_wrap.sh.in | 0 .../util/su-filter.pl | 0 .../util/unlocal_shlib.com.in | 0 3106 files changed, 89 insertions(+), 10 deletions(-) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ACKNOWLEDGEMENTS (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/AUTHORS (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/CHANGES (99%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/CONTRIBUTING (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/00-base-templates.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/10-main.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/15-android.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/15-ios.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/50-djgpp.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/50-haiku.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/50-masm.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/50-win-onecore.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/INTERNALS.Configure (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/README.design (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/common.tmpl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/common0.tmpl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/descrip.mms.tmpl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/shared-info.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/unix-Makefile.tmpl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/unix-checker.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/windows-checker.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configurations/windows-makefile.tmpl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/Configure (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/FAQ (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/INSTALL (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/LICENSE (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NEWS (99%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NOTES.ANDROID (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NOTES.DJGPP (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NOTES.PERL (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NOTES.UNIX (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NOTES.VMS (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/NOTES.WIN (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/README (98%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/README.ENGINE (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/README.FIPS (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/VMSify-conf.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/engine.opt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/msg_install.com (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/msg_staging.com (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/openssl_ivp.com.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/openssl_shutdown.com.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/openssl_startup.com.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/openssl_utils.com.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/test-includes.com (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/VMS/translatesyms.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/CA.pl.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/app_rand.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/apps.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/apps.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/asn1pars.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/bf_prefix.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ca-cert.srl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ca-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ca-req.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ca.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ciphers.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/client.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/cms.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/crl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/crl2p7.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ct_log_list.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/demoSRP/srp_verifier.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/demoSRP/srp_verifier.txt.attr (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dh1024.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dh2048.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dh4096.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dhparam.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsa-ca.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsa-pca.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsa1024.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsa512.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsap.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/dsaparam.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ecparam.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/engine.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/errstr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/gendsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/genpkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/genrsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/nseq.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ocsp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/openssl-vms.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/openssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/openssl.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/opt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/passwd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pca-cert.srl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pca-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pca-req.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pkcs12.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pkcs7.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pkcs8.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pkeyparam.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/pkeyutl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/prime.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/privkey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/progs.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/rand.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/rehash.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/req.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/req.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/rsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/rsa8192.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/rsautl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s1024key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s1024req.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s512-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s512-req.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s_apps.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s_cb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s_client.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s_server.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s_socket.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/s_time.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/server.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/server.srl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/server2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/sess_id.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/smime.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/speed.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/spkac.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/srp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/storeutl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/testCA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/testdsa.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/testrsa.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/timeouts.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/ts.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/tsget.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/verify.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/version.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/vms_decc_argv.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/vms_decc_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/vms_term_sock.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/vms_term_sock.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/win32_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/apps/x509.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/config (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/config.com (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/LPdir_nyi.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/LPdir_unix.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/LPdir_vms.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/LPdir_win.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/LPdir_win32.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/LPdir_wince.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_cbc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_cfb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_core.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_ige.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_misc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_ofb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_wrap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/aes_x86core.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-ia64.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-mips.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aes-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesfx-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesni-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesni-sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesni-sha256-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesni-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesni-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesp8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/aesv8-armx.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/bsaes-armv7.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/vpaes-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/vpaes-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/vpaes-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/asm/vpaes-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aes/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/alphacpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aria/aria.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/aria/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/arm64cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/arm_arch.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/armcap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/armv4cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_bitstr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_d2i_fp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_digest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_dup.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_gentm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_i2d_fp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_int.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_mbstr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_object.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_octet.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_print.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_strex.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_strnid.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_time.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_type.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_utctm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_utf8.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/a_verify.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/ameth_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_gen.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_item_list.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_item_list.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn1_par.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn_mime.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn_moid.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn_mstbl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/asn_pack.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/bio_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/bio_ndef.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/charmap.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/charmap.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/d2i_pr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/d2i_pu.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/evp_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/f_int.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/f_string.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/i2d_pr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/i2d_pu.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/n_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/nsseq.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/p5_pbe.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/p5_pbev2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/p5_scrypt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/p8_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/standard_methods.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/t_bitst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/t_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/t_spki.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_dec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_fre.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_new.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_scn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_typ.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tasn_utl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/tbl_standard.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_algor.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_bignum.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_info.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_int64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_long.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_sig.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_spki.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/asn1/x_val.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/arch/async_null.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/arch/async_null.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/arch/async_posix.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/arch/async_posix.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/arch/async_win.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/arch/async_win.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/async.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/async_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/async_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/async_wait.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/async/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/asm/bf-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_cfb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_ofb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_pi.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/bf_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bf/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/b_addr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/b_dump.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/b_print.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/b_sock.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/b_sock2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bf_buff.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bf_lbuf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bf_nbio.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bf_null.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bio_cb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bio_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bio_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bio_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bio_meth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_acpt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_bio.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_conn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_dgram.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_fd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_file.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_log.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_mem.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_null.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/bss_sock.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bio/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/blake2_impl.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/blake2_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/blake2b.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/blake2s.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/m_blake2b.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/blake2/m_blake2s.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/README.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/alpha-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/armv4-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/armv4-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/armv8-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/bn-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/bn-c64xplus.asm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/c64xplus-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/co-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/ia64-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/ia64.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/mips-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/mips.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/parisc-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/ppc-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/ppc64-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/rsaz-avx2.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/rsaz-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/s390x-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/s390x-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/s390x.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/sparct4-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/sparcv8.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/sparcv8plus.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/sparcv9-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/sparcv9-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/sparcv9a-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/via-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/vis3-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/x86-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/x86-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/x86_64-gcc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/x86_64-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/x86_64-mont.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/asm/x86_64-mont5.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_add.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_asm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_blind.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_const.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_ctx.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_depr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_dh.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_div.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_exp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_exp2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_gcd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_gf2m.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_intern.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_kron.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_mod.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_mont.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_mpi.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_mul.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_nist.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_prime.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_prime.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_prime.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_print.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_rand.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_recp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_shift.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_sqr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_sqrt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_srp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_word.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/bn_x931p.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/rsaz_exp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/bn/rsaz_exp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/buffer/buf_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/buffer/buffer.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/buffer/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/c64xpluscpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/asm/cmll-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/asm/cmll-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/asm/cmllt4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/camellia.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_cbc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_cfb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_ctr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_misc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/camellia/cmll_ofb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/asm/cast-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/c_cfb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/c_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/c_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/c_ofb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/c_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/cast_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cast/cast_s.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/asm/chacha-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/chacha/chacha_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cmac/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cmac/cm_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cmac/cm_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cmac/cmac.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_att.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_cd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_dd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_env.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_ess.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_io.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_kari.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_pwri.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_sd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cms/cms_smime.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/comp/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/comp/c_zlib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/comp/comp_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/comp/comp_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/comp/comp_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_api.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_def.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_def.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_mall.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_mod.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_sap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/conf_ssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/conf/keysets.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cpt_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cryptlib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_b64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_log.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_oct.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_policy.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_sct.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_sct_ctx.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_vfy.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ct/ct_x509v3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ctype.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/cversion.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/asm/crypt586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/asm/des-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/asm/des_enc.m4 (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/asm/desboth.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/asm/dest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/cbc_cksm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/cbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/cfb64ede.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/cfb64enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/cfb_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/des_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/des_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/ecb3_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/ecb_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/fcrypt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/fcrypt_b.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/ncbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/ofb64ede.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/ofb64enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/ofb_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/pcbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/qud_cksm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/rand_key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/set_key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/spr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/str2key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/des/xcbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh1024.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh192.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh2048.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh4096.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh512.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_check.c (93%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_depr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_err.c (98%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_gen.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_kdf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_key.c (95%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_meth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_rfc5114.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dh/dh_rfc7919.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dllmain.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_depr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_gen.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_meth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dsa/dsa_vrf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_dl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_dlfcn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_openssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_vms.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/dso/dso_win32.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ebcdic.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/ecp_nistz256-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/ecp_nistz256-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/ecp_nistz256-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/ecp_nistz256-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/ecp_nistz256-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/ecp_nistz256-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/x25519-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/asm/x25519-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve25519.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/arch_32/arch_intrinsics.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/arch_32/f_impl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/arch_32/f_impl.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/curve448.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/curve448_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/curve448_tables.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/curve448utils.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/ed448.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/eddsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/f_generic.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/field.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/point_448.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/scalar.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/curve448/word.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec2_oct.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec2_smpl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_check.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_curve.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_cvt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_kmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_mult.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_oct.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ec_print.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecdh_kdf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecdh_ossl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecdsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecdsa_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecdsa_vrf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/eck_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_mont.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nist.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nistp224.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nistp256.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nistp521.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nistputil.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nistz256.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_nistz256_table.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_oct.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecp_smpl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ec/ecx_meth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_all.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_cnf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_ctrl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_devcrypto.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_dyn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_fat.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_list.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_openssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_rdrand.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/eng_table.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_asnmth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_cipher.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_dh.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_digest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_dsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_eckey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_pkmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_rand.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/engine/tb_rsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/err_all.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/err_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/openssl.ec (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/err/openssl.txt (99%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/bio_b64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/bio_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/bio_md.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/bio_ok.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/c_allc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/c_alld.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/cmeth_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/digest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_aes.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_aes_cbc_hmac_sha1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_aes_cbc_hmac_sha256.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_aria.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_bf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_camellia.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_cast.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_chacha20_poly1305.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_des.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_des3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_idea.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_null.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_old.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_rc2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_rc4.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_rc4_hmac_md5.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_rc5.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_seed.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_sm4.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/e_xcbc_d.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/encode.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_cnf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_pbe.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/evp_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_md2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_md4.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_md5.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_md5_sha1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_mdc2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_null.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_ripemd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_sha1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_sha3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_sigver.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/m_wp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/names.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p5_crpt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p5_crpt2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_dec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_open.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_seal.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/p_verify.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/pbe_scrypt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/pmeth_fn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/pmeth_gn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/evp/pmeth_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ex_data.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/getenv.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/hmac/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/hmac/hm_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/hmac/hm_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/hmac/hmac.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/hmac/hmac_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ia64cpuid.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/i_cbc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/i_cfb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/i_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/i_ofb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/i_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/idea/idea_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/kdf/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/kdf/hkdf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/kdf/kdf_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/kdf/scrypt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/kdf/tls1_prf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/lhash/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/lhash/lh_stats.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/lhash/lhash.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/lhash/lhash_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md2/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md2/md2_dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md2/md2_one.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md4/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md4/md4_dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md4/md4_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md4/md4_one.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/asm/md5-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/asm/md5-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/asm/md5-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/md5_dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/md5_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/md5/md5_one.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mdc2/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mdc2/mdc2_one.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mdc2/mdc2dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mem.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mem_clr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mem_dbg.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mem_sec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/mips_arch.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/aesni-gcm-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-alpha.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghash-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghashp8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/asm/ghashv8-armx.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/cbc128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/ccm128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/cfb128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/ctr128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/cts128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/gcm128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/modes_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/ocb128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/ofb128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/wrap128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/modes/xts128.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/o_dir.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/o_fips.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/o_fopen.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/o_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/o_str.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/o_time.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/o_names.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_dat.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_dat.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_dat.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_mac.num (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_xref.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_xref.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/obj_xref.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/objects.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/objects.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/objects/objxref.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_asn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_cl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_ext.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_ht.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_srv.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/ocsp_vfy.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ocsp/v3_ocsp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pariscid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_all.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_info.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_oth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_pk8.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_pkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_x509.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pem_xaux.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pem/pvkfmt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/arm-xlate.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/cbc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/ppc-xlate.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/sparcv9_modes.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/x86_64-xlate.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/x86asm.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/x86gas.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/x86masm.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/perlasm/x86nasm.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_add.c (91%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_asn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_attr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_crpt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_crt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_decr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_key.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_kiss.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_mutl.c (98%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_npas.c (96%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_p8d.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_p8e.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_sbag.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/p12_utl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs12/pk12err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/bio_pk7.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pk7_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pk7_attr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pk7_doit.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pk7_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pk7_mime.c (92%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pk7_smime.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/pkcs7/pkcs7err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-mips.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-ppcfp.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/asm/poly1305-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/poly1305.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/poly1305_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/poly1305_base2_44.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/poly1305_ieee754.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/poly1305_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/poly1305/poly1305_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ppc_arch.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ppccap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ppccpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/drbg_ctr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/drbg_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_egd.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_unix.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_vms.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/rand_win.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rand/randfile.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/rc2_cbc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/rc2_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/rc2_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/rc2_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/rc2cfb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc2/rc2ofb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/asm/rc4-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/asm/rc4-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/asm/rc4-md5-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/asm/rc4-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/asm/rc4-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/asm/rc4-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/rc4_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/rc4_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc4/rc4_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/asm/rc5-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/rc5_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/rc5_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/rc5_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/rc5_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/rc5cfb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rc5/rc5ofb64.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ripemd/asm/rmd-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ripemd/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ripemd/rmd_dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ripemd/rmd_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ripemd/rmd_one.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ripemd/rmdconst.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_chk.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_crpt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_depr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_gen.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_meth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_mp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_none.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_oaep.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_pk1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_pss.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_saos.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_ssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_x931.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/rsa/rsa_x931g.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/s390x_arch.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/s390xcap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/s390xcpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/seed.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/seed_cbc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/seed_cfb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/seed_ecb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/seed_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/seed/seed_ofb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-avx2.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-avx512.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-avx512vl.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-c64x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-mmx.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/keccak1600p8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-alpha.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-armv4-large.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-mips.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-sparcv9a.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-thumb.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha256-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha256-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha256-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha256-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-586.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-mips.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/asm/sha512p8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/keccak1600.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/sha1_one.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/sha1dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/sha256.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/sha512.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sha/sha_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/siphash/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/siphash/siphash.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/siphash/siphash_ameth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/siphash/siphash_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/siphash/siphash_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm2/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm2/sm2_crypt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm2/sm2_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm2/sm2_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm2/sm2_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm3/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm3/m_sm3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm3/sm3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm3/sm3_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm4/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sm4/sm4.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sparc_arch.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sparccpuid.S (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/sparcv9cap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/srp/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/srp/srp_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/srp/srp_vfy.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/stack/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/stack/stack.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/loader_file.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/store_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/store_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/store_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/store_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/store_register.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/store/store_strings.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/threads_none.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/threads_pthread.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/threads_win.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_conf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_req_print.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_req_utils.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_rsp_print.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_rsp_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_rsp_utils.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_rsp_verify.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ts/ts_verify_ctx.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/txt_db/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/txt_db/txt_db.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/ui_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/ui_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/ui_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/ui_null.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/ui_openssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/ui/ui_util.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/uid.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/vms_rms.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/whrlpool/asm/wp-mmx.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/whrlpool/asm/wp-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/whrlpool/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/whrlpool/wp_block.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/whrlpool/wp_dgst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/whrlpool/wp_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/by_dir.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/by_file.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/t_crl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/t_req.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/t_x509.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_att.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_cmp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_d2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_def.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_ext.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_lu.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_meth.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_obj.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_r2x.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_req.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_set.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_trs.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_txt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_v3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_vfy.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509_vpm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509cset.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509name.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509rset.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509spki.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x509type.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_all.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_attrib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_crl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_exten.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_name.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_pubkey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_req.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_x509.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509/x_x509a.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/ext_dat.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_cache.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_data.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_map.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_node.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/pcy_tree.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/standard_exts.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_addr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_admis.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_admis.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_akey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_akeya.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_alt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_asid.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_bcons.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_bitst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_conf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_cpols.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_crld.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_enum.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_extku.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_genn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_ia5.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_info.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_int.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_ncons.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_pci.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_pcia.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_pcons.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_pku.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_pmaps.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_prn.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_purp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_skey.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_sxnet.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_tlsf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3_utl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x509v3/v3err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x86_64cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/crypto/x86cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/Makefile (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/accept.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/client-arg.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/client-conf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/cmod.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/connect.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/descrip.mms (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/intca.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/saccept.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/sconnect.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/server-arg.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/server-cmod.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/server-conf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/server-ec.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/server.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/shared.opt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/bio/static.opt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/apps.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/ckey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/intkey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/mkacerts.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/mkxcerts.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/rootkey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/skey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/apps/skey2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/ca.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/mkcerts.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/ocspquery.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/certs/ocsprun.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cacert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cakey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_comp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_ddec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_dec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_denc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_sign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_sign2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_uncomp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/cms_ver.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/comp.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/encr.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/sign.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/signer.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/cms/signer2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/engines/e_chil.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/evp/Makefile (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/evp/aesccm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/evp/aesgcm.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/pkcs12/pkread.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/pkcs12/pkwrite.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/cacert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/cakey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/encr.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/sign.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/signer.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/signer2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/smdec.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/smenc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/smsign.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/smsign2.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/demos/smime/smver.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/HOWTO/certificates.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/HOWTO/keys.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/dir-locals.example.el (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/fingerprints.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/CA.pl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/asn1parse.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/ca.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/ciphers.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/cms.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/crl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/crl2pkcs7.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/dgst.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/dhparam.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/dsa.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/dsaparam.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/ec.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/ecparam.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/enc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/engine.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/errstr.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/gendsa.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/genpkey.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/genrsa.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/list.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/nseq.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/ocsp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/openssl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/passwd.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/pkcs12.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/pkcs7.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/pkcs8.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/pkey.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/pkeyparam.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/pkeyutl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/prime.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/rand.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/rehash.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/req.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/rsa.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/rsautl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/s_client.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/s_server.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/s_time.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/sess_id.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/smime.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/speed.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/spkac.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/srp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/storeutl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/ts.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/tsget.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/verify.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/version.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man1/x509.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ADMISSIONS.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_INTEGER_get_int64.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_ITEM_lookup.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_OBJECT_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_STRING_TABLE_add.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_STRING_length.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_STRING_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_STRING_print_ex.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_TIME_set.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_TYPE_get.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASN1_generate_nconf.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASYNC_WAIT_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ASYNC_start_job.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BF_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_ADDR.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_ADDRINFO.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_connect.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_f_base64.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_f_buffer.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_f_cipher.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_f_md.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_f_null.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_f_ssl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_find_type.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_get_data.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_new_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_parse_hostserv.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_printf.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_push.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_read.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_accept.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_bio.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_connect.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_fd.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_file.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_mem.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_null.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_s_socket.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_set_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BIO_should_retry.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_BLINDING_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_CTX_start.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_add.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_add_word.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_bn2bin.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_cmp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_copy.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_generate_prime.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_mod_inverse.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_mod_mul_montgomery.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_mod_mul_reciprocal.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_num_bytes.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_rand.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_security_bits.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_set_bit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_swap.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BN_zero.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/BUF_MEM_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_add0_cert.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_add1_recipient_cert.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_add1_signer.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_compress.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_final.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_get0_RecipientInfos.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_get0_SignerInfos.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_get0_type.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_get1_ReceiptRequest.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_sign_receipt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_uncompress.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_verify.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CMS_verify_receipt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CONF_modules_free.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CONF_modules_load_file.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CRYPTO_THREAD_run_once.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CRYPTO_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CRYPTO_memcmp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CTLOG_STORE_get0_log_by_id.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CTLOG_STORE_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CTLOG_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/CT_POLICY_EVAL_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DEFINE_STACK_OF.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DES_random_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_generate_parameters.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_get0_pqg.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_get_1024_160.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_new_by_nid.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_set_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DH_size.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_do_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_dup_DH.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_generate_parameters.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_get0_pqg.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_set_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DSA_size.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DTLS_get_data_mtu.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DTLS_set_timer_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/DTLSv1_listen.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ECDSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ECPKParameters_print.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_GFp_simple_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_GROUP_copy.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_GROUP_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_KEY_get_enc_flags.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_KEY_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_POINT_add.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EC_POINT_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ENGINE_add.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_GET_LIB.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_clear_error.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_error_string.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_get_error.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_load_crypto_strings.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_load_strings.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_print_errors.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_put_error.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_remove_state.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/ERR_set_mark.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_BytesToKey.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_CIPHER_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_DigestInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_DigestSignInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_DigestVerifyInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_EncodeInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_EncryptInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_MD_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_OpenInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_ASN1_METHOD.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_asn1_get_count.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_cmp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_derive.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_get_default_digest_nid.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_keygen.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_meth_get_count.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_print_private.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_set1_RSA.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_size.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_verify.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_PKEY_verify_recover.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_SealInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_SignInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_VerifyInit.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_aes.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_aria.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_bf_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_blake2b512.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_camellia.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_cast5_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_chacha20.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_des.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_desx_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_idea_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_md2.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_md4.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_md5.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_mdc2.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_rc2_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_rc4.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_rc5_32_12_16_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_ripemd160.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_seed_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_sha1.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_sha224.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_sha3_224.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_sm3.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_sm4_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/EVP_whirlpool.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/HMAC.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/MD5.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/MDC2_Init.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OBJ_nid2obj.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OCSP_REQUEST_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OCSP_cert_to_id.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OCSP_request_add1_nonce.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OCSP_resp_find_status.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OCSP_response_status.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OCSP_sendreq_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_Applink.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_LH_COMPFUNC.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_LH_stats.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_VERSION_NUMBER.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_config.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_fork_prepare.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_ia32cap.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_init_crypto.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_init_ssl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_instrument_bus.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_load_builtin_modules.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_malloc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OPENSSL_secure_malloc.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OSSL_STORE_INFO.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OSSL_STORE_LOADER.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OSSL_STORE_SEARCH.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OSSL_STORE_expect.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OSSL_STORE_open.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/OpenSSL_add_all_algorithms.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_bytes_read_bio.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_read.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_read_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_read_bio_PrivateKey.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_read_bio_ex.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_write_bio_CMS_stream.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PEM_write_bio_PKCS7_stream.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS12_create.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS12_newpass.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS12_parse.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS5_PBKDF2_HMAC.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS7_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS7_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS7_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS7_sign_add_signer.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/PKCS7_verify.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_DRBG_generate.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_DRBG_get0_master.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_DRBG_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_DRBG_reseed.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_DRBG_set_callbacks.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_DRBG_set_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_add.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_bytes.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_cleanup.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_egd.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_load_file.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RAND_set_rand_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RC4_set_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RIPEMD160_Init.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_blinding_on.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_check_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_get0_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_padding_add_PKCS1_type_1.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_print.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_private_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_public_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_set_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/RSA_size.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SCT_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SCT_print.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SCT_validate.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SHA256_Init.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SMIME_read_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SMIME_read_PKCS7.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SMIME_write_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SMIME_write_PKCS7.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CIPHER_get_name.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_COMP_add_compression_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CONF_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CONF_CTX_set1_prefix.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CONF_CTX_set_flags.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CONF_cmd.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CONF_cmd_argv.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_add1_chain_cert.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_add_extra_chain_cert.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_add_session.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_config.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_dane_enable.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_flush_sessions.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_free.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_get0_param.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_get_verify_mode.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_has_client_custom_ext.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_load_verify_locations.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_sess_number.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_sess_set_cache_size.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_sess_set_get_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_sessions.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set0_CA_list.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set1_curves.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set1_sigalgs.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set1_verify_cert_store.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_alpn_select_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_cert_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_cert_store.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_cert_verify_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_cipher_list.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_client_cert_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_client_hello_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_ct_validation_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_ctlog_list_file.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_default_passwd_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_generate_session_id.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_info_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_keylog_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_max_cert_list.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_min_proto_version.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_mode.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_msg_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_num_tickets.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_options.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_psk_client_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_quiet_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_read_ahead.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_record_padding_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_security_level.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_session_cache_mode.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_session_id_context.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_session_ticket_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_split_send_fragment.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_ssl_version.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_timeout.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_tlsext_status_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_tmp_dh_callback.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_set_verify.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_use_certificate.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_use_psk_identity_hint.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_CTX_use_serverinfo.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_free.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get0_cipher.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get0_hostname.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get0_id_context.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get0_peer.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get_compress_id.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get_protocol_version.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_get_time.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_has_ticket.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_is_resumable.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_print.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_SESSION_set1_id.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_accept.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_alert_type_string.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_alloc_buffers.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_check_chain.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_clear.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_connect.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_do_handshake.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_export_keying_material.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_extension_supported.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_free.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get0_peer_scts.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_SSL_CTX.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_all_async_fds.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_ciphers.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_client_random.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_current_cipher.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_default_timeout.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_error.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_extms_support.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_fd.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_peer_cert_chain.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_peer_certificate.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_peer_signature_nid.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_peer_tmp_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_psk_identity.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_rbio.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_session.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_shared_sigalgs.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_verify_result.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_get_version.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_in_init.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_key_update.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_library_init.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_load_client_CA_file.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_pending.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_read.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_read_early_data.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_rstate_string.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_session_reused.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set1_host.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set_bio.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set_connect_state.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set_fd.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set_session.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_set_verify_result.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_state_string.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_want.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/SSL_write.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/UI_STRING.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/UI_UTIL_read_pw.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/UI_create_method.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/UI_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509V3_get_d2i.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_ALGOR_dup.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_CRL_get0_by_serial.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_EXTENSION_set_object.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_LOOKUP.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_LOOKUP_hash_dir.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_LOOKUP_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_NAME_ENTRY_get_object.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_NAME_add_entry_by_txt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_NAME_get0_der.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_NAME_get_index_by_NID.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_NAME_print_ex.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_PUBKEY_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_SIG_get0.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_CTX_get_error.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_CTX_set_verify_cb.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_add_cert.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_get0_param.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_STORE_set_verify_cb_func.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_VERIFY_PARAM_set_flags.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_check_ca.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_check_host.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_check_issued.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_check_private_key.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_check_purpose.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_cmp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_cmp_time.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_digest.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_dup.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get0_notBefore.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get0_signature.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get0_uids.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get_extension_flags.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get_pubkey.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get_serialNumber.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get_subject_name.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_get_version.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_new.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_sign.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509_verify_cert.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/X509v3_get_ext_by_NID.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/d2i_DHparams.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/d2i_PKCS8PrivateKey_bio.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/d2i_PrivateKey.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/d2i_SSL_SESSION.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/d2i_X509.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/i2d_CMS_bio_stream.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/i2d_PKCS7_bio_stream.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/i2d_re_X509_tbs.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man3/o2i_SCT_LIST.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man5/config.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man5/x509v3_config.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/Ed25519.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/RAND.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/RAND_DRBG.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/RSA-PSS.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/SM2.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/X25519.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/bio.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/crypto.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/ct.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/des_modes.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/evp.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/ossl_store-file.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/ossl_store.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/passphrase-encoding.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/proxy-certificates.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/scrypt.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/ssl.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/man7/x509.pod (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/doc/openssl-c-indent.el (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/e_os.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/asm/e_padlock-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/asm/e_padlock-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_afalg.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_afalg.ec (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_afalg.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_afalg.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_afalg_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_afalg_err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_capi.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_capi.ec (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_capi.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_capi_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_capi_err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_dasync.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_dasync.ec (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_dasync.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_dasync_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_dasync_err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_ossltest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_ossltest.ec (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_ossltest.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_ossltest_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_ossltest_err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/engines/e_padlock.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Downloaded.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/Artistic (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/COPYING (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/INSTALL (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/MANIFEST (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/META.json (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/META.yml (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/Makefile.PL (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/lib/Text/Template.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/00-version.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/01-basic.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/02-hash.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/03-out.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/04-safe.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/05-safe2.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/06-ofh.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/07-safe3.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/08-exported.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/09-error.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/10-delimiters.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/11-prepend.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/12-preprocess.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/13-taint.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/Text-Template-1.46/t/14-broken.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/external/perl/transfer/Text/Template.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/README.md (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/asn1parse.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/bignum.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/bndiv.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/client.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/cms.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/conf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/crl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/ct.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/driver.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/fuzzer.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/helper.py (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/mkfuzzoids.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/oids.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/rand.inc (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/server.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/test-corpus.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/fuzz/x509.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/aria.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/asn1.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/async.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/bn.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/bn_conf.h.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/bn_dh.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/bn_srp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/chacha.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/cryptlib.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/ctype.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/dso_conf.h.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/ec.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/engine.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/evp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/lhash.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/md32_common.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/objects.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/poly1305.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/rand.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/sha.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/siphash.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/sm2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/sm2err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/sm3.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/sm4.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/store.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/crypto/x509.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/bio.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/comp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/conf.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/constant_time.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/cryptlib.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/dane.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/dso.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/dsoerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/nelem.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/numbers.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/o_dir.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/o_str.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/refcount.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/sockets.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/sslconf.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/thread_once.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/internal/tsan_assist.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/aes.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/asn1.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/asn1_mac.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/asn1err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/asn1t.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/async.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/asyncerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/bio.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/bioerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/blowfish.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/bn.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/bnerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/buffer.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/buffererr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/camellia.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/cast.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/cmac.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/cms.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/cmserr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/comp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/comperr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/conf.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/conf_api.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/conferr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/crypto.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/cryptoerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ct.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/cterr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/des.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/dh.h (98%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/dherr.h (98%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/dsa.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/dsaerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/dtls1.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/e_os2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ebcdic.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ec.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ecdh.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ecdsa.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ecerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/engine.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/engineerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/evp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/evperr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/hmac.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/idea.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/kdf.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/kdferr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/lhash.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/md2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/md4.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/md5.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/mdc2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/modes.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/obj_mac.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/objects.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/objectserr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ocsp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ocsperr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/opensslconf.h.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/opensslv.h (98%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ossl_typ.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pem.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pem2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pemerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pkcs12.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pkcs12err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pkcs7.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/pkcs7err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rand.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rand_drbg.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/randerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rc2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rc4.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rc5.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ripemd.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rsa.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/rsaerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/safestack.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/seed.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/sha.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/srp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/srtp.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ssl.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ssl2.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ssl3.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/sslerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/stack.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/store.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/storeerr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/symhacks.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/tls1.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ts.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/tserr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/txt_db.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/ui.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/uierr.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/whrlpool.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/x509.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/x509_vfy.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/x509err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/x509v3.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/include/openssl/x509v3err.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/applink.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/cmp.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/uplink-common.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/uplink-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/uplink-x86.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/uplink-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/uplink.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ms/uplink.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/os-dep/haiku.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/bio_ssl.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/d1_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/d1_msg.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/d1_srtp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/methods.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/packet.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/packet_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/pqueue.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/dtls1_bitmap.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/rec_layer_d1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/rec_layer_s3.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/record.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/record_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/ssl3_buffer.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/ssl3_record.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/record/ssl3_record_tls13.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/s3_cbc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/s3_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/s3_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/s3_msg.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_asn1.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_cert.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_cert_table.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_ciph.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_conf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_err.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_mcnf.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_rsa.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_sess.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_stat.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_txt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/ssl_utst.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/extensions.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/extensions_clnt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/extensions_cust.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/extensions_srvr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem_clnt.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem_dtls.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/statem/statem_srvr.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/t1_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/t1_lib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/t1_trce.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/tls13_enc.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/ssl/tls_srp.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/CAss.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/CAssdh.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/CAssdsa.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/CAssrsa.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/CAtsa.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/P1ss.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/P2ss.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/README (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/README.external (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/README.ssltest.md (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/Sssdsa.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/Sssrsa.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/Uss.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/aborttest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/afalgtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asn1_decode_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asn1_encode_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asn1_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asn1_string_table_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asn1_time_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asynciotest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/asynctest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bad_dtls_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bftest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bio_callback_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bio_enc_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bio_memleak_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bioprinttest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bntest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/bntests.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/casttest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/alt1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/alt1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/alt2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/alt2-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/alt3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/alt3-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad-pc3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad-pc3-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad-pc4-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad-pc4-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad-pc6-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad-pc6-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad.key (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/bad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt10-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt10-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt2-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt3-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt4-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt4-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt5-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt5-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt6-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt6-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt7-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt7-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt8-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt8-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt9-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badalt9-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badcn1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/badcn1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert-768i.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert-ec-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert-md5-any.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-expired.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-key-768.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-key-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-key-ec-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-key2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-name2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-nonbc.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-nonca.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-pol-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-pss-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-root2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/client-ed25519-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/client-ed25519-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/client-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/client-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/croot-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cross-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cross-root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cyrillic.msb (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cyrillic.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cyrillic.utf8 (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cyrillic_crl.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/cyrillic_crl.utf8 (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/dhp2048.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-768i.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-ec-named-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-ec-named-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-policies-bad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert-policies.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-client-chain.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-client.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-ecdsa-client-chain.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-ecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-ed25519.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-expired.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-key-768.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-key-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-key-ec-named-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-key-ec-named-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-name2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-pathlen.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-pss-sha1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-pss-sha256-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-self-signed.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ee-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs1.sct (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs1_issuer-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs1_issuer.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs3.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs3.sct (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/embeddedSCTs3_issuer.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/goodcn1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/goodcn1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/interCA.key (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/interCA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/invalid-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/leaf.key (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/leaf.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/many-constraints.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/many-names1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/many-names2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/many-names3.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/mkcert.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/nca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/nca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca2-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/ncca3-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/nroot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/nroot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/p256-server-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/p256-server-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/p384-root-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/p384-root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/p384-server-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/p384-server-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pathlen.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pc1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pc1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pc2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pc2-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pc5-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/pc5-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-cert-rsa2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-cross-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-ed25519.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-expired.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-key-768.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-key2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-name2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-nonca.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-noserver.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root2+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root2+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/root2-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/rootCA.key (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/rootCA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/rootcert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/rootkey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/roots.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-cecdsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-cecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-dsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-dsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ecdsa-brainpoolP256r1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ecdsa-brainpoolP256r1-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ecdsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ed25519-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ed25519-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-pss-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-pss-restrict-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-pss-restrict-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/server-trusted.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/servercert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/serverkey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/setup.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/some-names1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/some-names2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/some-names3.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot-cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/sroot-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/subinterCA-ss.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/subinterCA.key (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/subinterCA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/untrusted.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/wrongcert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/wrongkey.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/x509-check-key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/certs/x509-check.csr (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/chacha_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/cipher_overhead_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/cipherbytes_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/cipherlist_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ciphername_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/clienthellotest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/cmactest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/cms-examples.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/cmsapitest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/conf_include_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/constant_time_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/crltest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ct/log_list.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ct/tls1.sct (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ct_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ctype_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/curve448_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/bad-cms.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/bad-int-pad0.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/bad-int-padminus1.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/bad_bio.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/bad_cert.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/bad_generalname.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/high_tag.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/int0.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/int1.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i-tests/intminus1.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/d2i_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dane-cross.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/danetest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/danetest.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/danetest.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/data.bin (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/destest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dhtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/drbg_cavs_data.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/drbg_cavs_data.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/drbg_cavs_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/drbgtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/drbgtest.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dsa_no_digest_size_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dsatest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dtls_mtu_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dtlstest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/dtlsv1listentest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ec_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ecdsatest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ecdsatest.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ecstresstest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ectest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/enginetest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/errtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/evp_extra_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/evp_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/evp_test.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/exdatatest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/exptest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/fatalerrtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/generate_buildtest.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/generate_ssl_tests.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/gmdifftest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/gosttest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/handshake_helper.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/handshake_helper.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/hmactest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ideatest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/igetest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/lhash_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/md2test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/mdc2_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/mdc2test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/memleaktest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/modes_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISDOSC_D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISDOSC_D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISDOSC_D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISOP_D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISOP_D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISOP_D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISOP_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISOP_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ISOP_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND1_Cross_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WIKH_D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WIKH_D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WIKH_D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WIKH_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WIKH_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WIKH_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WINH_D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WINH_D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WINH_D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WINH_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WINH_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WINH_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKDOSC_D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKDOSC_D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKDOSC_D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WRID_D1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WRID_D2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WRID_D3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WRID_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WRID_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WRID_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ocspapitest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/async_bio.cc (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/async_bio.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/include/openssl/base.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/ossl_config.json (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/ossl_shim.cc (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/packeted_bio.cc (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/packeted_bio.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/test_config.cc (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ossl_shim/test_config.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/packettest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pbelutest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pemtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pkcs7-1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pkcs7.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pkey_meth_kdf_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pkey_meth_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/pkits-test.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/poly1305_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rc2test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rc4test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rc5test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rdrand_sanitytest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/01-test_abort.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/01-test_sanity.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/01-test_symbol_presence.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/01-test_test.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/02-test_errstr.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/02-test_internal_ctype.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/02-test_lhash.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/02-test_ordinals.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/02-test_stack.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_exdata.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_asn1.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_chacha.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_curve448.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_ec.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_mdc2.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_modes.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_poly1305.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_siphash.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_sm2.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_sm4.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_ssl_cert_table.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_internal_x509.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/03-test_ui.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_asn1_decode.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_asn1_encode.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_asn1_string_table.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_bio_callback.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_bioprint.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_err.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/NOTES (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/beermug.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-1023line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-1024line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-1025line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-255line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-256line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-257line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-blankline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-comment.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-earlypad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-extrapad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-infixwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-junk.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-longline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-misalignedpad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-onecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-oneline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-shortandlongline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-shortline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-threecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/csr.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-1023line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-1024line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-1025line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-255line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-256line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-257line.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-blankline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-comment.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-corruptedheader.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-corruptiv.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-earlypad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-extrapad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-junk.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-longline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-misalignedpad.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-onecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-oneline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-onelineheader.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-shortandlongline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-shortline.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-threecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsa.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/dsaparam.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/04-test_pem_data/wellknown (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_bf.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_cast.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_cmac.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_des.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_hmac.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_idea.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_md2.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_mdc2.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_rand.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_rc2.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_rc4.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/05-test_rc5.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/06-test-rdrand.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn_data/bnexp.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn_data/bngcd.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn_data/bnmod.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn_data/bnmul.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn_data/bnshift.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_bn_data/bnsum.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/10-test_exp.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_dh.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_dsa.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ec.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecdsa.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_genec.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_genrsa.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_mp_rsa.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_mp_rsa_data/plain_text (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_out_option.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_rsa.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/15-test_rsapss.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/20-test_dgst.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/20-test_enc.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/20-test_enc_more.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/20-test_passwd.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_crl.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_d2i.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_pkcs7.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_req.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_sid.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_verify.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/25-test_x509.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_afalg.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_engine.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpcase.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpccmcavs.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpciph.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpdigest.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpencod.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpkdf.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evpmac.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evppbe.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evppkey.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_data/evppkey_ecc.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_evp_extra.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_pbelu.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_pkey_meth.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/30-test_pkey_meth_kdf.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/40-test_rehash.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/60-test_x509_check_cert_pkey.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/60-test_x509_dup_cert.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/60-test_x509_store.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/60-test_x509_time.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_asyncio.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_bad_dtls.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_clienthello.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_comp.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_key_share.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_packet.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_recordlen.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_renegotiation.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_servername.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslcbcpadding.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslcertstatus.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslextension.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslmessages.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslrecords.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslsessiontick.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslsigalgs.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslsignature.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslskewith0p.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslversions.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_sslvertol.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13alerts.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13cookie.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13downgrade.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13hrr.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13kexmodes.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13messages.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tls13psk.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_tlsextms.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_verify_extra.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/70-test_wpacket.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ca.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cipherbytes.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cipherlist.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ciphername.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cms.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cms_data/bad_signtime_attr.cms (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cms_data/ct_multiple_attr.cms (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cms_data/no_ct_attr.cms (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cms_data/no_md_attr.cms (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_cmsapi.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ct.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_dane.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_dtls.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_dtls_mtu.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_dtlsv1listen.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ocsp.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ocsp_data/cert.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ocsp_data/key.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_pkcs12.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_policy_tree.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_policy_tree_data/large_leaf.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_policy_tree_data/large_policy_tree.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_policy_tree_data/small_leaf.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_policy_tree_data/small_policy_tree.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ssl_new.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ssl_old.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_ssl_test_ctx.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_sslcorrupt.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_tsa.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/80-test_x509aux.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_asn1_time.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_async.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_bio_enc.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_bio_memleak.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_constant_time.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_fatalerr.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gmdiff.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gost.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gost_data/gost.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gost_data/server-cert2001.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gost_data/server-cert2012.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gost_data/server-key2001.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_gost_data/server-key2012.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_ige.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/conf-includes/includes1.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/conf-includes/includes2.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/includes-broken.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/includes-eq-ws.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/includes-eq.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/includes-file.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/includes.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/vms-includes-file.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_includes_data/vms-includes.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_memleak.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_overhead.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_secmem.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_shlibload.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_srp.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_sslapi.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_sslapi_data/passwd.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_sslbuffers.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_store.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_store_data/ca.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_store_data/user.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_sysdefault.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_threads.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_time_offset.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_tls13ccs.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_tls13encryption.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_tls13secrets.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/90-test_v3name.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/95-test_external_boringssl.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/95-test_external_krb5.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/95-test_external_krb5_data/krb5.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/95-test_external_pyca.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/95-test_external_pyca_data/cryptography.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/99-test_ecstress.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/99-test_fuzz.t (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/ocsp-response.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recipes/tconversion.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/recordlentest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rsa_complex.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rsa_mp_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/rsa_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/run_tests.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sanitytest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/secmemtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/serverinfo.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/serverinfo2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/servername_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/session.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/shibboleth.pfx (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/shlibloadtest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/siphash_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sm2_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sm4_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smcont.txt (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/badrsa.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/ca.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/mksmime-certs.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smdh.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smdsa1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smdsa2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smdsa3.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smdsap.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smec1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smec2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smec3.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smroot.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smrsa1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smrsa2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/smime-certs/smrsa3.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/srptest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/01-simple.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/01-simple.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/02-protocol-version.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/02-protocol-version.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/03-custom_verify.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/03-custom_verify.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/04-client_auth.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/04-client_auth.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/05-sni.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/05-sni.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/06-sni-ticket.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/06-sni-ticket.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/07-dtls-protocol-version.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/07-dtls-protocol-version.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/08-npn.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/08-npn.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/09-alpn.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/09-alpn.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/10-resumption.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/10-resumption.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/11-dtls_resumption.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/11-dtls_resumption.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/12-ct.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/12-ct.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/13-fragmentation.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/13-fragmentation.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/14-curves.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/14-curves.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/15-certstatus.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/15-certstatus.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/16-dtls-certstatus.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/16-dtls-certstatus.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/17-renegotiate.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/17-renegotiate.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/18-dtls-renegotiate.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/18-dtls-renegotiate.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/19-mac-then-encrypt.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/19-mac-then-encrypt.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/20-cert-select.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/20-cert-select.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/21-key-update.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/21-key-update.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/22-compression.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/22-compression.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/23-srp.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/23-srp.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/24-padding.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/24-padding.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/25-cipher.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/25-cipher.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/26-tls13_client_auth.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/26-tls13_client_auth.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/27-ticket-appdata.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/27-ticket-appdata.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/28-seclevel.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/28-seclevel.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/29-dtls-sctp-label-bug.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/29-dtls-sctp-label-bug.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/30-supported-groups.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/30-supported-groups.conf.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/protocol_version.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl-tests/ssltests_base.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_cert_table_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_ctx_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_test.tmpl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_test_ctx.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_test_ctx.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_test_ctx_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssl_test_ctx_test.conf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sslapitest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sslbuffertest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sslcorrupttest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssltest_old.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssltestlib.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/ssltestlib.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/stack_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sysdefault.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/sysdefaulttest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/test.cnf (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/test_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testcrl.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testdsa.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testdsapub.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testec-p256.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testecpub-p256.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tested25519.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tested25519pub.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tested448.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tested448pub.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testp7.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testreq2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testrsa.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testrsa_withattrs.der (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testrsa_withattrs.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testrsapub.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testsid.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/basic_output.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/cb.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/driver.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/format_output.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/main.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/output.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/output_helpers.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/random.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/stanza.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/tap_bio.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/test_cleanup.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/tests.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/testutil_init.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testutil/tu_local.h (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/testx509.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/threadstest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/time_offset_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tls13ccstest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tls13encryptiontest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/tls13secretstest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/uitest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/v3-cert1.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/v3-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/v3ext.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/v3nametest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/verify_extra_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/versions.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/wpackettest.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/x509_check_cert_pkey_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/x509_dup_cert_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/x509_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/x509_time_test.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/test/x509aux.c (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/tools/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/tools/c_rehash.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/add-depends.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/build.info (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/cavs-to-evptest.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/check-malloc-errs (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/ck_errf.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/copy.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/dofile.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/echo.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/find-doc-nits (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/find-unused-errs (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/fix-includes (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/fix-includes.sed (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/indent.pro (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/libcrypto.num (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/libssl.num (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/local_shlib.com.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/mkbuildinf.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/mkdef.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/mkdir-p.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/mkerr.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/mkrc.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/openssl-format-source (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/openssl-update-copyright (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/opensslwrap.sh (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/OpenSSL/Glob.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/OpenSSL/Test.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/OpenSSL/Test/Simple.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/OpenSSL/Test/Utils.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/OpenSSL/Util/Pod.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/OpenSSL/copyright.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/Alert.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/Certificate.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/CertificateRequest.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/CertificateVerify.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/ClientHello.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/EncryptedExtensions.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/Message.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/NewSessionTicket.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/Proxy.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/Record.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/ServerHello.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/TLSProxy/ServerKeyExchange.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/checkhandshake.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/perl/with_fallback.pm (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/private.num (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/process_docs.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/shlib_wrap.sh.in (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/su-filter.pl (100%) rename src/openssl/{openssl-1.1.1w => openssl-1.1.1w-chevah1}/util/unlocal_shlib.com.in (100%) diff --git a/chevah_build b/chevah_build index 002de6d53..7bb57d31d 100755 --- a/chevah_build +++ b/chevah_build @@ -19,7 +19,10 @@ BZIP2_VERSION="1.0.8" # We statically build the BSD libedit on selected platforms to get the # readline module available without linking to the GPL-only readline libs. LIBEDIT_VERSION="20170329-3.1" -OPENSSL_VERSION="1.1.1w" +# As of November 2023, security patches for OpenSSL 1.1.1 are private. +# More at https://openssl-library.org/news/vulnerabilities-1.1.1/index.html. +# Some fixes can still be found in the OpenSSL 1.1.1f sources from Ubuntu 20.04. +OPENSSL_VERSION="1.1.1w-chevah1" SQLITE_VERSION="3.43.1" # Python modules versions to be used everywhere possible. diff --git a/python-modules/chevah-python-test/test_python_binary_dist.py b/python-modules/chevah-python-test/test_python_binary_dist.py index ebcc64795..5fae1075f 100644 --- a/python-modules/chevah-python-test/test_python_binary_dist.py +++ b/python-modules/chevah-python-test/test_python_binary_dist.py @@ -433,7 +433,7 @@ def main(): openssl_version = backend.openssl_version_text() if CHEVAH_OS.startswith(("win", "lnx", "macos", "aix")): # On some OS'es we build against our own OpenSSL. - expecting = u'OpenSSL 1.1.1w 11 Sep 2023' + expecting = u'OpenSSL 1.1.1w-chevah1 26 Jul 2024' if CHEVAH_OS.startswith("aix"): # On AIX we are stuck with a patched 1.0.2. expecting = u'OpenSSL 1.0.2v-chevah5 21 Sep 2023' diff --git a/src/openssl/openssl-1.1.1w/ACKNOWLEDGEMENTS b/src/openssl/openssl-1.1.1w-chevah1/ACKNOWLEDGEMENTS similarity index 100% rename from src/openssl/openssl-1.1.1w/ACKNOWLEDGEMENTS rename to src/openssl/openssl-1.1.1w-chevah1/ACKNOWLEDGEMENTS diff --git a/src/openssl/openssl-1.1.1w/AUTHORS b/src/openssl/openssl-1.1.1w-chevah1/AUTHORS similarity index 100% rename from src/openssl/openssl-1.1.1w/AUTHORS rename to src/openssl/openssl-1.1.1w-chevah1/AUTHORS diff --git a/src/openssl/openssl-1.1.1w/CHANGES b/src/openssl/openssl-1.1.1w-chevah1/CHANGES similarity index 99% rename from src/openssl/openssl-1.1.1w/CHANGES rename to src/openssl/openssl-1.1.1w-chevah1/CHANGES index c4409489e..5efd7d53d 100644 --- a/src/openssl/openssl-1.1.1w/CHANGES +++ b/src/openssl/openssl-1.1.1w-chevah1/CHANGES @@ -7,6 +7,16 @@ https://github.com/openssl/openssl/commits/ and pick the appropriate release branch. + Changes between 1.1.1w and 1.1.1w-chevah1 [26 Jul 2024] + + *) Fix PKCS12 decoding crashes. + + (CVE-2024-0727) + + *) Fix excessive time in DH check/generation with large Q parameter value. + + (CVE-2023-5678) + Changes between 1.1.1v and 1.1.1w [11 Sep 2023] *) Fix POLY1305 MAC implementation corrupting XMM registers on Windows. diff --git a/src/openssl/openssl-1.1.1w/CONTRIBUTING b/src/openssl/openssl-1.1.1w-chevah1/CONTRIBUTING similarity index 100% rename from src/openssl/openssl-1.1.1w/CONTRIBUTING rename to src/openssl/openssl-1.1.1w-chevah1/CONTRIBUTING diff --git a/src/openssl/openssl-1.1.1w/Configurations/00-base-templates.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/00-base-templates.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/00-base-templates.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/00-base-templates.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/10-main.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/10-main.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/10-main.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/10-main.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/15-android.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/15-android.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/15-android.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/15-android.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/15-ios.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/15-ios.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/15-ios.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/15-ios.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/50-djgpp.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-djgpp.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/50-djgpp.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/50-djgpp.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/50-haiku.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-haiku.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/50-haiku.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/50-haiku.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/50-masm.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-masm.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/50-masm.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/50-masm.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/50-win-onecore.conf b/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-win-onecore.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/50-win-onecore.conf rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/50-win-onecore.conf diff --git a/src/openssl/openssl-1.1.1w/Configurations/INTERNALS.Configure b/src/openssl/openssl-1.1.1w-chevah1/Configurations/INTERNALS.Configure similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/INTERNALS.Configure rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/INTERNALS.Configure diff --git a/src/openssl/openssl-1.1.1w/Configurations/README b/src/openssl/openssl-1.1.1w-chevah1/Configurations/README similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/README rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/README diff --git a/src/openssl/openssl-1.1.1w/Configurations/README.design b/src/openssl/openssl-1.1.1w-chevah1/Configurations/README.design similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/README.design rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/README.design diff --git a/src/openssl/openssl-1.1.1w/Configurations/common.tmpl b/src/openssl/openssl-1.1.1w-chevah1/Configurations/common.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/common.tmpl rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/common.tmpl diff --git a/src/openssl/openssl-1.1.1w/Configurations/common0.tmpl b/src/openssl/openssl-1.1.1w-chevah1/Configurations/common0.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/common0.tmpl rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/common0.tmpl diff --git a/src/openssl/openssl-1.1.1w/Configurations/descrip.mms.tmpl b/src/openssl/openssl-1.1.1w-chevah1/Configurations/descrip.mms.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/descrip.mms.tmpl rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/descrip.mms.tmpl diff --git a/src/openssl/openssl-1.1.1w/Configurations/shared-info.pl b/src/openssl/openssl-1.1.1w-chevah1/Configurations/shared-info.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/shared-info.pl rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/shared-info.pl diff --git a/src/openssl/openssl-1.1.1w/Configurations/unix-Makefile.tmpl b/src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-Makefile.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/unix-Makefile.tmpl rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-Makefile.tmpl diff --git a/src/openssl/openssl-1.1.1w/Configurations/unix-checker.pm b/src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-checker.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/unix-checker.pm rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-checker.pm diff --git a/src/openssl/openssl-1.1.1w/Configurations/windows-checker.pm b/src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-checker.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/windows-checker.pm rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-checker.pm diff --git a/src/openssl/openssl-1.1.1w/Configurations/windows-makefile.tmpl b/src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-makefile.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w/Configurations/windows-makefile.tmpl rename to src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-makefile.tmpl diff --git a/src/openssl/openssl-1.1.1w/Configure b/src/openssl/openssl-1.1.1w-chevah1/Configure similarity index 100% rename from src/openssl/openssl-1.1.1w/Configure rename to src/openssl/openssl-1.1.1w-chevah1/Configure diff --git a/src/openssl/openssl-1.1.1w/FAQ b/src/openssl/openssl-1.1.1w-chevah1/FAQ similarity index 100% rename from src/openssl/openssl-1.1.1w/FAQ rename to src/openssl/openssl-1.1.1w-chevah1/FAQ diff --git a/src/openssl/openssl-1.1.1w/INSTALL b/src/openssl/openssl-1.1.1w-chevah1/INSTALL similarity index 100% rename from src/openssl/openssl-1.1.1w/INSTALL rename to src/openssl/openssl-1.1.1w-chevah1/INSTALL diff --git a/src/openssl/openssl-1.1.1w/LICENSE b/src/openssl/openssl-1.1.1w-chevah1/LICENSE similarity index 100% rename from src/openssl/openssl-1.1.1w/LICENSE rename to src/openssl/openssl-1.1.1w-chevah1/LICENSE diff --git a/src/openssl/openssl-1.1.1w/NEWS b/src/openssl/openssl-1.1.1w-chevah1/NEWS similarity index 99% rename from src/openssl/openssl-1.1.1w/NEWS rename to src/openssl/openssl-1.1.1w-chevah1/NEWS index 1b849cdf7..ee9dce40f 100644 --- a/src/openssl/openssl-1.1.1w/NEWS +++ b/src/openssl/openssl-1.1.1w-chevah1/NEWS @@ -5,6 +5,12 @@ This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file. + Major changes between OpenSSL 1.1.1w and OpenSSL 1.1.1w-chevah1 [26 Jul 2024] + + o Fix PKCS12 decoding crashes (CVE-2024-0727) + o Fix excessive time spent in DH check / generation with large Q + parameter value. (CVE-2023-5678) + Major changes between OpenSSL 1.1.1v and OpenSSL 1.1.1w [11 Sep 2023] o Fix POLY1305 MAC implementation corrupting XMM registers on Windows diff --git a/src/openssl/openssl-1.1.1w/NOTES.ANDROID b/src/openssl/openssl-1.1.1w-chevah1/NOTES.ANDROID similarity index 100% rename from src/openssl/openssl-1.1.1w/NOTES.ANDROID rename to src/openssl/openssl-1.1.1w-chevah1/NOTES.ANDROID diff --git a/src/openssl/openssl-1.1.1w/NOTES.DJGPP b/src/openssl/openssl-1.1.1w-chevah1/NOTES.DJGPP similarity index 100% rename from src/openssl/openssl-1.1.1w/NOTES.DJGPP rename to src/openssl/openssl-1.1.1w-chevah1/NOTES.DJGPP diff --git a/src/openssl/openssl-1.1.1w/NOTES.PERL b/src/openssl/openssl-1.1.1w-chevah1/NOTES.PERL similarity index 100% rename from src/openssl/openssl-1.1.1w/NOTES.PERL rename to src/openssl/openssl-1.1.1w-chevah1/NOTES.PERL diff --git a/src/openssl/openssl-1.1.1w/NOTES.UNIX b/src/openssl/openssl-1.1.1w-chevah1/NOTES.UNIX similarity index 100% rename from src/openssl/openssl-1.1.1w/NOTES.UNIX rename to src/openssl/openssl-1.1.1w-chevah1/NOTES.UNIX diff --git a/src/openssl/openssl-1.1.1w/NOTES.VMS b/src/openssl/openssl-1.1.1w-chevah1/NOTES.VMS similarity index 100% rename from src/openssl/openssl-1.1.1w/NOTES.VMS rename to src/openssl/openssl-1.1.1w-chevah1/NOTES.VMS diff --git a/src/openssl/openssl-1.1.1w/NOTES.WIN b/src/openssl/openssl-1.1.1w-chevah1/NOTES.WIN similarity index 100% rename from src/openssl/openssl-1.1.1w/NOTES.WIN rename to src/openssl/openssl-1.1.1w-chevah1/NOTES.WIN diff --git a/src/openssl/openssl-1.1.1w/README b/src/openssl/openssl-1.1.1w-chevah1/README similarity index 98% rename from src/openssl/openssl-1.1.1w/README rename to src/openssl/openssl-1.1.1w-chevah1/README index e924e1529..ea84a8c78 100644 --- a/src/openssl/openssl-1.1.1w/README +++ b/src/openssl/openssl-1.1.1w-chevah1/README @@ -1,5 +1,5 @@ - OpenSSL 1.1.1w 11 Sep 2023 + OpenSSL 1.1.1w-chevah1 26 Jul 2024 Copyright (c) 1998-2023 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson diff --git a/src/openssl/openssl-1.1.1w/README.ENGINE b/src/openssl/openssl-1.1.1w-chevah1/README.ENGINE similarity index 100% rename from src/openssl/openssl-1.1.1w/README.ENGINE rename to src/openssl/openssl-1.1.1w-chevah1/README.ENGINE diff --git a/src/openssl/openssl-1.1.1w/README.FIPS b/src/openssl/openssl-1.1.1w-chevah1/README.FIPS similarity index 100% rename from src/openssl/openssl-1.1.1w/README.FIPS rename to src/openssl/openssl-1.1.1w-chevah1/README.FIPS diff --git a/src/openssl/openssl-1.1.1w/VMS/VMSify-conf.pl b/src/openssl/openssl-1.1.1w-chevah1/VMS/VMSify-conf.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/VMSify-conf.pl rename to src/openssl/openssl-1.1.1w-chevah1/VMS/VMSify-conf.pl diff --git a/src/openssl/openssl-1.1.1w/VMS/engine.opt b/src/openssl/openssl-1.1.1w-chevah1/VMS/engine.opt similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/engine.opt rename to src/openssl/openssl-1.1.1w-chevah1/VMS/engine.opt diff --git a/src/openssl/openssl-1.1.1w/VMS/msg_install.com b/src/openssl/openssl-1.1.1w-chevah1/VMS/msg_install.com similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/msg_install.com rename to src/openssl/openssl-1.1.1w-chevah1/VMS/msg_install.com diff --git a/src/openssl/openssl-1.1.1w/VMS/msg_staging.com b/src/openssl/openssl-1.1.1w-chevah1/VMS/msg_staging.com similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/msg_staging.com rename to src/openssl/openssl-1.1.1w-chevah1/VMS/msg_staging.com diff --git a/src/openssl/openssl-1.1.1w/VMS/openssl_ivp.com.in b/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_ivp.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/openssl_ivp.com.in rename to src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_ivp.com.in diff --git a/src/openssl/openssl-1.1.1w/VMS/openssl_shutdown.com.in b/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_shutdown.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/openssl_shutdown.com.in rename to src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_shutdown.com.in diff --git a/src/openssl/openssl-1.1.1w/VMS/openssl_startup.com.in b/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_startup.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/openssl_startup.com.in rename to src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_startup.com.in diff --git a/src/openssl/openssl-1.1.1w/VMS/openssl_utils.com.in b/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_utils.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/openssl_utils.com.in rename to src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_utils.com.in diff --git a/src/openssl/openssl-1.1.1w/VMS/test-includes.com b/src/openssl/openssl-1.1.1w-chevah1/VMS/test-includes.com similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/test-includes.com rename to src/openssl/openssl-1.1.1w-chevah1/VMS/test-includes.com diff --git a/src/openssl/openssl-1.1.1w/VMS/translatesyms.pl b/src/openssl/openssl-1.1.1w-chevah1/VMS/translatesyms.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/VMS/translatesyms.pl rename to src/openssl/openssl-1.1.1w-chevah1/VMS/translatesyms.pl diff --git a/src/openssl/openssl-1.1.1w/apps/CA.pl.in b/src/openssl/openssl-1.1.1w-chevah1/apps/CA.pl.in similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/CA.pl.in rename to src/openssl/openssl-1.1.1w-chevah1/apps/CA.pl.in diff --git a/src/openssl/openssl-1.1.1w/apps/app_rand.c b/src/openssl/openssl-1.1.1w-chevah1/apps/app_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/app_rand.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/app_rand.c diff --git a/src/openssl/openssl-1.1.1w/apps/apps.c b/src/openssl/openssl-1.1.1w-chevah1/apps/apps.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/apps.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/apps.c diff --git a/src/openssl/openssl-1.1.1w/apps/apps.h b/src/openssl/openssl-1.1.1w-chevah1/apps/apps.h similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/apps.h rename to src/openssl/openssl-1.1.1w-chevah1/apps/apps.h diff --git a/src/openssl/openssl-1.1.1w/apps/asn1pars.c b/src/openssl/openssl-1.1.1w-chevah1/apps/asn1pars.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/asn1pars.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/asn1pars.c diff --git a/src/openssl/openssl-1.1.1w/apps/bf_prefix.c b/src/openssl/openssl-1.1.1w-chevah1/apps/bf_prefix.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/bf_prefix.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/bf_prefix.c diff --git a/src/openssl/openssl-1.1.1w/apps/build.info b/src/openssl/openssl-1.1.1w-chevah1/apps/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/build.info rename to src/openssl/openssl-1.1.1w-chevah1/apps/build.info diff --git a/src/openssl/openssl-1.1.1w/apps/ca-cert.srl b/src/openssl/openssl-1.1.1w-chevah1/apps/ca-cert.srl similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ca-cert.srl rename to src/openssl/openssl-1.1.1w-chevah1/apps/ca-cert.srl diff --git a/src/openssl/openssl-1.1.1w/apps/ca-key.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ca-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/ca-key.pem diff --git a/src/openssl/openssl-1.1.1w/apps/ca-req.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/ca-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ca-req.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/ca-req.pem diff --git a/src/openssl/openssl-1.1.1w/apps/ca.c b/src/openssl/openssl-1.1.1w-chevah1/apps/ca.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ca.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/ca.c diff --git a/src/openssl/openssl-1.1.1w/apps/cert.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/cert.pem diff --git a/src/openssl/openssl-1.1.1w/apps/ciphers.c b/src/openssl/openssl-1.1.1w-chevah1/apps/ciphers.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ciphers.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/ciphers.c diff --git a/src/openssl/openssl-1.1.1w/apps/client.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/client.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/client.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/client.pem diff --git a/src/openssl/openssl-1.1.1w/apps/cms.c b/src/openssl/openssl-1.1.1w-chevah1/apps/cms.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/cms.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/cms.c diff --git a/src/openssl/openssl-1.1.1w/apps/crl.c b/src/openssl/openssl-1.1.1w-chevah1/apps/crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/crl.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/crl.c diff --git a/src/openssl/openssl-1.1.1w/apps/crl2p7.c b/src/openssl/openssl-1.1.1w-chevah1/apps/crl2p7.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/crl2p7.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/crl2p7.c diff --git a/src/openssl/openssl-1.1.1w/apps/ct_log_list.cnf b/src/openssl/openssl-1.1.1w-chevah1/apps/ct_log_list.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ct_log_list.cnf rename to src/openssl/openssl-1.1.1w-chevah1/apps/ct_log_list.cnf diff --git a/src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt b/src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt rename to src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt diff --git a/src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt.attr b/src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt.attr similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt.attr rename to src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt.attr diff --git a/src/openssl/openssl-1.1.1w/apps/dgst.c b/src/openssl/openssl-1.1.1w-chevah1/apps/dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/dgst.c diff --git a/src/openssl/openssl-1.1.1w/apps/dh1024.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dh1024.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dh1024.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dh2048.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dh2048.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dh2048.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dh4096.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dh4096.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dh4096.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dhparam.c b/src/openssl/openssl-1.1.1w-chevah1/apps/dhparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dhparam.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/dhparam.c diff --git a/src/openssl/openssl-1.1.1w/apps/dsa-ca.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dsa-ca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsa-ca.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsa-ca.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dsa-pca.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dsa-pca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsa-pca.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsa-pca.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dsa.c b/src/openssl/openssl-1.1.1w-chevah1/apps/dsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsa.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsa.c diff --git a/src/openssl/openssl-1.1.1w/apps/dsa1024.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dsa1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsa1024.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsa1024.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dsa512.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dsa512.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsa512.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsa512.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dsap.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/dsap.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsap.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsap.pem diff --git a/src/openssl/openssl-1.1.1w/apps/dsaparam.c b/src/openssl/openssl-1.1.1w-chevah1/apps/dsaparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/dsaparam.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/dsaparam.c diff --git a/src/openssl/openssl-1.1.1w/apps/ec.c b/src/openssl/openssl-1.1.1w-chevah1/apps/ec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ec.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/ec.c diff --git a/src/openssl/openssl-1.1.1w/apps/ecparam.c b/src/openssl/openssl-1.1.1w-chevah1/apps/ecparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ecparam.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/ecparam.c diff --git a/src/openssl/openssl-1.1.1w/apps/enc.c b/src/openssl/openssl-1.1.1w-chevah1/apps/enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/enc.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/enc.c diff --git a/src/openssl/openssl-1.1.1w/apps/engine.c b/src/openssl/openssl-1.1.1w-chevah1/apps/engine.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/engine.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/engine.c diff --git a/src/openssl/openssl-1.1.1w/apps/errstr.c b/src/openssl/openssl-1.1.1w-chevah1/apps/errstr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/errstr.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/errstr.c diff --git a/src/openssl/openssl-1.1.1w/apps/gendsa.c b/src/openssl/openssl-1.1.1w-chevah1/apps/gendsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/gendsa.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/gendsa.c diff --git a/src/openssl/openssl-1.1.1w/apps/genpkey.c b/src/openssl/openssl-1.1.1w-chevah1/apps/genpkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/genpkey.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/genpkey.c diff --git a/src/openssl/openssl-1.1.1w/apps/genrsa.c b/src/openssl/openssl-1.1.1w-chevah1/apps/genrsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/genrsa.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/genrsa.c diff --git a/src/openssl/openssl-1.1.1w/apps/nseq.c b/src/openssl/openssl-1.1.1w-chevah1/apps/nseq.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/nseq.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/nseq.c diff --git a/src/openssl/openssl-1.1.1w/apps/ocsp.c b/src/openssl/openssl-1.1.1w-chevah1/apps/ocsp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ocsp.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/ocsp.c diff --git a/src/openssl/openssl-1.1.1w/apps/openssl-vms.cnf b/src/openssl/openssl-1.1.1w-chevah1/apps/openssl-vms.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/openssl-vms.cnf rename to src/openssl/openssl-1.1.1w-chevah1/apps/openssl-vms.cnf diff --git a/src/openssl/openssl-1.1.1w/apps/openssl.c b/src/openssl/openssl-1.1.1w-chevah1/apps/openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/openssl.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/openssl.c diff --git a/src/openssl/openssl-1.1.1w/apps/openssl.cnf b/src/openssl/openssl-1.1.1w-chevah1/apps/openssl.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/openssl.cnf rename to src/openssl/openssl-1.1.1w-chevah1/apps/openssl.cnf diff --git a/src/openssl/openssl-1.1.1w/apps/opt.c b/src/openssl/openssl-1.1.1w-chevah1/apps/opt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/opt.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/opt.c diff --git a/src/openssl/openssl-1.1.1w/apps/passwd.c b/src/openssl/openssl-1.1.1w-chevah1/apps/passwd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/passwd.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/passwd.c diff --git a/src/openssl/openssl-1.1.1w/apps/pca-cert.srl b/src/openssl/openssl-1.1.1w-chevah1/apps/pca-cert.srl similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pca-cert.srl rename to src/openssl/openssl-1.1.1w-chevah1/apps/pca-cert.srl diff --git a/src/openssl/openssl-1.1.1w/apps/pca-key.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/pca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pca-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/pca-key.pem diff --git a/src/openssl/openssl-1.1.1w/apps/pca-req.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/pca-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pca-req.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/pca-req.pem diff --git a/src/openssl/openssl-1.1.1w/apps/pkcs12.c b/src/openssl/openssl-1.1.1w-chevah1/apps/pkcs12.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pkcs12.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/pkcs12.c diff --git a/src/openssl/openssl-1.1.1w/apps/pkcs7.c b/src/openssl/openssl-1.1.1w-chevah1/apps/pkcs7.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pkcs7.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/pkcs7.c diff --git a/src/openssl/openssl-1.1.1w/apps/pkcs8.c b/src/openssl/openssl-1.1.1w-chevah1/apps/pkcs8.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pkcs8.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/pkcs8.c diff --git a/src/openssl/openssl-1.1.1w/apps/pkey.c b/src/openssl/openssl-1.1.1w-chevah1/apps/pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/pkey.c diff --git a/src/openssl/openssl-1.1.1w/apps/pkeyparam.c b/src/openssl/openssl-1.1.1w-chevah1/apps/pkeyparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pkeyparam.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/pkeyparam.c diff --git a/src/openssl/openssl-1.1.1w/apps/pkeyutl.c b/src/openssl/openssl-1.1.1w-chevah1/apps/pkeyutl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/pkeyutl.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/pkeyutl.c diff --git a/src/openssl/openssl-1.1.1w/apps/prime.c b/src/openssl/openssl-1.1.1w-chevah1/apps/prime.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/prime.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/prime.c diff --git a/src/openssl/openssl-1.1.1w/apps/privkey.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/privkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/privkey.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/privkey.pem diff --git a/src/openssl/openssl-1.1.1w/apps/progs.pl b/src/openssl/openssl-1.1.1w-chevah1/apps/progs.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/progs.pl rename to src/openssl/openssl-1.1.1w-chevah1/apps/progs.pl diff --git a/src/openssl/openssl-1.1.1w/apps/rand.c b/src/openssl/openssl-1.1.1w-chevah1/apps/rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/rand.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/rand.c diff --git a/src/openssl/openssl-1.1.1w/apps/rehash.c b/src/openssl/openssl-1.1.1w-chevah1/apps/rehash.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/rehash.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/rehash.c diff --git a/src/openssl/openssl-1.1.1w/apps/req.c b/src/openssl/openssl-1.1.1w-chevah1/apps/req.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/req.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/req.c diff --git a/src/openssl/openssl-1.1.1w/apps/req.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/req.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/req.pem diff --git a/src/openssl/openssl-1.1.1w/apps/rsa.c b/src/openssl/openssl-1.1.1w-chevah1/apps/rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/rsa.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/rsa.c diff --git a/src/openssl/openssl-1.1.1w/apps/rsa8192.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/rsa8192.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/rsa8192.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/rsa8192.pem diff --git a/src/openssl/openssl-1.1.1w/apps/rsautl.c b/src/openssl/openssl-1.1.1w-chevah1/apps/rsautl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/rsautl.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/rsautl.c diff --git a/src/openssl/openssl-1.1.1w/apps/s1024key.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/s1024key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s1024key.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/s1024key.pem diff --git a/src/openssl/openssl-1.1.1w/apps/s1024req.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/s1024req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s1024req.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/s1024req.pem diff --git a/src/openssl/openssl-1.1.1w/apps/s512-key.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/s512-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s512-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/s512-key.pem diff --git a/src/openssl/openssl-1.1.1w/apps/s512-req.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/s512-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s512-req.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/s512-req.pem diff --git a/src/openssl/openssl-1.1.1w/apps/s_apps.h b/src/openssl/openssl-1.1.1w-chevah1/apps/s_apps.h similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s_apps.h rename to src/openssl/openssl-1.1.1w-chevah1/apps/s_apps.h diff --git a/src/openssl/openssl-1.1.1w/apps/s_cb.c b/src/openssl/openssl-1.1.1w-chevah1/apps/s_cb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s_cb.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/s_cb.c diff --git a/src/openssl/openssl-1.1.1w/apps/s_client.c b/src/openssl/openssl-1.1.1w-chevah1/apps/s_client.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s_client.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/s_client.c diff --git a/src/openssl/openssl-1.1.1w/apps/s_server.c b/src/openssl/openssl-1.1.1w-chevah1/apps/s_server.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s_server.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/s_server.c diff --git a/src/openssl/openssl-1.1.1w/apps/s_socket.c b/src/openssl/openssl-1.1.1w-chevah1/apps/s_socket.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s_socket.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/s_socket.c diff --git a/src/openssl/openssl-1.1.1w/apps/s_time.c b/src/openssl/openssl-1.1.1w-chevah1/apps/s_time.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/s_time.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/s_time.c diff --git a/src/openssl/openssl-1.1.1w/apps/server.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/server.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/server.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/server.pem diff --git a/src/openssl/openssl-1.1.1w/apps/server.srl b/src/openssl/openssl-1.1.1w-chevah1/apps/server.srl similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/server.srl rename to src/openssl/openssl-1.1.1w-chevah1/apps/server.srl diff --git a/src/openssl/openssl-1.1.1w/apps/server2.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/server2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/server2.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/server2.pem diff --git a/src/openssl/openssl-1.1.1w/apps/sess_id.c b/src/openssl/openssl-1.1.1w-chevah1/apps/sess_id.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/sess_id.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/sess_id.c diff --git a/src/openssl/openssl-1.1.1w/apps/smime.c b/src/openssl/openssl-1.1.1w-chevah1/apps/smime.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/smime.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/smime.c diff --git a/src/openssl/openssl-1.1.1w/apps/speed.c b/src/openssl/openssl-1.1.1w-chevah1/apps/speed.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/speed.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/speed.c diff --git a/src/openssl/openssl-1.1.1w/apps/spkac.c b/src/openssl/openssl-1.1.1w-chevah1/apps/spkac.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/spkac.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/spkac.c diff --git a/src/openssl/openssl-1.1.1w/apps/srp.c b/src/openssl/openssl-1.1.1w-chevah1/apps/srp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/srp.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/srp.c diff --git a/src/openssl/openssl-1.1.1w/apps/storeutl.c b/src/openssl/openssl-1.1.1w-chevah1/apps/storeutl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/storeutl.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/storeutl.c diff --git a/src/openssl/openssl-1.1.1w/apps/testCA.pem b/src/openssl/openssl-1.1.1w-chevah1/apps/testCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/testCA.pem rename to src/openssl/openssl-1.1.1w-chevah1/apps/testCA.pem diff --git a/src/openssl/openssl-1.1.1w/apps/testdsa.h b/src/openssl/openssl-1.1.1w-chevah1/apps/testdsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/testdsa.h rename to src/openssl/openssl-1.1.1w-chevah1/apps/testdsa.h diff --git a/src/openssl/openssl-1.1.1w/apps/testrsa.h b/src/openssl/openssl-1.1.1w-chevah1/apps/testrsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/testrsa.h rename to src/openssl/openssl-1.1.1w-chevah1/apps/testrsa.h diff --git a/src/openssl/openssl-1.1.1w/apps/timeouts.h b/src/openssl/openssl-1.1.1w-chevah1/apps/timeouts.h similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/timeouts.h rename to src/openssl/openssl-1.1.1w-chevah1/apps/timeouts.h diff --git a/src/openssl/openssl-1.1.1w/apps/ts.c b/src/openssl/openssl-1.1.1w-chevah1/apps/ts.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/ts.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/ts.c diff --git a/src/openssl/openssl-1.1.1w/apps/tsget.in b/src/openssl/openssl-1.1.1w-chevah1/apps/tsget.in similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/tsget.in rename to src/openssl/openssl-1.1.1w-chevah1/apps/tsget.in diff --git a/src/openssl/openssl-1.1.1w/apps/verify.c b/src/openssl/openssl-1.1.1w-chevah1/apps/verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/verify.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/verify.c diff --git a/src/openssl/openssl-1.1.1w/apps/version.c b/src/openssl/openssl-1.1.1w-chevah1/apps/version.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/version.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/version.c diff --git a/src/openssl/openssl-1.1.1w/apps/vms_decc_argv.c b/src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_argv.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/vms_decc_argv.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_argv.c diff --git a/src/openssl/openssl-1.1.1w/apps/vms_decc_init.c b/src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/vms_decc_init.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_init.c diff --git a/src/openssl/openssl-1.1.1w/apps/vms_term_sock.c b/src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/vms_term_sock.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.c diff --git a/src/openssl/openssl-1.1.1w/apps/vms_term_sock.h b/src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.h similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/vms_term_sock.h rename to src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.h diff --git a/src/openssl/openssl-1.1.1w/apps/win32_init.c b/src/openssl/openssl-1.1.1w-chevah1/apps/win32_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/win32_init.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/win32_init.c diff --git a/src/openssl/openssl-1.1.1w/apps/x509.c b/src/openssl/openssl-1.1.1w-chevah1/apps/x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w/apps/x509.c rename to src/openssl/openssl-1.1.1w-chevah1/apps/x509.c diff --git a/src/openssl/openssl-1.1.1w/build.info b/src/openssl/openssl-1.1.1w-chevah1/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/build.info rename to src/openssl/openssl-1.1.1w-chevah1/build.info diff --git a/src/openssl/openssl-1.1.1w/config b/src/openssl/openssl-1.1.1w-chevah1/config similarity index 100% rename from src/openssl/openssl-1.1.1w/config rename to src/openssl/openssl-1.1.1w-chevah1/config diff --git a/src/openssl/openssl-1.1.1w/config.com b/src/openssl/openssl-1.1.1w-chevah1/config.com similarity index 100% rename from src/openssl/openssl-1.1.1w/config.com rename to src/openssl/openssl-1.1.1w-chevah1/config.com diff --git a/src/openssl/openssl-1.1.1w/crypto/LPdir_nyi.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_nyi.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/LPdir_nyi.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_nyi.c diff --git a/src/openssl/openssl-1.1.1w/crypto/LPdir_unix.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_unix.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/LPdir_unix.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_unix.c diff --git a/src/openssl/openssl-1.1.1w/crypto/LPdir_vms.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/LPdir_vms.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_vms.c diff --git a/src/openssl/openssl-1.1.1w/crypto/LPdir_win.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/LPdir_win.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win.c diff --git a/src/openssl/openssl-1.1.1w/crypto/LPdir_win32.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win32.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/LPdir_win32.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win32.c diff --git a/src/openssl/openssl-1.1.1w/crypto/LPdir_wince.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_wince.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/LPdir_wince.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_wince.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_cbc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_cbc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cbc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_cfb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_cfb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cfb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_core.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_core.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_core.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_core.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_ige.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ige.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_ige.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ige.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_misc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_misc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_misc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_misc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_ofb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_ofb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ofb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_wrap.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_wrap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_wrap.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_wrap.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/aes_x86core.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_x86core.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/aes_x86core.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_x86core.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ia64.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ia64.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ia64.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ia64.S diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-mips.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-mips.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-mips.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-parisc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-parisc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesfx-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesfx-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesfx-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesfx-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-mb-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha1-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha1-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha1-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha256-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha256-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha256-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesp8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesp8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesp8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aest4-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aest4-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aest4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesv8-armx.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/aesv8-armx.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesv8-armx.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/bsaes-armv7.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/bsaes-armv7.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/bsaes-armv7.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/bsaes-armv7.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aes/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aes/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aes/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/alphacpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/alphacpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/alphacpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/alphacpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/aria/aria.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/aria/aria.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aria/aria.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aria/aria.c diff --git a/src/openssl/openssl-1.1.1w/crypto/aria/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/aria/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/aria/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/aria/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/arm64cpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/arm64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/arm64cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/arm64cpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/arm_arch.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/arm_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/arm_arch.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/arm_arch.h diff --git a/src/openssl/openssl-1.1.1w/crypto/armcap.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/armcap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/armcap.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/armcap.c diff --git a/src/openssl/openssl-1.1.1w/crypto/armv4cpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/armv4cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/armv4cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/armv4cpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_bitstr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_bitstr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_bitstr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_bitstr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_d2i_fp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_d2i_fp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_d2i_fp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_d2i_fp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_digest.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_digest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_digest.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_digest.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_dup.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_dup.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_dup.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_dup.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_gentm.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_gentm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_gentm.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_gentm.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_i2d_fp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_i2d_fp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_i2d_fp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_i2d_fp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_int.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_int.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_int.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_int.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_mbstr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_mbstr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_mbstr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_mbstr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_object.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_object.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_object.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_object.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_octet.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_octet.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_octet.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_octet.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_print.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_print.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_print.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_strex.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strex.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_strex.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strex.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_strnid.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strnid.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_strnid.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strnid.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_time.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_time.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_time.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_time.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_type.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_type.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_type.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_type.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_utctm.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utctm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_utctm.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utctm.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_utf8.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utf8.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_utf8.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utf8.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/a_verify.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/a_verify.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_verify.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/ameth_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/ameth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/ameth_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/ameth_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_gen.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_gen.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_gen.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.h diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_par.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_par.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn1_par.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_par.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn_mime.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mime.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn_mime.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mime.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn_moid.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_moid.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn_moid.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_moid.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn_mstbl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mstbl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn_mstbl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mstbl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/asn_pack.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_pack.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/asn_pack.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_pack.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/bio_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/bio_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/bio_ndef.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_ndef.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/bio_ndef.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_ndef.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/charmap.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/charmap.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.h diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/charmap.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/charmap.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pu.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pu.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pu.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pu.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/evp_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/evp_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/evp_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/evp_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/f_int.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_int.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/f_int.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_int.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/f_string.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_string.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/f_string.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_string.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pu.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pu.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pu.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pu.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/n_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/n_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/n_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/n_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/nsseq.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/nsseq.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/nsseq.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/nsseq.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbe.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbe.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbe.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbe.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbev2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbev2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbev2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbev2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/p5_scrypt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/p5_scrypt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_scrypt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/p8_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p8_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/p8_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p8_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/standard_methods.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/standard_methods.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/standard_methods.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/standard_methods.h diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/t_bitst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_bitst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/t_bitst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_bitst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/t_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/t_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/t_spki.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_spki.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/t_spki.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_spki.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_dec.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_dec.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_dec.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_fre.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_fre.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_fre.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_fre.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_new.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_new.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_new.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_new.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_scn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_scn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_scn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_scn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_typ.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_typ.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_typ.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_typ.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_utl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tasn_utl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_utl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/tbl_standard.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tbl_standard.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/tbl_standard.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tbl_standard.h diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_algor.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_algor.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_algor.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_algor.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_bignum.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_bignum.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_bignum.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_bignum.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_info.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_info.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_info.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_info.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_int64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_int64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_int64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_int64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_long.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_long.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_long.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_long.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_sig.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_sig.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_sig.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_sig.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_spki.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_spki.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_spki.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_spki.c diff --git a/src/openssl/openssl-1.1.1w/crypto/asn1/x_val.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_val.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/asn1/x_val.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_val.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.h diff --git a/src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.h diff --git a/src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.h diff --git a/src/openssl/openssl-1.1.1w/crypto/async/async.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/async.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/async.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/async_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/async_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/async_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/async_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/async/async_wait.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_wait.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/async_wait.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_wait.c diff --git a/src/openssl/openssl-1.1.1w/crypto/async/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/async/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/async/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/async/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/asm/bf-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/asm/bf-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/asm/bf-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/asm/bf-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_cfb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_cfb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_cfb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_ofb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_ofb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ofb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_pi.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_pi.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_pi.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_pi.h diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/bf_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/bf_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bf/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bf/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bf/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/b_addr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_addr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/b_addr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_addr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/b_dump.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_dump.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/b_dump.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_dump.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/b_print.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/b_print.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_print.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/b_sock.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/b_sock.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/b_sock2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/b_sock2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bf_buff.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_buff.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bf_buff.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_buff.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bf_lbuf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_lbuf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bf_lbuf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_lbuf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bf_nbio.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_nbio.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bf_nbio.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_nbio.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bf_null.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bf_null.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_null.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bio_cb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_cb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bio_cb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_cb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bio_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bio_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bio_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bio_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bio_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bio_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bio_meth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bio_meth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_meth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_acpt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_acpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_acpt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_acpt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_bio.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_bio.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_bio.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_bio.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_conn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_conn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_conn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_conn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_dgram.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_dgram.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_dgram.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_dgram.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_fd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_fd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_fd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_fd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_file.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_file.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_file.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_file.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_log.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_log.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_log.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_log.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_mem.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_mem.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_mem.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_mem.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_null.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_null.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_null.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/bss_sock.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/bss_sock.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_sock.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bio/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bio/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bio/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/blake2_impl.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_impl.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/blake2_impl.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_impl.h diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/blake2_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/blake2_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/blake2b.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2b.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/blake2b.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2b.c diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/blake2s.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2s.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/blake2s.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2s.c diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2b.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2b.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2b.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2b.c diff --git a/src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2s.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2s.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2s.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2s.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/README.pod b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/README.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/README.pod rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/README.pod diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/alpha-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/alpha-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/alpha-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/alpha-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/armv8-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv8-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/armv8-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv8-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-c64xplus.asm b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-c64xplus.asm similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-c64xplus.asm rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-c64xplus.asm diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/c64xplus-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/c64xplus-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/c64xplus-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/c64xplus-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/co-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/co-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/co-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/co-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64.S diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/mips-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/mips-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/mips.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/mips.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/parisc-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/parisc-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/parisc-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/parisc-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc64-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc64-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc64-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-avx2.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-avx2.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-avx2.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-avx2.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x.S diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparct4-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparct4-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/sparct4-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparct4-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8.S diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8plus.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8plus.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8plus.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8plus.S diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9a-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9a-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9a-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9a-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/via-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/via-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/via-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/via-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/vis3-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/vis3-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/vis3-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/vis3-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gcc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gcc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gcc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gcc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont5.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont5.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont5.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont5.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_add.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_add.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_add.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_add.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_asm.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_asm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_asm.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_asm.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_blind.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_blind.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_blind.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_blind.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_const.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_const.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_const.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_const.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_ctx.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_ctx.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_ctx.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_depr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_depr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_depr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_dh.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_dh.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_dh.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_dh.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_div.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_div.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_div.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_div.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_exp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_exp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_exp2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_exp2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_gcd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gcd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_gcd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gcd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_gf2m.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gf2m.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_gf2m.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gf2m.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_intern.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_intern.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_intern.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_intern.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_kron.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_kron.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_kron.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_kron.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_mod.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mod.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_mod.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mod.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_mont.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mont.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_mont.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mont.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_mpi.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mpi.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_mpi.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mpi.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_mul.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mul.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_mul.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mul.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_nist.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_nist.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_nist.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_nist.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.h diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_print.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_print.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_print.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_rand.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_rand.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_rand.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_recp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_recp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_recp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_recp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_shift.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_shift.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_shift.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_shift.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_sqr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_sqr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_sqrt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqrt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_sqrt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqrt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_srp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_srp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_srp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_srp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_word.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_word.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_word.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_word.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/bn_x931p.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_x931p.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/bn_x931p.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_x931p.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.h diff --git a/src/openssl/openssl-1.1.1w/crypto/buffer/buf_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/buffer/buf_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buf_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/buffer/buffer.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buffer.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/buffer/buffer.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buffer.c diff --git a/src/openssl/openssl-1.1.1w/crypto/buffer/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/buffer/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/c64xpluscpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/c64xpluscpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/c64xpluscpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/c64xpluscpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmllt4-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmllt4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmllt4-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmllt4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/camellia.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/camellia.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/camellia.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/camellia.c diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cbc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cbc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cbc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cfb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cfb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cfb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ctr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ctr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ctr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ctr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_misc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_misc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_misc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_misc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ofb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ofb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ofb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/asm/cast-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/asm/cast-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/asm/cast-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/asm/cast-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/c_cfb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/c_cfb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_cfb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/c_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/c_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/c_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/c_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/c_ofb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/c_ofb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ofb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/c_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/c_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/cast_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/cast_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/cast/cast_s.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_s.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cast/cast_s.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_s.h diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/chacha/chacha_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/chacha_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/chacha/chacha_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/chacha_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cmac/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cmac/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/cmac/cm_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cmac/cm_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cmac/cm_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cmac/cm_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cmac/cmac.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cmac.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cmac/cmac.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cmac.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_att.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_att.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_att.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_att.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_cd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_cd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_cd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_cd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_dd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_dd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_dd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_dd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_env.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_env.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_env.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_env.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_ess.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_ess.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_ess.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_ess.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_io.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_io.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_io.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_io.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_kari.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_kari.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_kari.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_kari.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_pwri.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_pwri.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_pwri.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_pwri.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_sd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_sd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_sd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_sd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cms/cms_smime.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_smime.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cms/cms_smime.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_smime.c diff --git a/src/openssl/openssl-1.1.1w/crypto/comp/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/comp/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/comp/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/comp/c_zlib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/c_zlib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/comp/c_zlib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/comp/c_zlib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/comp/comp_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/comp/comp_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/comp/comp_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/comp/comp_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/comp/comp_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/comp/comp_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_api.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_api.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_api.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_api.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_def.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_def.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_def.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_def.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.h diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_mall.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mall.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_mall.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mall.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_mod.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mod.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_mod.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mod.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_sap.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_sap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_sap.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_sap.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/conf_ssl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/conf_ssl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_ssl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/conf/keysets.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/keysets.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/conf/keysets.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/conf/keysets.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/cpt_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cpt_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cpt_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cpt_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cryptlib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cryptlib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cryptlib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cryptlib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_b64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_b64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_b64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_b64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_log.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_log.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_log.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_log.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_oct.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_oct.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_oct.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_policy.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_policy.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_policy.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_policy.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_sct.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_sct.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_sct_ctx.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_sct_ctx.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct_ctx.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_vfy.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_vfy.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_vfy.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ct/ct_x509v3.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_x509v3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ct/ct_x509v3.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_x509v3.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ctype.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ctype.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ctype.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ctype.c diff --git a/src/openssl/openssl-1.1.1w/crypto/cversion.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/cversion.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/cversion.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/cversion.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/asm/crypt586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/crypt586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/asm/crypt586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/crypt586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/des/asm/des-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/asm/des-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/des/asm/des_enc.m4 b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des_enc.m4 similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/asm/des_enc.m4 rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des_enc.m4 diff --git a/src/openssl/openssl-1.1.1w/crypto/des/asm/desboth.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/desboth.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/asm/desboth.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/desboth.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/des/asm/dest4-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/dest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/asm/dest4-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/dest4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/des/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/des/cbc_cksm.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_cksm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/cbc_cksm.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_cksm.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/cbc_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/cbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/cfb64ede.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64ede.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/cfb64ede.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64ede.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/cfb64enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/cfb64enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/cfb_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/cfb_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/des_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/des_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/des_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/des_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/des/ecb3_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb3_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/ecb3_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb3_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/ecb_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/ecb_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/fcrypt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/fcrypt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/fcrypt_b.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt_b.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/fcrypt_b.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt_b.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/ncbc_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ncbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/ncbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/ncbc_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/ofb64ede.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64ede.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/ofb64ede.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64ede.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/ofb64enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/ofb64enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/ofb_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/ofb_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/pcbc_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/pcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/pcbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/pcbc_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/qud_cksm.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/qud_cksm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/qud_cksm.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/qud_cksm.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/rand_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/rand_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/rand_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/rand_key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/set_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/set_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/set_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/set_key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/spr.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/spr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/spr.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/spr.h diff --git a/src/openssl/openssl-1.1.1w/crypto/des/str2key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/str2key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/str2key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/str2key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/des/xcbc_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/des/xcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/des/xcbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/des/xcbc_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh1024.pem b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh1024.pem rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh1024.pem diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh192.pem b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh192.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh192.pem rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh192.pem diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh2048.pem b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh2048.pem rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh2048.pem diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh4096.pem b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh4096.pem rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh4096.pem diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh512.pem b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh512.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh512.pem rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh512.pem diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_check.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_check.c similarity index 93% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_check.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_check.c index ae1b03bc9..5e97861af 100644 --- a/src/openssl/openssl-1.1.1w/crypto/dh/dh_check.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_check.c @@ -202,6 +202,19 @@ int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) if (ctx == NULL) goto err; BN_CTX_start(ctx); + + /* Don't do any checks at all with an excessively large modulus */ + if (BN_num_bits(dh->p) > OPENSSL_DH_CHECK_MAX_MODULUS_BITS) { + DHerr(DH_F_DH_CHECK, DH_R_MODULUS_TOO_LARGE); + *ret = DH_MODULUS_TOO_LARGE | DH_CHECK_PUBKEY_INVALID; + goto err; + } + + if (dh->q != NULL && BN_ucmp(dh->p, dh->q) < 0) { + *ret |= DH_CHECK_INVALID_Q_VALUE | DH_CHECK_PUBKEY_INVALID; + goto out; + } + tmp = BN_CTX_get(ctx); if (tmp == NULL || !BN_set_word(tmp, 1)) goto err; @@ -220,6 +233,7 @@ int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) *ret |= DH_CHECK_PUBKEY_INVALID; } + out: ok = 1; err: BN_CTX_end(ctx); diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_depr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_depr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_depr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_err.c similarity index 98% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_err.c index 92800d3fc..b3b1e7a70 100644 --- a/src/openssl/openssl-1.1.1w/crypto/dh/dh_err.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_err.c @@ -82,6 +82,7 @@ static const ERR_STRING_DATA DH_str_reasons[] = { {ERR_PACK(ERR_LIB_DH, 0, DH_R_PARAMETER_ENCODING_ERROR), "parameter encoding error"}, {ERR_PACK(ERR_LIB_DH, 0, DH_R_PEER_KEY_ERROR), "peer key error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_Q_TOO_LARGE), "q too large"}, {ERR_PACK(ERR_LIB_DH, 0, DH_R_SHARED_INFO_ERROR), "shared info error"}, {ERR_PACK(ERR_LIB_DH, 0, DH_R_UNABLE_TO_CHECK_GENERATOR), "unable to check generator"}, diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_gen.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_gen.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_gen.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_kdf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_kdf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_kdf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_kdf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_key.c similarity index 95% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_key.c index 117f2fa88..c77ce1b09 100644 --- a/src/openssl/openssl-1.1.1w/crypto/dh/dh_key.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_key.c @@ -114,6 +114,12 @@ static int generate_key(DH *dh) return 0; } + if (dh->q != NULL + && BN_num_bits(dh->q) > OPENSSL_DH_MAX_MODULUS_BITS) { + DHerr(DH_F_GENERATE_KEY, DH_R_Q_TOO_LARGE); + return 0; + } + ctx = BN_CTX_new(); if (ctx == NULL) goto err; @@ -207,6 +213,12 @@ static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) goto err; } + if (dh->q != NULL + && BN_num_bits(dh->q) > OPENSSL_DH_MAX_MODULUS_BITS) { + DHerr(DH_F_COMPUTE_KEY, DH_R_Q_TOO_LARGE); + goto err; + } + ctx = BN_CTX_new(); if (ctx == NULL) goto err; diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_meth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_meth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_meth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc5114.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc5114.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc5114.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc5114.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc7919.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc7919.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc7919.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc7919.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dllmain.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dllmain.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dllmain.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dllmain.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_depr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_depr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_depr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_gen.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_gen.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_gen.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_meth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_meth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_meth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ossl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ossl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ossl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_vrf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dsa/dsa_vrf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_vrf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_dl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_dl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_dlfcn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dlfcn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_dlfcn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dlfcn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_openssl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_openssl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_openssl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_vms.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_vms.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_vms.c diff --git a/src/openssl/openssl-1.1.1w/crypto/dso/dso_win32.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_win32.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/dso/dso_win32.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_win32.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ebcdic.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ebcdic.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ebcdic.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ebcdic.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-ppc64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-ppc64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-ppc64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-ppc64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-ppc64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-ppc64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve25519.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve25519.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve25519.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve25519.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/arch_intrinsics.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/arch_intrinsics.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/arch_intrinsics.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/arch_intrinsics.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_tables.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_tables.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_tables.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_tables.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448utils.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448utils.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448utils.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448utils.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/ed448.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/ed448.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/ed448.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/ed448.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/eddsa.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/eddsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/eddsa.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/eddsa.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/f_generic.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/f_generic.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/f_generic.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/f_generic.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/field.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/field.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/field.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/field.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/point_448.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/point_448.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/point_448.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/point_448.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/scalar.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/scalar.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/scalar.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/scalar.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/curve448/word.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/word.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/curve448/word.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/word.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec2_oct.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec2_oct.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_oct.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec2_smpl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_smpl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec2_smpl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_smpl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_check.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_check.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_check.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_check.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_curve.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_curve.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_curve.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_curve.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_cvt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_cvt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_cvt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_cvt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_kmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_kmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_kmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_kmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_mult.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_mult.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_mult.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_mult.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_oct.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_oct.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_oct.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ec_print.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ec_print.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_print.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecdh_kdf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_kdf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecdh_kdf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_kdf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecdh_ossl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecdh_ossl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_ossl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_ossl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_ossl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_ossl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_vrf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_vrf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_vrf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/eck_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/eck_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/eck_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/eck_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_mont.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_mont.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_mont.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_mont.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nist.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nist.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nist.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nist.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp224.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp224.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp224.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp224.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp256.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp256.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp256.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp256.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp521.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp521.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp521.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp521.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistputil.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistputil.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistputil.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistputil.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256_table.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256_table.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256_table.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256_table.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_oct.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_oct.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_oct.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecp_smpl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_smpl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecp_smpl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_smpl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ec/ecx_meth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecx_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ec/ecx_meth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecx_meth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/README b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/README similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/README rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/README diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_all.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_all.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_all.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_cnf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_cnf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_cnf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_cnf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_ctrl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_ctrl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_ctrl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_ctrl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_devcrypto.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_devcrypto.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_devcrypto.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_devcrypto.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_dyn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_dyn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_dyn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_dyn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_fat.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_fat.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_fat.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_fat.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_init.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_init.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_init.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_list.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_list.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_list.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_list.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_openssl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_openssl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_openssl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_rdrand.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_rdrand.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_rdrand.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_rdrand.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/eng_table.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_table.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/eng_table.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_table.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_asnmth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_asnmth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_asnmth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_asnmth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_cipher.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_cipher.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_cipher.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_cipher.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_dh.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dh.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_dh.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dh.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_digest.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_digest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_digest.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_digest.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_dsa.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_dsa.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dsa.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_eckey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_eckey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_eckey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_eckey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_pkmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_pkmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_pkmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_pkmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_rand.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_rand.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rand.c diff --git a/src/openssl/openssl-1.1.1w/crypto/engine/tb_rsa.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/engine/tb_rsa.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rsa.c diff --git a/src/openssl/openssl-1.1.1w/crypto/err/README b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/README similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/err/README rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/README diff --git a/src/openssl/openssl-1.1.1w/crypto/err/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/err/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/err/err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/err/err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/err/err_all.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/err/err_all.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_all.c diff --git a/src/openssl/openssl-1.1.1w/crypto/err/err_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/err/err_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/err/openssl.ec b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.ec similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/err/openssl.ec rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.ec diff --git a/src/openssl/openssl-1.1.1w/crypto/err/openssl.txt b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.txt similarity index 99% rename from src/openssl/openssl-1.1.1w/crypto/err/openssl.txt rename to src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.txt index c0a3cd720..5e0ff4751 100644 --- a/src/openssl/openssl-1.1.1w/crypto/err/openssl.txt +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.txt @@ -2106,6 +2106,7 @@ DH_R_NO_PARAMETERS_SET:107:no parameters set DH_R_NO_PRIVATE_VALUE:100:no private value DH_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error DH_R_PEER_KEY_ERROR:111:peer key error +DH_R_Q_TOO_LARGE:130:q too large DH_R_SHARED_INFO_ERROR:113:shared info error DH_R_UNABLE_TO_CHECK_GENERATOR:121:unable to check generator DSA_R_BAD_Q_VALUE:102:bad q value diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/bio_b64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_b64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/bio_b64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_b64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/bio_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/bio_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/bio_md.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_md.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/bio_md.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_md.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/bio_ok.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_ok.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/bio_ok.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_ok.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/c_allc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_allc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/c_allc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_allc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/c_alld.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_alld.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/c_alld.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_alld.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/cmeth_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/cmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/cmeth_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/cmeth_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/digest.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/digest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/digest.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/digest.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_aes.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_aes.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha256.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha256.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha256.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha256.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_aria.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aria.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_aria.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aria.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_bf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_bf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_bf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_bf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_camellia.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_camellia.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_camellia.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_camellia.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_cast.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_cast.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_cast.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_cast.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_chacha20_poly1305.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_chacha20_poly1305.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_chacha20_poly1305.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_chacha20_poly1305.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_des.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_des.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_des3.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_des3.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des3.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_idea.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_idea.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_idea.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_idea.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_null.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_null.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_null.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_old.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_old.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_old.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_old.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_rc2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_rc2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_rc4.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_rc4.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_rc4_hmac_md5.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4_hmac_md5.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_rc4_hmac_md5.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4_hmac_md5.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_rc5.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc5.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_rc5.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc5.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_seed.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_seed.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_seed.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_seed.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_sm4.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_sm4.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_sm4.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_sm4.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/e_xcbc_d.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_xcbc_d.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/e_xcbc_d.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_xcbc_d.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/encode.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/encode.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/encode.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/encode.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_cnf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_cnf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_cnf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_cnf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_pbe.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pbe.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_pbe.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pbe.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/evp_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/evp_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_md2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_md2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_md4.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md4.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_md4.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md4.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_md5.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_md5.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_md5_sha1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_md5_sha1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5_sha1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_mdc2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_mdc2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_mdc2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_mdc2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_null.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_null.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_null.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_ripemd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_ripemd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_ripemd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_ripemd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_sha1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_sha1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_sha3.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_sha3.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha3.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_sigver.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sigver.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_sigver.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sigver.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/m_wp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_wp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/m_wp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_wp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/names.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/names.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/names.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/names.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_dec.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_dec.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_dec.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_open.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_open.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_open.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_open.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_seal.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_seal.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_seal.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_seal.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/p_verify.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/p_verify.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_verify.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/pbe_scrypt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pbe_scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/pbe_scrypt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pbe_scrypt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/pmeth_fn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_fn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/pmeth_fn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_fn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/pmeth_gn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_gn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/pmeth_gn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_gn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/evp/pmeth_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/evp/pmeth_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ex_data.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ex_data.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ex_data.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ex_data.c diff --git a/src/openssl/openssl-1.1.1w/crypto/getenv.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/getenv.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/getenv.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/getenv.c diff --git a/src/openssl/openssl-1.1.1w/crypto/hmac/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/hmac/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/hmac/hm_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/hmac/hm_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/hmac/hm_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/hmac/hm_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/hmac/hmac.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/hmac/hmac.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac.c diff --git a/src/openssl/openssl-1.1.1w/crypto/hmac/hmac_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/hmac/hmac_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ia64cpuid.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/ia64cpuid.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ia64cpuid.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ia64cpuid.S diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/i_cbc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/i_cbc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cbc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/i_cfb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/i_cfb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cfb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/i_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/i_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/i_ofb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/i_ofb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ofb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/i_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/i_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/idea/idea_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/idea_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/idea/idea_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/idea/idea_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/init.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/init.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/init.c diff --git a/src/openssl/openssl-1.1.1w/crypto/kdf/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/kdf/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/kdf/hkdf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/hkdf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/kdf/hkdf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/hkdf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/kdf/kdf_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/kdf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/kdf/kdf_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/kdf_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/kdf/scrypt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/kdf/scrypt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/scrypt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/kdf/tls1_prf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/tls1_prf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/kdf/tls1_prf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/tls1_prf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/lhash/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/lhash/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/lhash/lh_stats.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lh_stats.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/lhash/lh_stats.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lh_stats.c diff --git a/src/openssl/openssl-1.1.1w/crypto/lhash/lhash.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/lhash/lhash.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash.c diff --git a/src/openssl/openssl-1.1.1w/crypto/lhash/lhash_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/lhash/lhash_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/md2/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/md2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md2/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md2/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/md2/md2_dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md2/md2_dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/md2/md2_one.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md2/md2_one.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_one.c diff --git a/src/openssl/openssl-1.1.1w/crypto/md4/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md4/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md4/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/md4/md4_dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md4/md4_dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/md4/md4_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md4/md4_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/md4/md4_one.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md4/md4_one.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_one.c diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/md5_dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/md5_dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/md5_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/md5_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/md5/md5_one.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/md5/md5_one.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_one.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mdc2/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mdc2/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2_one.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2_one.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2_one.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mem.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/mem.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mem.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mem.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mem_clr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/mem_clr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mem_clr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mem_clr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mem_dbg.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/mem_dbg.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mem_dbg.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mem_dbg.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mem_sec.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/mem_sec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mem_sec.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mem_sec.c diff --git a/src/openssl/openssl-1.1.1w/crypto/mips_arch.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/mips_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/mips_arch.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/mips_arch.h diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/aesni-gcm-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/aesni-gcm-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/aesni-gcm-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/aesni-gcm-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-alpha.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-alpha.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-alpha.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-alpha.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-ia64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-ia64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-parisc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-parisc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashp8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashp8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashp8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashv8-armx.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashv8-armx.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashv8-armx.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/cbc128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cbc128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/cbc128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cbc128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/ccm128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ccm128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/ccm128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ccm128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/cfb128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cfb128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/cfb128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cfb128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/ctr128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ctr128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/ctr128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ctr128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/cts128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cts128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/cts128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cts128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/gcm128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/gcm128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/gcm128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/gcm128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/modes_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/modes_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/modes_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/modes_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/ocb128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ocb128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/ocb128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ocb128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/ofb128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ofb128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/ofb128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ofb128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/wrap128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/wrap128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/wrap128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/wrap128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/modes/xts128.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/xts128.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/modes/xts128.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/modes/xts128.c diff --git a/src/openssl/openssl-1.1.1w/crypto/o_dir.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/o_dir.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/o_dir.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/o_dir.c diff --git a/src/openssl/openssl-1.1.1w/crypto/o_fips.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/o_fips.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/o_fips.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/o_fips.c diff --git a/src/openssl/openssl-1.1.1w/crypto/o_fopen.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/o_fopen.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/o_fopen.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/o_fopen.c diff --git a/src/openssl/openssl-1.1.1w/crypto/o_init.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/o_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/o_init.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/o_init.c diff --git a/src/openssl/openssl-1.1.1w/crypto/o_str.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/o_str.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/o_str.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/o_str.c diff --git a/src/openssl/openssl-1.1.1w/crypto/o_time.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/o_time.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/o_time.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/o_time.c diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/README b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/README similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/README rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/README diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/o_names.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/o_names.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/o_names.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/o_names.c diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.c diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.h diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_mac.num b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_mac.num similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_mac.num rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_mac.num diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.c diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.h diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.txt b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.txt rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.txt diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/objects.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/objects.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/objects.txt b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/objects.txt rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.txt diff --git a/src/openssl/openssl-1.1.1w/crypto/objects/objxref.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objxref.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/objects/objxref.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objxref.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_asn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_asn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_asn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_asn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_cl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_cl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_cl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_cl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ext.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ext.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ext.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ext.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ht.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ht.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ht.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ht.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_srv.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_srv.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_srv.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_srv.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_vfy.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_vfy.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_vfy.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ocsp/v3_ocsp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/v3_ocsp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ocsp/v3_ocsp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/v3_ocsp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pariscid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/pariscid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pariscid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pariscid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_all.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_all.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_all.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_info.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_info.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_info.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_info.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_oth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_oth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_oth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_oth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_pk8.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pk8.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_pk8.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pk8.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_pkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_pkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_x509.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_x509.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_x509.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pem_xaux.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_xaux.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pem_xaux.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_xaux.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pem/pvkfmt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pvkfmt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pem/pvkfmt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pvkfmt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/README b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/README similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/README rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/README diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/arm-xlate.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/arm-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/arm-xlate.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/arm-xlate.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/cbc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/cbc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/cbc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/cbc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/ppc-xlate.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/ppc-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/ppc-xlate.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/ppc-xlate.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/sparcv9_modes.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/sparcv9_modes.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/sparcv9_modes.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/sparcv9_modes.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/x86_64-xlate.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86_64-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/x86_64-xlate.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86_64-xlate.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/x86asm.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86asm.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/x86asm.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86asm.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/x86gas.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86gas.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/x86gas.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86gas.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/x86masm.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86masm.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/x86masm.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86masm.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/perlasm/x86nasm.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86nasm.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/perlasm/x86nasm.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86nasm.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_add.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_add.c similarity index 91% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_add.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_add.c index af184c86a..39f70198f 100644 --- a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_add.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_add.c @@ -76,6 +76,13 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7) PKCS12_R_CONTENT_TYPE_NOT_DATA); return NULL; } + + if (p7->d.data == NULL) { + PKCS12err(PKCS12_F_PKCS12_UNPACK_P7DATA, + PKCS12_R_DECODE_ERROR); + return NULL; + } + return ASN1_item_unpack(p7->d.data, ASN1_ITEM_rptr(PKCS12_SAFEBAGS)); } @@ -132,6 +139,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, { if (!PKCS7_type_is_encrypted(p7)) return NULL; + + if (p7->d.encrypted == NULL) { + PKCS12err(PKCS12_F_PKCS12_UNPACK_P7DATA, PKCS12_R_DECODE_ERROR); + return NULL; + } + return PKCS12_item_decrypt_d2i(p7->d.encrypted->enc_data->algorithm, ASN1_ITEM_rptr(PKCS12_SAFEBAGS), pass, passlen, @@ -159,6 +172,13 @@ STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12) PKCS12_R_CONTENT_TYPE_NOT_DATA); return NULL; } + + if (p12->authsafes->d.data == NULL) { + PKCS12err(PKCS12_F_PKCS12_UNPACK_AUTHSAFES, + PKCS12_R_DECODE_ERROR); + return NULL; + } + return ASN1_item_unpack(p12->authsafes->d.data, ASN1_ITEM_rptr(PKCS12_AUTHSAFES)); } diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_asn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_asn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_asn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_asn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_attr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_attr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_attr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_attr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crpt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crpt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crpt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_decr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_decr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_decr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_decr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_init.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_init.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_init.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_key.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_key.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_key.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_kiss.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_kiss.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_kiss.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_kiss.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_mutl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_mutl.c similarity index 98% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_mutl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_mutl.c index 3658003fe..766c9c1e9 100644 --- a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_mutl.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_mutl.c @@ -93,6 +93,11 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen, return 0; } + if (p12->authsafes->d.data == NULL) { + PKCS12err(PKCS12_F_PKCS12_GEN_MAC, PKCS12_R_DECODE_ERROR); + return 0; + } + salt = p12->mac->salt->data; saltlen = p12->mac->salt->length; if (!p12->mac->iter) diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_npas.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_npas.c similarity index 96% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_npas.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_npas.c index 0334289a8..130337638 100644 --- a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_npas.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_npas.c @@ -78,8 +78,9 @@ static int newpass_p12(PKCS12 *p12, const char *oldpass, const char *newpass) bags = PKCS12_unpack_p7data(p7); } else if (bagnid == NID_pkcs7_encrypted) { bags = PKCS12_unpack_p7encdata(p7, oldpass, -1); - if (!alg_get(p7->d.encrypted->enc_data->algorithm, - &pbe_nid, &pbe_iter, &pbe_saltlen)) + if (p7->d.encrypted == NULL + || !alg_get(p7->d.encrypted->enc_data->algorithm, + &pbe_nid, &pbe_iter, &pbe_saltlen)) goto err; } else { continue; diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8d.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8d.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8d.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8d.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8e.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8e.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8e.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8e.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_sbag.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_sbag.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_sbag.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_sbag.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_utl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_utl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_utl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs12/pk12err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/pk12err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs12/pk12err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/pk12err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/bio_pk7.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/bio_pk7.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/bio_pk7.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/bio_pk7.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_attr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_attr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_attr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_attr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_doit.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_doit.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_doit.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_doit.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_mime.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_mime.c similarity index 92% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_mime.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_mime.c index 19e686814..0ecfd5df8 100644 --- a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_mime.c +++ b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_mime.c @@ -30,10 +30,13 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags) { STACK_OF(X509_ALGOR) *mdalgs; int ctype_nid = OBJ_obj2nid(p7->type); - if (ctype_nid == NID_pkcs7_signed) + if (ctype_nid == NID_pkcs7_signed) { + if (p7->d.sign == NULL) + return 0; mdalgs = p7->d.sign->md_algs; - else + } else { mdalgs = NULL; + } flags ^= SMIME_OLDMIME; diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_smime.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_smime.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_smime.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_smime.c diff --git a/src/openssl/openssl-1.1.1w/crypto/pkcs7/pkcs7err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pkcs7err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/pkcs7/pkcs7err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pkcs7err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-mips.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-mips.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-mips.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppcfp.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppcfp.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppcfp.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppcfp.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305.c diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_base2_44.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_base2_44.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_base2_44.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_base2_44.c diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ieee754.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ieee754.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ieee754.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ieee754.c diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ppc_arch.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ppc_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ppc_arch.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ppc_arch.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ppccap.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ppccap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ppccap.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ppccap.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ppccpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ppccpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ppccpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ppccpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/drbg_ctr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_ctr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/drbg_ctr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_ctr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/drbg_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/drbg_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_egd.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_egd.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_egd.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_egd.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_unix.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_unix.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_unix.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_unix.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_vms.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_vms.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_vms.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/rand_win.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/rand_win.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_win.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rand/randfile.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/randfile.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rand/randfile.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rand/randfile.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_cbc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/rc2_cbc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_cbc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/rc2_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/rc2_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/rc2_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/rc2cfb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/rc2cfb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2cfb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc2/rc2ofb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc2/rc2ofb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2ofb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-md5-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-md5-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-md5-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-parisc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-parisc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/rc4_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/rc4_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/rc4_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/rc4_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/rc4/rc4_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc4/rc4_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/asm/rc5-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/asm/rc5-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/asm/rc5-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/asm/rc5-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/rc5_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_enc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/rc5_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_enc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/rc5_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/rc5_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/rc5cfb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/rc5cfb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5cfb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rc5/rc5ofb64.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rc5/rc5ofb64.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5ofb64.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ripemd/asm/rmd-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/asm/rmd-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ripemd/asm/rmd-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/asm/rmd-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/ripemd/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ripemd/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_one.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_one.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_one.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ripemd/rmdconst.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmdconst.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ripemd/rmdconst.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmdconst.h diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_chk.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_chk.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_chk.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_chk.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_crpt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_crpt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_crpt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_depr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_depr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_depr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_gen.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_gen.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_gen.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_meth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_meth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_meth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_mp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_mp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_mp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_mp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_none.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_none.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_none.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_none.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_oaep.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_oaep.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_oaep.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_oaep.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ossl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ossl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ossl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pk1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pk1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pk1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pk1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pss.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pss.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pss.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pss.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_saos.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_saos.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_saos.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_saos.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ssl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ssl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ssl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931.c diff --git a/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931g.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931g.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931g.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931g.c diff --git a/src/openssl/openssl-1.1.1w/crypto/s390x_arch.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/s390x_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/s390x_arch.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/s390x_arch.h diff --git a/src/openssl/openssl-1.1.1w/crypto/s390xcap.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/s390xcap.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcap.c diff --git a/src/openssl/openssl-1.1.1w/crypto/s390xcpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/s390xcpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/seed.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/seed.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed.c diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/seed_cbc.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/seed_cbc.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cbc.c diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/seed_cfb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/seed_cfb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cfb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/seed_ecb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/seed_ecb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ecb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/seed_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/seed_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/seed/seed_ofb.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/seed/seed_ofb.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ofb.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx2.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx2.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx2.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx2.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512vl.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512vl.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512vl.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512vl.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-c64x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-c64x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-c64x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-c64x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-mmx.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-mmx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-mmx.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-mmx.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-ppc64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-ppc64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-ppc64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600p8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600p8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600p8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-alpha.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-alpha.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-alpha.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-alpha.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv4-large.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv4-large.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv4-large.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv4-large.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ia64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ia64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mb-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mips.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mips.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mips.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-parisc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-parisc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9a.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9a.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9a.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9a.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-thumb.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-thumb.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-thumb.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-thumb.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-mb-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-586.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-586.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-586.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv4.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv4.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv8.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv8.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ia64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ia64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-mips.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-mips.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-mips.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-parisc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-parisc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-s390x.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-s390x.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512p8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512p8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512p8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/keccak1600.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/keccak1600.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/keccak1600.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/keccak1600.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/sha1_one.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/sha1_one.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1_one.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/sha1dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/sha1dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/sha256.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha256.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/sha256.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha256.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/sha512.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha512.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/sha512.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha512.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sha/sha_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sha/sha_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/siphash/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/siphash/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/siphash/siphash.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/siphash/siphash.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash.c diff --git a/src/openssl/openssl-1.1.1w/crypto/siphash/siphash_ameth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/siphash/siphash_ameth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_ameth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/siphash/siphash_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/siphash/siphash_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/siphash/siphash_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/siphash/siphash_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm2/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm2/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_crypt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_crypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm2/sm2_crypt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_crypt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm2/sm2_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_pmeth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm2/sm2_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_pmeth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm2/sm2_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm3/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm3/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/sm3/m_sm3.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/m_sm3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm3/m_sm3.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/m_sm3.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm3/sm3.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm3/sm3.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sm3/sm3_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm3/sm3_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/sm4/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm4/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/sm4/sm4.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/sm4.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sm4/sm4.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/sm4.c diff --git a/src/openssl/openssl-1.1.1w/crypto/sparc_arch.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/sparc_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sparc_arch.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sparc_arch.h diff --git a/src/openssl/openssl-1.1.1w/crypto/sparccpuid.S b/src/openssl/openssl-1.1.1w-chevah1/crypto/sparccpuid.S similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sparccpuid.S rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sparccpuid.S diff --git a/src/openssl/openssl-1.1.1w/crypto/sparcv9cap.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/sparcv9cap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/sparcv9cap.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/sparcv9cap.c diff --git a/src/openssl/openssl-1.1.1w/crypto/srp/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/srp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/srp/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/srp/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/srp/srp_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/srp/srp_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/srp/srp_vfy.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/srp/srp_vfy.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_vfy.c diff --git a/src/openssl/openssl-1.1.1w/crypto/stack/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/stack/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/stack/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/stack/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/stack/stack.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/stack/stack.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/stack/stack.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/stack/stack.c diff --git a/src/openssl/openssl-1.1.1w/crypto/store/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/store/loader_file.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/loader_file.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/loader_file.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/loader_file.c diff --git a/src/openssl/openssl-1.1.1w/crypto/store/store_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/store_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/store/store_init.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/store_init.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_init.c diff --git a/src/openssl/openssl-1.1.1w/crypto/store/store_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/store_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/store/store_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/store_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/store/store_register.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_register.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/store_register.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_register.c diff --git a/src/openssl/openssl-1.1.1w/crypto/store/store_strings.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_strings.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/store/store_strings.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_strings.c diff --git a/src/openssl/openssl-1.1.1w/crypto/threads_none.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/threads_none.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/threads_none.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/threads_none.c diff --git a/src/openssl/openssl-1.1.1w/crypto/threads_pthread.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/threads_pthread.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/threads_pthread.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/threads_pthread.c diff --git a/src/openssl/openssl-1.1.1w/crypto/threads_win.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/threads_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/threads_win.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/threads_win.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_asn1.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_conf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_conf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_conf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_req_print.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_req_print.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_print.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_req_utils.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_utils.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_req_utils.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_utils.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_print.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_print.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_print.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_sign.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_sign.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_utils.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_utils.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_utils.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_utils.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_verify.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_verify.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_verify.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ts/ts_verify_ctx.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_verify_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ts/ts_verify_ctx.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_verify_ctx.c diff --git a/src/openssl/openssl-1.1.1w/crypto/txt_db/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/txt_db/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/txt_db/txt_db.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/txt_db.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/txt_db/txt_db.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/txt_db.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/ui_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/ui_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/ui_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/ui_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/ui_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/ui_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/ui_null.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/ui_null.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_null.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/ui_openssl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/ui_openssl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_openssl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/ui/ui_util.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_util.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/ui/ui_util.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_util.c diff --git a/src/openssl/openssl-1.1.1w/crypto/uid.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/uid.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/uid.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/uid.c diff --git a/src/openssl/openssl-1.1.1w/crypto/vms_rms.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/vms_rms.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/vms_rms.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/vms_rms.h diff --git a/src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-mmx.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-mmx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-mmx.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-mmx.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/whrlpool/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/whrlpool/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_block.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_block.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_block.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_block.c diff --git a/src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_dgst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_dgst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_dgst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/by_dir.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_dir.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/by_dir.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_dir.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/by_file.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_file.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/by_file.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_file.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/t_crl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/t_crl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_crl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/t_req.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_req.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/t_req.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_req.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/t_x509.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/t_x509.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_x509.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_att.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_att.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_att.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_att.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_cmp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_cmp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_cmp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_cmp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_d2.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_d2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_d2.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_d2.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_def.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_def.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_def.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_def.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_ext.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_ext.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_ext.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_ext.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_lu.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_lu.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_lu.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_lu.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_meth.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_meth.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_meth.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_obj.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_obj.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_obj.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_obj.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_r2x.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_r2x.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_r2x.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_r2x.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_req.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_req.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_req.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_req.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_set.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_set.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_set.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_set.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_trs.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_trs.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_trs.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_trs.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_txt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_txt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_txt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_txt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_v3.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_v3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_v3.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_v3.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_vfy.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_vfy.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vfy.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509_vpm.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vpm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509_vpm.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vpm.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509cset.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509cset.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509cset.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509cset.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509name.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509name.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509name.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509name.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509rset.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509rset.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509rset.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509rset.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509spki.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509spki.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509spki.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509spki.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x509type.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509type.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x509type.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509type.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_all.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_all.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_all.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_attrib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_attrib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_attrib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_attrib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_crl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_crl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_crl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_exten.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_exten.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_exten.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_exten.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_name.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_name.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_name.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_name.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_pubkey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_pubkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_pubkey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_pubkey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_req.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_req.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_req.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_req.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_x509.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_x509.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509/x_x509a.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509a.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509/x_x509a.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509a.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/build.info b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/build.info rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/build.info diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/ext_dat.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/ext_dat.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/ext_dat.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/ext_dat.h diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_cache.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_cache.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_cache.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_cache.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_data.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_data.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_data.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_data.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_local.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_local.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_local.h diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_map.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_map.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_map.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_map.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_node.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_node.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_node.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_node.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_tree.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_tree.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_tree.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_tree.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/standard_exts.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/standard_exts.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/standard_exts.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/standard_exts.h diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_addr.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_addr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_addr.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_addr.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.h b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.h similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.h rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.h diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akeya.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akeya.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akeya.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akeya.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_alt.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_alt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_alt.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_alt.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_asid.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_asid.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_asid.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_asid.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bcons.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bcons.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bcons.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bcons.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bitst.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bitst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bitst.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bitst.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_conf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_conf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_conf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_cpols.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_cpols.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_cpols.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_cpols.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_crld.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_crld.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_crld.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_crld.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_enum.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_enum.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_enum.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_enum.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_extku.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_extku.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_extku.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_extku.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_genn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_genn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_genn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_genn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ia5.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ia5.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ia5.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ia5.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_info.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_info.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_info.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_info.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_int.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_int.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_int.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_int.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_lib.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_lib.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ncons.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ncons.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ncons.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ncons.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pci.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pci.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pci.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pci.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcia.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcia.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcia.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcia.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcons.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcons.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcons.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcons.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pku.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pku.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pku.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pku.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pmaps.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pmaps.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pmaps.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pmaps.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_prn.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_prn.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_prn.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_purp.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_purp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_purp.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_purp.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_skey.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_skey.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_skey.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_sxnet.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_sxnet.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_sxnet.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_sxnet.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_tlsf.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_tlsf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_tlsf.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_tlsf.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_utl.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3_utl.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_utl.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x509v3/v3err.c b/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x509v3/v3err.c rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3err.c diff --git a/src/openssl/openssl-1.1.1w/crypto/x86_64cpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/x86_64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x86_64cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x86_64cpuid.pl diff --git a/src/openssl/openssl-1.1.1w/crypto/x86cpuid.pl b/src/openssl/openssl-1.1.1w-chevah1/crypto/x86cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/crypto/x86cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah1/crypto/x86cpuid.pl diff --git a/src/openssl/openssl-1.1.1w/demos/README b/src/openssl/openssl-1.1.1w-chevah1/demos/README similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/README rename to src/openssl/openssl-1.1.1w-chevah1/demos/README diff --git a/src/openssl/openssl-1.1.1w/demos/bio/Makefile b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/Makefile similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/Makefile rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/Makefile diff --git a/src/openssl/openssl-1.1.1w/demos/bio/README b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/README similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/README rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/README diff --git a/src/openssl/openssl-1.1.1w/demos/bio/accept.cnf b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/accept.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/accept.cnf rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/accept.cnf diff --git a/src/openssl/openssl-1.1.1w/demos/bio/client-arg.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-arg.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/client-arg.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-arg.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/client-conf.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/client-conf.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-conf.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/cmod.cnf b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/cmod.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/cmod.cnf rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/cmod.cnf diff --git a/src/openssl/openssl-1.1.1w/demos/bio/connect.cnf b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/connect.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/connect.cnf rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/connect.cnf diff --git a/src/openssl/openssl-1.1.1w/demos/bio/descrip.mms b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/descrip.mms similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/descrip.mms rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/descrip.mms diff --git a/src/openssl/openssl-1.1.1w/demos/bio/intca.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/intca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/intca.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/intca.pem diff --git a/src/openssl/openssl-1.1.1w/demos/bio/root.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/root.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/root.pem diff --git a/src/openssl/openssl-1.1.1w/demos/bio/saccept.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/saccept.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/saccept.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/saccept.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/sconnect.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/sconnect.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/sconnect.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/sconnect.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/server-arg.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-arg.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/server-arg.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-arg.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/server-cmod.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-cmod.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/server-cmod.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-cmod.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/server-conf.c b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/server-conf.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-conf.c diff --git a/src/openssl/openssl-1.1.1w/demos/bio/server-ec.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-ec.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/server-ec.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-ec.pem diff --git a/src/openssl/openssl-1.1.1w/demos/bio/server.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/server.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/server.pem diff --git a/src/openssl/openssl-1.1.1w/demos/bio/shared.opt b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/shared.opt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/shared.opt rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/shared.opt diff --git a/src/openssl/openssl-1.1.1w/demos/bio/static.opt b/src/openssl/openssl-1.1.1w-chevah1/demos/bio/static.opt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/bio/static.opt rename to src/openssl/openssl-1.1.1w-chevah1/demos/bio/static.opt diff --git a/src/openssl/openssl-1.1.1w/demos/certs/README b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/README similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/README rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/README diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/apps.cnf b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/apps.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/apps.cnf rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/apps.cnf diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/ckey.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/ckey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/ckey.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/ckey.pem diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/intkey.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/intkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/intkey.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/intkey.pem diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/mkacerts.sh b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkacerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/mkacerts.sh rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkacerts.sh diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/mkxcerts.sh b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkxcerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/mkxcerts.sh rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkxcerts.sh diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/rootkey.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/rootkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/rootkey.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/rootkey.pem diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/skey.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/skey.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey.pem diff --git a/src/openssl/openssl-1.1.1w/demos/certs/apps/skey2.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/apps/skey2.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey2.pem diff --git a/src/openssl/openssl-1.1.1w/demos/certs/ca.cnf b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/ca.cnf rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/ca.cnf diff --git a/src/openssl/openssl-1.1.1w/demos/certs/mkcerts.sh b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/mkcerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/mkcerts.sh rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/mkcerts.sh diff --git a/src/openssl/openssl-1.1.1w/demos/certs/ocspquery.sh b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocspquery.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/ocspquery.sh rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocspquery.sh diff --git a/src/openssl/openssl-1.1.1w/demos/certs/ocsprun.sh b/src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocsprun.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/certs/ocsprun.sh rename to src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocsprun.sh diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cacert.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cacert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cacert.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cacert.pem diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cakey.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cakey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cakey.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cakey.pem diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_comp.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_comp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_comp.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_comp.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_ddec.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ddec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_ddec.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ddec.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_dec.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_dec.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_dec.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_denc.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_denc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_denc.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_denc.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_enc.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_enc.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_sign.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_sign.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_sign2.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_sign2.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign2.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_uncomp.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_uncomp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_uncomp.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_uncomp.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/cms_ver.c b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ver.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/cms_ver.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ver.c diff --git a/src/openssl/openssl-1.1.1w/demos/cms/comp.txt b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/comp.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/comp.txt rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/comp.txt diff --git a/src/openssl/openssl-1.1.1w/demos/cms/encr.txt b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/encr.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/encr.txt rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/encr.txt diff --git a/src/openssl/openssl-1.1.1w/demos/cms/sign.txt b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/sign.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/sign.txt rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/sign.txt diff --git a/src/openssl/openssl-1.1.1w/demos/cms/signer.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/signer.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer.pem diff --git a/src/openssl/openssl-1.1.1w/demos/cms/signer2.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/cms/signer2.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer2.pem diff --git a/src/openssl/openssl-1.1.1w/demos/engines/e_chil.txt b/src/openssl/openssl-1.1.1w-chevah1/demos/engines/e_chil.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/engines/e_chil.txt rename to src/openssl/openssl-1.1.1w-chevah1/demos/engines/e_chil.txt diff --git a/src/openssl/openssl-1.1.1w/demos/evp/Makefile b/src/openssl/openssl-1.1.1w-chevah1/demos/evp/Makefile similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/evp/Makefile rename to src/openssl/openssl-1.1.1w-chevah1/demos/evp/Makefile diff --git a/src/openssl/openssl-1.1.1w/demos/evp/aesccm.c b/src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesccm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/evp/aesccm.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesccm.c diff --git a/src/openssl/openssl-1.1.1w/demos/evp/aesgcm.c b/src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesgcm.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/evp/aesgcm.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesgcm.c diff --git a/src/openssl/openssl-1.1.1w/demos/pkcs12/pkread.c b/src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkread.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/pkcs12/pkread.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkread.c diff --git a/src/openssl/openssl-1.1.1w/demos/pkcs12/pkwrite.c b/src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkwrite.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/pkcs12/pkwrite.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkwrite.c diff --git a/src/openssl/openssl-1.1.1w/demos/smime/cacert.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/cacert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/cacert.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/cacert.pem diff --git a/src/openssl/openssl-1.1.1w/demos/smime/cakey.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/cakey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/cakey.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/cakey.pem diff --git a/src/openssl/openssl-1.1.1w/demos/smime/encr.txt b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/encr.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/encr.txt rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/encr.txt diff --git a/src/openssl/openssl-1.1.1w/demos/smime/sign.txt b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/sign.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/sign.txt rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/sign.txt diff --git a/src/openssl/openssl-1.1.1w/demos/smime/signer.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/signer.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer.pem diff --git a/src/openssl/openssl-1.1.1w/demos/smime/signer2.pem b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/signer2.pem rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer2.pem diff --git a/src/openssl/openssl-1.1.1w/demos/smime/smdec.c b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smdec.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/smdec.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/smdec.c diff --git a/src/openssl/openssl-1.1.1w/demos/smime/smenc.c b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smenc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/smenc.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/smenc.c diff --git a/src/openssl/openssl-1.1.1w/demos/smime/smsign.c b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/smsign.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign.c diff --git a/src/openssl/openssl-1.1.1w/demos/smime/smsign2.c b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign2.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/smsign2.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign2.c diff --git a/src/openssl/openssl-1.1.1w/demos/smime/smver.c b/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smver.c similarity index 100% rename from src/openssl/openssl-1.1.1w/demos/smime/smver.c rename to src/openssl/openssl-1.1.1w-chevah1/demos/smime/smver.c diff --git a/src/openssl/openssl-1.1.1w/doc/HOWTO/certificates.txt b/src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/certificates.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/HOWTO/certificates.txt rename to src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/certificates.txt diff --git a/src/openssl/openssl-1.1.1w/doc/HOWTO/keys.txt b/src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/keys.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/HOWTO/keys.txt rename to src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/keys.txt diff --git a/src/openssl/openssl-1.1.1w/doc/README b/src/openssl/openssl-1.1.1w-chevah1/doc/README similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/README rename to src/openssl/openssl-1.1.1w-chevah1/doc/README diff --git a/src/openssl/openssl-1.1.1w/doc/dir-locals.example.el b/src/openssl/openssl-1.1.1w-chevah1/doc/dir-locals.example.el similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/dir-locals.example.el rename to src/openssl/openssl-1.1.1w-chevah1/doc/dir-locals.example.el diff --git a/src/openssl/openssl-1.1.1w/doc/fingerprints.txt b/src/openssl/openssl-1.1.1w-chevah1/doc/fingerprints.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/fingerprints.txt rename to src/openssl/openssl-1.1.1w-chevah1/doc/fingerprints.txt diff --git a/src/openssl/openssl-1.1.1w/doc/man1/CA.pl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/CA.pl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/CA.pl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/CA.pl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/asn1parse.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/asn1parse.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/asn1parse.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/asn1parse.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/ca.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ca.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/ca.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/ca.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/ciphers.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ciphers.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/ciphers.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/ciphers.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/cms.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/cms.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/cms.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/cms.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/crl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/crl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/crl2pkcs7.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl2pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/crl2pkcs7.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl2pkcs7.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/dgst.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dgst.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/dgst.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/dgst.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/dhparam.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dhparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/dhparam.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/dhparam.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/dsa.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/dsa.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsa.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/dsaparam.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsaparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/dsaparam.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsaparam.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/ec.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ec.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/ec.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/ec.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/ecparam.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ecparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/ecparam.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/ecparam.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/enc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/enc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/enc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/enc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/engine.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/engine.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/engine.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/engine.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/errstr.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/errstr.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/errstr.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/errstr.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/gendsa.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/gendsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/gendsa.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/gendsa.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/genpkey.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/genpkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/genpkey.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/genpkey.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/genrsa.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/genrsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/genrsa.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/genrsa.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/list.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/list.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/list.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/nseq.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/nseq.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/nseq.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/nseq.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/ocsp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ocsp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/ocsp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/ocsp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/openssl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/openssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/openssl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/openssl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/passwd.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/passwd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/passwd.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/passwd.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/pkcs12.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs12.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/pkcs12.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs12.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/pkcs7.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/pkcs7.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs7.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/pkcs8.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs8.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/pkcs8.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs8.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/pkey.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/pkey.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkey.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/pkeyparam.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/pkeyparam.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyparam.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/pkeyutl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyutl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/pkeyutl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyutl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/prime.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/prime.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/prime.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/prime.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/rand.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rand.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/rand.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/rand.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/rehash.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rehash.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/rehash.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/rehash.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/req.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/req.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/req.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/req.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/rsa.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/rsa.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsa.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/rsautl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsautl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/rsautl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsautl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/s_client.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_client.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/s_client.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_client.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/s_server.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_server.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/s_server.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_server.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/s_time.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/s_time.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_time.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/sess_id.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/sess_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/sess_id.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/sess_id.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/smime.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/smime.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/smime.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/smime.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/speed.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/speed.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/speed.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/speed.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/spkac.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/spkac.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/spkac.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/spkac.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/srp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/srp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/srp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/srp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/storeutl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/storeutl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/storeutl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/storeutl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/ts.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ts.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/ts.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/ts.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/tsget.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/tsget.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/tsget.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/tsget.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/verify.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/verify.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/verify.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/version.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/version.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/version.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man1/x509.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man1/x509.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man1/x509.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man1/x509.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ADMISSIONS.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ADMISSIONS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ADMISSIONS.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ADMISSIONS.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_INTEGER_get_int64.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_INTEGER_get_int64.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_INTEGER_get_int64.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_INTEGER_get_int64.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_ITEM_lookup.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_ITEM_lookup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_ITEM_lookup.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_ITEM_lookup.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_OBJECT_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_OBJECT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_OBJECT_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_OBJECT_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_TABLE_add.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_TABLE_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_TABLE_add.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_TABLE_add.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_length.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_length.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_length.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_length.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_print_ex.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_print_ex.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_print_ex.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_TIME_set.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TIME_set.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_TIME_set.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TIME_set.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_TYPE_get.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TYPE_get.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_TYPE_get.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TYPE_get.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASN1_generate_nconf.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_generate_nconf.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASN1_generate_nconf.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_generate_nconf.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASYNC_WAIT_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_WAIT_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASYNC_WAIT_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_WAIT_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ASYNC_start_job.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_start_job.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ASYNC_start_job.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_start_job.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BF_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BF_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BF_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BF_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDR.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDR.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDR.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDR.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDRINFO.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDRINFO.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDRINFO.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDRINFO.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_connect.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_connect.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_connect.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_ctrl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_ctrl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ctrl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_base64.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_base64.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_f_base64.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_base64.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_buffer.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_buffer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_f_buffer.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_buffer.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_cipher.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_f_cipher.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_cipher.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_md.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_f_md.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_md.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_null.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_null.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_f_null.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_null.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_ssl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_f_ssl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_ssl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_find_type.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_find_type.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_find_type.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_find_type.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_get_data.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_get_data.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_data.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_get_ex_new_index.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_get_ex_new_index.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_new_CMS.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_new_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new_CMS.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_parse_hostserv.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_parse_hostserv.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_parse_hostserv.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_parse_hostserv.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_printf.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_printf.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_printf.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_printf.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_push.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_push.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_push.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_push.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_read.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_read.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_read.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_accept.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_accept.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_accept.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_accept.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_bio.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_bio.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_bio.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_connect.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_connect.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_connect.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_fd.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_fd.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_fd.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_file.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_file.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_file.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_mem.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_mem.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_mem.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_mem.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_null.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_null.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_null.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_null.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_socket.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_socket.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_s_socket.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_socket.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_set_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_set_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_set_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_set_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BIO_should_retry.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_should_retry.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BIO_should_retry.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_should_retry.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_BLINDING_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_BLINDING_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_BLINDING_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_BLINDING_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_start.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_start.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_start.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_start.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_add.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_add.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_add_word.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add_word.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_add_word.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add_word.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_bn2bin.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_bn2bin.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_bn2bin.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_bn2bin.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_cmp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_cmp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_cmp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_copy.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_copy.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_copy.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_copy.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_generate_prime.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_generate_prime.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_generate_prime.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_generate_prime.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_mod_inverse.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_inverse.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_mod_inverse.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_inverse.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_montgomery.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_montgomery.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_montgomery.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_montgomery.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_reciprocal.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_reciprocal.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_reciprocal.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_reciprocal.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_num_bytes.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_num_bytes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_num_bytes.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_num_bytes.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_rand.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_rand.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_rand.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_rand.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_security_bits.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_security_bits.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_security_bits.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_security_bits.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_set_bit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_set_bit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_set_bit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_set_bit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_swap.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_swap.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_swap.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_swap.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BN_zero.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_zero.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BN_zero.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_zero.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/BUF_MEM_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BUF_MEM_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/BUF_MEM_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/BUF_MEM_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_add0_cert.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add0_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_add0_cert.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add0_cert.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_recipient_cert.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_recipient_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_recipient_cert.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_recipient_cert.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_signer.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_signer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_signer.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_signer.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_compress.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_compress.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_compress.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_compress.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_decrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_decrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_decrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_final.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_final.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_final.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_final.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_RecipientInfos.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_RecipientInfos.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_RecipientInfos.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_RecipientInfos.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_SignerInfos.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_SignerInfos.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_SignerInfos.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_SignerInfos.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_type.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_type.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_type.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_type.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_get1_ReceiptRequest.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get1_ReceiptRequest.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_get1_ReceiptRequest.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get1_ReceiptRequest.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_sign_receipt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign_receipt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_sign_receipt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign_receipt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_uncompress.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_uncompress.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_uncompress.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_uncompress.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_verify.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_verify.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CMS_verify_receipt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify_receipt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CMS_verify_receipt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify_receipt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_free.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_free.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_free.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_load_file.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_load_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_load_file.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_load_file.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_THREAD_run_once.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_THREAD_run_once.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_THREAD_run_once.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_THREAD_run_once.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_get_ex_new_index.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_get_ex_new_index.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_memcmp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_memcmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_memcmp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_memcmp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_get0_log_by_id.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_get0_log_by_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_get0_log_by_id.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_get0_log_by_id.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CTLOG_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CTLOG_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/CT_POLICY_EVAL_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CT_POLICY_EVAL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/CT_POLICY_EVAL_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/CT_POLICY_EVAL_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DEFINE_STACK_OF.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DEFINE_STACK_OF.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DEFINE_STACK_OF.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DEFINE_STACK_OF.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DES_random_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DES_random_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DES_random_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DES_random_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_generate_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_generate_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_generate_parameters.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_generate_parameters.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_parameters.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_get0_pqg.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get0_pqg.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_get0_pqg.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get0_pqg.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_get_1024_160.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get_1024_160.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_get_1024_160.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get_1024_160.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_new_by_nid.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new_by_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_new_by_nid.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new_by_nid.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_set_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_set_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_set_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DH_size.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DH_size.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_size.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_SIG_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_SIG_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_SIG_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_do_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_do_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_do_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_do_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_dup_DH.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_dup_DH.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_dup_DH.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_dup_DH.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_parameters.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_parameters.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_parameters.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_get0_pqg.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_get0_pqg.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_get0_pqg.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_get0_pqg.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_set_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_set_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_set_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DSA_size.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DSA_size.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_size.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DTLS_get_data_mtu.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_get_data_mtu.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DTLS_get_data_mtu.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_get_data_mtu.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DTLS_set_timer_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_set_timer_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DTLS_set_timer_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_set_timer_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/DTLSv1_listen.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLSv1_listen.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/DTLSv1_listen.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLSv1_listen.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ECDSA_SIG_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECDSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ECDSA_SIG_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECDSA_SIG_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ECPKParameters_print.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECPKParameters_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ECPKParameters_print.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECPKParameters_print.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_GFp_simple_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GFp_simple_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_GFp_simple_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GFp_simple_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_copy.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_copy.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_copy.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_copy.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_get_enc_flags.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_get_enc_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_get_enc_flags.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_get_enc_flags.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_add.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_add.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_add.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ENGINE_add.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ENGINE_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ENGINE_add.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ENGINE_add.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_GET_LIB.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_GET_LIB.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_GET_LIB.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_GET_LIB.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_clear_error.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_clear_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_clear_error.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_clear_error.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_error_string.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_error_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_error_string.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_error_string.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_get_error.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_get_error.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_get_error.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_load_crypto_strings.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_crypto_strings.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_load_crypto_strings.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_crypto_strings.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_load_strings.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_strings.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_load_strings.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_strings.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_print_errors.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_print_errors.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_print_errors.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_print_errors.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_put_error.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_put_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_put_error.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_put_error.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_remove_state.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_remove_state.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_remove_state.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_remove_state.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/ERR_set_mark.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_set_mark.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/ERR_set_mark.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_set_mark.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_BytesToKey.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_BytesToKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_BytesToKey.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_BytesToKey.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestSignInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestSignInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestSignInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestSignInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestVerifyInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestVerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestVerifyInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestVerifyInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_EncodeInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncodeInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_EncodeInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncodeInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_EncryptInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncryptInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_EncryptInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncryptInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_MD_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_MD_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_MD_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_MD_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_OpenInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_OpenInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_OpenInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_OpenInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_ASN1_METHOD.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_ASN1_METHOD.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_ASN1_METHOD.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_ASN1_METHOD.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_ctrl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_ctrl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_asn1_get_count.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_asn1_get_count.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_asn1_get_count.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_asn1_get_count.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_cmp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_cmp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_cmp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_decrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_decrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_decrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_derive.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_derive.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_derive.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_derive.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_get_default_digest_nid.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_get_default_digest_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_get_default_digest_nid.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_get_default_digest_nid.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_keygen.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_keygen.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_keygen.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_keygen.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_get_count.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_get_count.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_get_count.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_get_count.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_print_private.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_print_private.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_print_private.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_print_private.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_set1_RSA.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_set1_RSA.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_set1_RSA.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_set1_RSA.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_size.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_size.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_size.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify_recover.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify_recover.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify_recover.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify_recover.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_SealInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SealInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_SealInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SealInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_SignInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SignInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_SignInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SignInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_VerifyInit.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_VerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_VerifyInit.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_VerifyInit.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_aes.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_aes.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aes.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_aria.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aria.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_aria.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aria.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_bf_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_bf_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_bf_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_bf_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_blake2b512.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_blake2b512.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_blake2b512.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_blake2b512.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_camellia.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_camellia.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_camellia.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_camellia.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_cast5_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_cast5_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_cast5_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_cast5_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_chacha20.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_chacha20.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_chacha20.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_chacha20.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_des.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_des.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_des.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_des.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_desx_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_desx_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_desx_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_desx_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_idea_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_idea_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_idea_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_idea_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_md2.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md2.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_md2.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md2.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_md4.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md4.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_md4.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md4.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_md5.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md5.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_md5.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md5.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_mdc2.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_mdc2.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_mdc2.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_mdc2.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_rc2_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc2_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_rc2_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc2_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_rc4.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc4.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_rc4.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc4.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_rc5_32_12_16_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc5_32_12_16_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_rc5_32_12_16_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc5_32_12_16_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_ripemd160.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_ripemd160.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_ripemd160.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_ripemd160.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_seed_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_seed_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_seed_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_seed_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_sha1.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha1.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_sha1.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha1.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_sha224.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha224.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_sha224.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha224.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_sha3_224.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha3_224.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_sha3_224.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha3_224.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_sm3.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm3.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_sm3.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm3.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_sm4_cbc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm4_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_sm4_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm4_cbc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/EVP_whirlpool.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_whirlpool.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/EVP_whirlpool.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_whirlpool.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/HMAC.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/HMAC.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/HMAC.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/HMAC.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/MD5.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/MD5.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/MD5.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/MD5.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/MDC2_Init.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/MDC2_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/MDC2_Init.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/MDC2_Init.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OBJ_nid2obj.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OBJ_nid2obj.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OBJ_nid2obj.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OBJ_nid2obj.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OCSP_REQUEST_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_REQUEST_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OCSP_REQUEST_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_REQUEST_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OCSP_cert_to_id.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_cert_to_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OCSP_cert_to_id.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_cert_to_id.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OCSP_request_add1_nonce.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_request_add1_nonce.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OCSP_request_add1_nonce.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_request_add1_nonce.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OCSP_resp_find_status.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_resp_find_status.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OCSP_resp_find_status.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_resp_find_status.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OCSP_response_status.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_response_status.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OCSP_response_status.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_response_status.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OCSP_sendreq_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_sendreq_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OCSP_sendreq_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_sendreq_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_Applink.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_Applink.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_Applink.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_Applink.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_COMPFUNC.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_COMPFUNC.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_COMPFUNC.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_COMPFUNC.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_stats.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_stats.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_stats.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_stats.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_VERSION_NUMBER.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_VERSION_NUMBER.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_VERSION_NUMBER.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_VERSION_NUMBER.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_config.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_config.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_config.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_fork_prepare.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_fork_prepare.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_fork_prepare.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_fork_prepare.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_ia32cap.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_ia32cap.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_ia32cap.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_ia32cap.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_crypto.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_crypto.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_crypto.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_crypto.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_ssl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_ssl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_ssl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_instrument_bus.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_instrument_bus.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_instrument_bus.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_instrument_bus.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_load_builtin_modules.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_load_builtin_modules.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_load_builtin_modules.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_load_builtin_modules.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_malloc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_malloc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_malloc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_malloc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_secure_malloc.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_secure_malloc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_secure_malloc.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_secure_malloc.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_INFO.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_INFO.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_INFO.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_INFO.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_LOADER.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_LOADER.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_LOADER.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_LOADER.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_SEARCH.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_SEARCH.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_SEARCH.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_SEARCH.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_expect.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_expect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_expect.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_expect.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_open.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_open.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_open.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_open.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/OpenSSL_add_all_algorithms.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OpenSSL_add_all_algorithms.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/OpenSSL_add_all_algorithms.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/OpenSSL_add_all_algorithms.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_bytes_read_bio.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_bytes_read_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_bytes_read_bio.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_bytes_read_bio.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_read.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_read.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_read_CMS.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_read_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_CMS.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_PrivateKey.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_PrivateKey.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_PrivateKey.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_ex.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_ex.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_ex.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_CMS_stream.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_CMS_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_CMS_stream.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_CMS_stream.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_PKCS7_stream.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_PKCS7_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_PKCS7_stream.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_PKCS7_stream.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS12_create.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_create.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS12_create.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_create.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS12_newpass.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_newpass.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS12_newpass.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_newpass.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS12_parse.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_parse.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS12_parse.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_parse.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS5_PBKDF2_HMAC.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS5_PBKDF2_HMAC.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS5_PBKDF2_HMAC.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS5_PBKDF2_HMAC.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_decrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS7_decrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_decrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS7_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign_add_signer.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign_add_signer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign_add_signer.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign_add_signer.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_verify.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/PKCS7_verify.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_verify.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_generate.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_generate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_generate.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_generate.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_get0_master.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_get0_master.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_get0_master.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_get0_master.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_reseed.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_reseed.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_reseed.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_reseed.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_callbacks.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_callbacks.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_callbacks.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_callbacks.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_ex_data.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_ex_data.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_ex_data.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_add.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_add.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_add.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_bytes.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_bytes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_bytes.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_bytes.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_cleanup.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_cleanup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_cleanup.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_cleanup.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_egd.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_egd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_egd.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_egd.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_load_file.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_load_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_load_file.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_load_file.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RAND_set_rand_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_set_rand_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RAND_set_rand_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_set_rand_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RC4_set_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RC4_set_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RC4_set_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RC4_set_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RIPEMD160_Init.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RIPEMD160_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RIPEMD160_Init.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RIPEMD160_Init.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_blinding_on.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_blinding_on.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_blinding_on.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_blinding_on.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_check_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_check_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_check_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_check_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_generate_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_generate_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_generate_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_get0_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_get0_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_get0_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_get0_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_padding_add_PKCS1_type_1.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_padding_add_PKCS1_type_1.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_padding_add_PKCS1_type_1.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_padding_add_PKCS1_type_1.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_print.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_print.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_print.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_private_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_private_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_private_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_private_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_public_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_public_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_public_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_public_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_set_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_set_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_set_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/RSA_size.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/RSA_size.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_size.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SCT_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SCT_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SCT_print.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SCT_print.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_print.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SCT_validate.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_validate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SCT_validate.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_validate.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SHA256_Init.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SHA256_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SHA256_Init.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SHA256_Init.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_CMS.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_CMS.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_PKCS7.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_PKCS7.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_PKCS7.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_CMS.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_CMS.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_PKCS7.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_PKCS7.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_PKCS7.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CIPHER_get_name.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CIPHER_get_name.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CIPHER_get_name.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CIPHER_get_name.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_COMP_add_compression_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_COMP_add_compression_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_COMP_add_compression_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_COMP_add_compression_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set1_prefix.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set1_prefix.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set1_prefix.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set1_prefix.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_flags.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_flags.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_flags.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd_argv.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd_argv.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd_argv.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd_argv.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add1_chain_cert.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add1_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add1_chain_cert.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add1_chain_cert.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_extra_chain_cert.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_extra_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_extra_chain_cert.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_extra_chain_cert.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_session.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_session.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_session.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_config.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_config.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_config.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_ctrl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_ctrl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_dane_enable.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_dane_enable.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_dane_enable.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_dane_enable.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_flush_sessions.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_flush_sessions.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_flush_sessions.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_flush_sessions.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_free.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_free.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_free.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get0_param.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get0_param.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get0_param.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get_verify_mode.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get_verify_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get_verify_mode.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get_verify_mode.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_has_client_custom_ext.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_has_client_custom_ext.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_has_client_custom_ext.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_has_client_custom_ext.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_load_verify_locations.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_load_verify_locations.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_load_verify_locations.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_load_verify_locations.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_number.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_number.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_number.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_number.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_cache_size.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_cache_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_cache_size.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_cache_size.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_get_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_get_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_get_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_get_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sessions.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sessions.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sessions.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sessions.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set0_CA_list.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set0_CA_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set0_CA_list.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set0_CA_list.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_curves.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_curves.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_curves.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_curves.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_sigalgs.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_sigalgs.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_sigalgs.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_sigalgs.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_verify_cert_store.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_verify_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_verify_cert_store.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_verify_cert_store.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_alpn_select_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_alpn_select_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_alpn_select_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_alpn_select_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_store.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_store.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_store.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_verify_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_verify_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_verify_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_verify_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cipher_list.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cipher_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cipher_list.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cipher_list.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_cert_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_cert_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_cert_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_hello_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_hello_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_hello_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_hello_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ct_validation_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ct_validation_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ct_validation_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ct_validation_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ctlog_list_file.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ctlog_list_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ctlog_list_file.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ctlog_list_file.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_default_passwd_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_default_passwd_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_default_passwd_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_default_passwd_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ex_data.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ex_data.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ex_data.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_generate_session_id.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_generate_session_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_generate_session_id.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_generate_session_id.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_info_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_info_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_info_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_info_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_keylog_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_keylog_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_keylog_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_keylog_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_max_cert_list.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_max_cert_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_max_cert_list.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_max_cert_list.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_min_proto_version.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_min_proto_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_min_proto_version.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_min_proto_version.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_mode.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_mode.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_mode.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_msg_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_msg_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_msg_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_msg_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_num_tickets.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_num_tickets.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_num_tickets.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_num_tickets.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_options.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_options.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_options.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_options.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_psk_client_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_psk_client_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_psk_client_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_psk_client_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_quiet_shutdown.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_quiet_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_quiet_shutdown.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_quiet_shutdown.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_read_ahead.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_read_ahead.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_read_ahead.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_read_ahead.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_record_padding_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_record_padding_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_record_padding_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_record_padding_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_security_level.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_security_level.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_security_level.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_security_level.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_cache_mode.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_cache_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_cache_mode.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_cache_mode.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_id_context.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_id_context.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_id_context.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_id_context.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_ticket_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_ticket_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_ticket_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_ticket_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_split_send_fragment.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_split_send_fragment.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_split_send_fragment.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_split_send_fragment.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ssl_version.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ssl_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ssl_version.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ssl_version.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_timeout.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_timeout.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_timeout.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_timeout.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_status_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_status_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_status_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_status_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tmp_dh_callback.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tmp_dh_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tmp_dh_callback.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tmp_dh_callback.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_verify.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_verify.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_verify.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_certificate.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_certificate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_certificate.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_certificate.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_psk_identity_hint.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_psk_identity_hint.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_psk_identity_hint.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_psk_identity_hint.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_serverinfo.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_serverinfo.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_serverinfo.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_serverinfo.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_free.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_free.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_free.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_cipher.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_cipher.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_cipher.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_hostname.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_hostname.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_hostname.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_hostname.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_id_context.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_id_context.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_id_context.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_id_context.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_peer.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_peer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_peer.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_peer.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_compress_id.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_compress_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_compress_id.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_compress_id.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_ex_data.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_ex_data.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_ex_data.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_protocol_version.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_protocol_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_protocol_version.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_protocol_version.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_time.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_time.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_time.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_has_ticket.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_has_ticket.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_has_ticket.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_has_ticket.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_is_resumable.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_is_resumable.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_is_resumable.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_is_resumable.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_print.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_print.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_print.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_set1_id.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_set1_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_set1_id.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_set1_id.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_accept.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_accept.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_accept.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_accept.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_alert_type_string.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alert_type_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_alert_type_string.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alert_type_string.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_alloc_buffers.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alloc_buffers.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_alloc_buffers.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alloc_buffers.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_check_chain.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_check_chain.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_check_chain.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_check_chain.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_clear.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_clear.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_clear.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_clear.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_connect.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_connect.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_connect.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_do_handshake.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_do_handshake.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_do_handshake.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_do_handshake.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_export_keying_material.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_export_keying_material.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_export_keying_material.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_export_keying_material.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_extension_supported.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_extension_supported.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_extension_supported.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_extension_supported.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_free.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_free.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_free.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get0_peer_scts.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get0_peer_scts.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get0_peer_scts.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get0_peer_scts.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_SSL_CTX.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_SSL_CTX.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_SSL_CTX.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_SSL_CTX.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_all_async_fds.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_all_async_fds.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_all_async_fds.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_all_async_fds.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_ciphers.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_ciphers.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_ciphers.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_ciphers.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_client_random.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_client_random.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_client_random.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_client_random.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_current_cipher.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_current_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_current_cipher.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_current_cipher.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_default_timeout.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_default_timeout.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_default_timeout.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_default_timeout.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_error.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_error.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_error.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_extms_support.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_extms_support.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_extms_support.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_extms_support.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_fd.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_fd.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_fd.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_cert_chain.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_cert_chain.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_cert_chain.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_cert_chain.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_certificate.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_certificate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_certificate.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_certificate.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_signature_nid.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_signature_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_signature_nid.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_signature_nid.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_tmp_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_tmp_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_tmp_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_tmp_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_psk_identity.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_psk_identity.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_psk_identity.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_psk_identity.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_rbio.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_rbio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_rbio.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_rbio.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_session.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_session.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_session.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_shared_sigalgs.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_shared_sigalgs.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_shared_sigalgs.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_shared_sigalgs.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_verify_result.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_verify_result.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_verify_result.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_version.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_get_version.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_version.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_in_init.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_in_init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_in_init.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_in_init.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_key_update.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_key_update.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_key_update.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_key_update.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_library_init.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_library_init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_library_init.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_library_init.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_load_client_CA_file.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_load_client_CA_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_load_client_CA_file.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_load_client_CA_file.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_pending.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_pending.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_pending.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_pending.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_read.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_read.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_read_early_data.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read_early_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_read_early_data.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read_early_data.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_rstate_string.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_rstate_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_rstate_string.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_rstate_string.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_session_reused.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_session_reused.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_session_reused.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_session_reused.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set1_host.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set1_host.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set1_host.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set1_host.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_bio.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set_bio.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_bio.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_connect_state.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_connect_state.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set_connect_state.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_connect_state.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_fd.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set_fd.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_fd.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_session.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set_session.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_session.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_shutdown.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set_shutdown.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_shutdown.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_verify_result.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_set_verify_result.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_verify_result.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_shutdown.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_shutdown.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_shutdown.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_state_string.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_state_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_state_string.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_state_string.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_want.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_want.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_want.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_want.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/SSL_write.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_write.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/SSL_write.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_write.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/UI_STRING.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_STRING.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/UI_STRING.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_STRING.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/UI_UTIL_read_pw.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_UTIL_read_pw.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/UI_UTIL_read_pw.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_UTIL_read_pw.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/UI_create_method.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_create_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/UI_create_method.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_create_method.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/UI_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/UI_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509V3_get_d2i.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509V3_get_d2i.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509V3_get_d2i.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509V3_get_d2i.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_ALGOR_dup.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_ALGOR_dup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_ALGOR_dup.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_ALGOR_dup.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_CRL_get0_by_serial.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_CRL_get0_by_serial.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_CRL_get0_by_serial.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_CRL_get0_by_serial.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_EXTENSION_set_object.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_EXTENSION_set_object.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_EXTENSION_set_object.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_EXTENSION_set_object.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_hash_dir.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_hash_dir.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_hash_dir.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_hash_dir.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_ENTRY_get_object.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_ENTRY_get_object.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_ENTRY_get_object.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_ENTRY_get_object.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_add_entry_by_txt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_add_entry_by_txt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_add_entry_by_txt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_add_entry_by_txt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get0_der.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get0_der.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get0_der.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get0_der.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get_index_by_NID.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get_index_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get_index_by_NID.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get_index_by_NID.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_print_ex.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_print_ex.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_print_ex.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_PUBKEY_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_PUBKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_PUBKEY_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_PUBKEY_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_SIG_get0.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_SIG_get0.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_SIG_get0.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_SIG_get0.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_get_error.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_get_error.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_get_error.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_set_verify_cb.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_set_verify_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_set_verify_cb.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_set_verify_cb.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_add_cert.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_add_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_add_cert.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_add_cert.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_get0_param.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_get0_param.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_get0_param.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_set_verify_cb_func.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_set_verify_cb_func.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_set_verify_cb_func.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_set_verify_cb_func.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_VERIFY_PARAM_set_flags.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_VERIFY_PARAM_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_VERIFY_PARAM_set_flags.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_VERIFY_PARAM_set_flags.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_check_ca.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_ca.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_check_ca.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_ca.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_check_host.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_host.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_check_host.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_host.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_check_issued.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_issued.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_check_issued.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_issued.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_check_private_key.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_private_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_check_private_key.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_private_key.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_check_purpose.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_purpose.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_check_purpose.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_purpose.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_cmp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_cmp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_cmp_time.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_cmp_time.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp_time.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_digest.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_digest.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_digest.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_digest.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_dup.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_dup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_dup.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_dup.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get0_notBefore.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_notBefore.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get0_notBefore.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_notBefore.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get0_signature.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_signature.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get0_signature.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_signature.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get0_uids.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_uids.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get0_uids.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_uids.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get_extension_flags.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_extension_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get_extension_flags.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_extension_flags.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get_pubkey.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_pubkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get_pubkey.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_pubkey.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get_serialNumber.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_serialNumber.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get_serialNumber.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_serialNumber.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get_subject_name.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_subject_name.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get_subject_name.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_subject_name.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_get_version.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_get_version.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_version.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_new.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_new.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_new.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_sign.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_sign.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_sign.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509_verify_cert.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_verify_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509_verify_cert.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_verify_cert.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/X509v3_get_ext_by_NID.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509v3_get_ext_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/X509v3_get_ext_by_NID.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509v3_get_ext_by_NID.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/d2i_DHparams.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_DHparams.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/d2i_DHparams.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_DHparams.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/d2i_PKCS8PrivateKey_bio.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PKCS8PrivateKey_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/d2i_PKCS8PrivateKey_bio.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PKCS8PrivateKey_bio.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/d2i_PrivateKey.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/d2i_PrivateKey.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PrivateKey.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/d2i_SSL_SESSION.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_SSL_SESSION.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/d2i_SSL_SESSION.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_SSL_SESSION.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/d2i_X509.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_X509.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/d2i_X509.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_X509.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/i2d_CMS_bio_stream.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_CMS_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/i2d_CMS_bio_stream.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_CMS_bio_stream.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/i2d_PKCS7_bio_stream.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_PKCS7_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/i2d_PKCS7_bio_stream.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_PKCS7_bio_stream.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/i2d_re_X509_tbs.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_re_X509_tbs.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/i2d_re_X509_tbs.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_re_X509_tbs.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man3/o2i_SCT_LIST.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man3/o2i_SCT_LIST.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man3/o2i_SCT_LIST.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man3/o2i_SCT_LIST.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man5/config.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man5/config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man5/config.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man5/config.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man5/x509v3_config.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man5/x509v3_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man5/x509v3_config.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man5/x509v3_config.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/Ed25519.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/Ed25519.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/Ed25519.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/Ed25519.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/RAND.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/RAND.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/RAND_DRBG.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND_DRBG.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/RAND_DRBG.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND_DRBG.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/RSA-PSS.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/RSA-PSS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/RSA-PSS.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/RSA-PSS.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/SM2.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/SM2.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/SM2.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/SM2.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/X25519.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/X25519.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/X25519.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/X25519.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/bio.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/bio.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/bio.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/crypto.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/crypto.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/crypto.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/crypto.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/ct.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ct.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/ct.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/ct.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/des_modes.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/des_modes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/des_modes.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/des_modes.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/evp.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/evp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/evp.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/evp.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/ossl_store-file.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store-file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/ossl_store-file.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store-file.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/ossl_store.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/ossl_store.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/passphrase-encoding.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/passphrase-encoding.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/passphrase-encoding.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/passphrase-encoding.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/proxy-certificates.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/proxy-certificates.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/proxy-certificates.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/proxy-certificates.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/scrypt.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/scrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/scrypt.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/scrypt.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/ssl.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/ssl.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/ssl.pod diff --git a/src/openssl/openssl-1.1.1w/doc/man7/x509.pod b/src/openssl/openssl-1.1.1w-chevah1/doc/man7/x509.pod similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/man7/x509.pod rename to src/openssl/openssl-1.1.1w-chevah1/doc/man7/x509.pod diff --git a/src/openssl/openssl-1.1.1w/doc/openssl-c-indent.el b/src/openssl/openssl-1.1.1w-chevah1/doc/openssl-c-indent.el similarity index 100% rename from src/openssl/openssl-1.1.1w/doc/openssl-c-indent.el rename to src/openssl/openssl-1.1.1w-chevah1/doc/openssl-c-indent.el diff --git a/src/openssl/openssl-1.1.1w/e_os.h b/src/openssl/openssl-1.1.1w-chevah1/e_os.h similarity index 100% rename from src/openssl/openssl-1.1.1w/e_os.h rename to src/openssl/openssl-1.1.1w-chevah1/e_os.h diff --git a/src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86.pl diff --git a/src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/engines/build.info b/src/openssl/openssl-1.1.1w-chevah1/engines/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/build.info rename to src/openssl/openssl-1.1.1w-chevah1/engines/build.info diff --git a/src/openssl/openssl-1.1.1w/engines/e_afalg.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_afalg.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_afalg.ec b/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.ec similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_afalg.ec rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.ec diff --git a/src/openssl/openssl-1.1.1w/engines/e_afalg.h b/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.h similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_afalg.h rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.h diff --git a/src/openssl/openssl-1.1.1w/engines/e_afalg.txt b/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_afalg.txt rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.txt diff --git a/src/openssl/openssl-1.1.1w/engines/e_afalg_err.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_afalg_err.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_afalg_err.h b/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_afalg_err.h rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.h diff --git a/src/openssl/openssl-1.1.1w/engines/e_capi.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_capi.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_capi.ec b/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.ec similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_capi.ec rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.ec diff --git a/src/openssl/openssl-1.1.1w/engines/e_capi.txt b/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_capi.txt rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.txt diff --git a/src/openssl/openssl-1.1.1w/engines/e_capi_err.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_capi_err.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_capi_err.h b/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_capi_err.h rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.h diff --git a/src/openssl/openssl-1.1.1w/engines/e_dasync.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_dasync.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_dasync.ec b/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.ec similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_dasync.ec rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.ec diff --git a/src/openssl/openssl-1.1.1w/engines/e_dasync.txt b/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_dasync.txt rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.txt diff --git a/src/openssl/openssl-1.1.1w/engines/e_dasync_err.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_dasync_err.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_dasync_err.h b/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_dasync_err.h rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.h diff --git a/src/openssl/openssl-1.1.1w/engines/e_ossltest.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_ossltest.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_ossltest.ec b/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.ec similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_ossltest.ec rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.ec diff --git a/src/openssl/openssl-1.1.1w/engines/e_ossltest.txt b/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_ossltest.txt rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.txt diff --git a/src/openssl/openssl-1.1.1w/engines/e_ossltest_err.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_ossltest_err.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.c diff --git a/src/openssl/openssl-1.1.1w/engines/e_ossltest_err.h b/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_ossltest_err.h rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.h diff --git a/src/openssl/openssl-1.1.1w/engines/e_padlock.c b/src/openssl/openssl-1.1.1w-chevah1/engines/e_padlock.c similarity index 100% rename from src/openssl/openssl-1.1.1w/engines/e_padlock.c rename to src/openssl/openssl-1.1.1w-chevah1/engines/e_padlock.c diff --git a/src/openssl/openssl-1.1.1w/external/perl/Downloaded.txt b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Downloaded.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Downloaded.txt rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Downloaded.txt diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Artistic b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Artistic similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Artistic rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Artistic diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/COPYING b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/COPYING similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/COPYING rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/COPYING diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/INSTALL b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/INSTALL similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/INSTALL rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/INSTALL diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/MANIFEST b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/MANIFEST similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/MANIFEST rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/MANIFEST diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.json b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.json similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.json rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.json diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.yml b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.yml similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.yml rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.yml diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Makefile.PL b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Makefile.PL similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Makefile.PL rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Makefile.PL diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/README b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/README similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/README rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/README diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template.pm b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template.pm rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template.pm diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/00-version.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/00-version.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/00-version.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/00-version.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/01-basic.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/01-basic.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/01-basic.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/01-basic.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/02-hash.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/02-hash.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/02-hash.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/02-hash.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/03-out.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/03-out.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/03-out.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/03-out.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/04-safe.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/04-safe.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/04-safe.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/04-safe.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/05-safe2.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/05-safe2.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/05-safe2.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/05-safe2.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/06-ofh.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/06-ofh.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/06-ofh.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/06-ofh.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/07-safe3.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/07-safe3.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/07-safe3.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/07-safe3.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/08-exported.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/08-exported.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/08-exported.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/08-exported.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/09-error.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/09-error.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/09-error.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/09-error.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/10-delimiters.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/10-delimiters.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/10-delimiters.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/10-delimiters.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/11-prepend.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/11-prepend.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/11-prepend.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/11-prepend.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/12-preprocess.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/12-preprocess.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/12-preprocess.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/12-preprocess.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/13-taint.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/13-taint.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/13-taint.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/13-taint.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/14-broken.t b/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/14-broken.t similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/14-broken.t rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/14-broken.t diff --git a/src/openssl/openssl-1.1.1w/external/perl/transfer/Text/Template.pm b/src/openssl/openssl-1.1.1w-chevah1/external/perl/transfer/Text/Template.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/external/perl/transfer/Text/Template.pm rename to src/openssl/openssl-1.1.1w-chevah1/external/perl/transfer/Text/Template.pm diff --git a/src/openssl/openssl-1.1.1w/fuzz/README.md b/src/openssl/openssl-1.1.1w-chevah1/fuzz/README.md similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/README.md rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/README.md diff --git a/src/openssl/openssl-1.1.1w/fuzz/asn1.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/asn1parse.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1parse.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/asn1parse.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1parse.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/bignum.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/bignum.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/bignum.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/bignum.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/bndiv.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/bndiv.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/bndiv.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/bndiv.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/build.info b/src/openssl/openssl-1.1.1w-chevah1/fuzz/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/build.info rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/build.info diff --git a/src/openssl/openssl-1.1.1w/fuzz/client.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/client.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/client.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/client.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/cms.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/cms.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/cms.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/cms.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/conf.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/conf.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/conf.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/crl.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/crl.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/crl.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/ct.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/ct.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/ct.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/ct.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/driver.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/driver.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/driver.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/driver.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/fuzzer.h b/src/openssl/openssl-1.1.1w-chevah1/fuzz/fuzzer.h similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/fuzzer.h rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/fuzzer.h diff --git a/src/openssl/openssl-1.1.1w/fuzz/helper.py b/src/openssl/openssl-1.1.1w-chevah1/fuzz/helper.py similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/helper.py rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/helper.py diff --git a/src/openssl/openssl-1.1.1w/fuzz/mkfuzzoids.pl b/src/openssl/openssl-1.1.1w-chevah1/fuzz/mkfuzzoids.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/mkfuzzoids.pl rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/mkfuzzoids.pl diff --git a/src/openssl/openssl-1.1.1w/fuzz/oids.txt b/src/openssl/openssl-1.1.1w-chevah1/fuzz/oids.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/oids.txt rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/oids.txt diff --git a/src/openssl/openssl-1.1.1w/fuzz/rand.inc b/src/openssl/openssl-1.1.1w-chevah1/fuzz/rand.inc similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/rand.inc rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/rand.inc diff --git a/src/openssl/openssl-1.1.1w/fuzz/server.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/server.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/server.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/server.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/test-corpus.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/test-corpus.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/test-corpus.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/test-corpus.c diff --git a/src/openssl/openssl-1.1.1w/fuzz/x509.c b/src/openssl/openssl-1.1.1w-chevah1/fuzz/x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w/fuzz/x509.c rename to src/openssl/openssl-1.1.1w-chevah1/fuzz/x509.c diff --git a/src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1w/include/crypto/aria.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/aria.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/aria.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/aria.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/asn1.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/asn1.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/asn1.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/asn1.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/async.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/async.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/async.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/async.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/bn.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/bn.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/bn_conf.h.in b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_conf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/bn_conf.h.in rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_conf.h.in diff --git a/src/openssl/openssl-1.1.1w/include/crypto/bn_dh.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_dh.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/bn_dh.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_dh.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/bn_srp.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_srp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/bn_srp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_srp.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/chacha.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/chacha.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/chacha.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/chacha.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/cryptlib.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/cryptlib.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/cryptlib.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/ctype.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/ctype.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/ctype.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/ctype.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/dso_conf.h.in b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/dso_conf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/dso_conf.h.in rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/dso_conf.h.in diff --git a/src/openssl/openssl-1.1.1w/include/crypto/ec.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/ec.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/ec.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/ec.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/engine.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/engine.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/engine.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/engine.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/err.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/err.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/evp.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/evp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/evp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/evp.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/lhash.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/lhash.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/lhash.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/lhash.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/md32_common.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/md32_common.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/md32_common.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/md32_common.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/objects.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/objects.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/objects.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/objects.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/poly1305.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/poly1305.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/poly1305.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/poly1305.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/rand.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/rand.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/rand.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/rand.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/sha.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sha.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/sha.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/sha.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/siphash.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/siphash.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/siphash.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/siphash.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/sm2.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/sm2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/sm2err.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/sm2err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2err.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/sm3.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm3.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/sm3.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm3.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/sm4.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm4.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/sm4.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm4.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/store.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/store.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/store.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/store.h diff --git a/src/openssl/openssl-1.1.1w/include/crypto/x509.h b/src/openssl/openssl-1.1.1w-chevah1/include/crypto/x509.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/crypto/x509.h rename to src/openssl/openssl-1.1.1w-chevah1/include/crypto/x509.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1w/include/internal/bio.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/bio.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/bio.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/comp.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/comp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/comp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/comp.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/conf.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/conf.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/conf.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/conf.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/constant_time.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/constant_time.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/constant_time.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/constant_time.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/cryptlib.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/cryptlib.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/cryptlib.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/dane.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/dane.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/dane.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/dane.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/dso.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/dso.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/dso.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/dso.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/dsoerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/dsoerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/dsoerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/dsoerr.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/err.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/err.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/nelem.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/nelem.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/nelem.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/nelem.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/numbers.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/numbers.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/numbers.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/numbers.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/o_dir.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/o_dir.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/o_dir.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/o_dir.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/o_str.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/o_str.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/o_str.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/o_str.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/refcount.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/refcount.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/refcount.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/refcount.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/sockets.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/sockets.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/sockets.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/sockets.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/sslconf.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/sslconf.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/sslconf.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/sslconf.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/thread_once.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/thread_once.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/thread_once.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/thread_once.h diff --git a/src/openssl/openssl-1.1.1w/include/internal/tsan_assist.h b/src/openssl/openssl-1.1.1w-chevah1/include/internal/tsan_assist.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/internal/tsan_assist.h rename to src/openssl/openssl-1.1.1w-chevah1/include/internal/tsan_assist.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1w/include/openssl/aes.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/aes.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/aes.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/aes.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/asn1.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/asn1.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/asn1_mac.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1_mac.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/asn1_mac.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1_mac.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/asn1err.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/asn1err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1err.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/asn1t.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1t.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/asn1t.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1t.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/async.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/async.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/async.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/async.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/asyncerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asyncerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/asyncerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/asyncerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/bio.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/bio.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/bio.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/bioerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bioerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/bioerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/bioerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/blowfish.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/blowfish.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/blowfish.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/blowfish.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/bn.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bn.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/bn.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/bn.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/bnerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bnerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/bnerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/bnerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/buffer.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffer.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/buffer.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffer.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/buffererr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffererr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/buffererr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffererr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/camellia.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/camellia.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/camellia.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/camellia.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/cast.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cast.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/cast.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/cast.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/cmac.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmac.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/cmac.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmac.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/cms.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cms.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/cms.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/cms.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/cmserr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmserr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/cmserr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmserr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/comp.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/comp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/comp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/comp.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/comperr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/comperr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/comperr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/comperr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/conf.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/conf.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/conf_api.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf_api.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/conf_api.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf_api.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/conferr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/conferr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/conferr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/conferr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/crypto.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/crypto.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/crypto.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/crypto.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/cryptoerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cryptoerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/cryptoerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/cryptoerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ct.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ct.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ct.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ct.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/cterr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cterr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/cterr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/cterr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/des.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/des.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/des.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/des.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/dh.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dh.h similarity index 98% rename from src/openssl/openssl-1.1.1w/include/openssl/dh.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/dh.h index 6c6ff3636..d2a9c0d34 100644 --- a/src/openssl/openssl-1.1.1w/include/openssl/dh.h +++ b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dh.h @@ -71,14 +71,16 @@ DECLARE_ASN1_ITEM(DHparams) /* #define DH_GENERATOR_3 3 */ # define DH_GENERATOR_5 5 -/* DH_check error codes */ +/* DH_check error codes, some of them shared with DH_check_pub_key */ # define DH_CHECK_P_NOT_PRIME 0x01 # define DH_CHECK_P_NOT_SAFE_PRIME 0x02 # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 # define DH_NOT_SUITABLE_GENERATOR 0x08 # define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_Q_VALUE 0x20 /* +DH_check_pub_key */ # define DH_CHECK_INVALID_J_VALUE 0x40 +# define DH_MODULUS_TOO_SMALL 0x80 +# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ /* DH_check_pub_key error codes */ # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 diff --git a/src/openssl/openssl-1.1.1w/include/openssl/dherr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dherr.h similarity index 98% rename from src/openssl/openssl-1.1.1w/include/openssl/dherr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/dherr.h index 528c81985..d66c35aa8 100644 --- a/src/openssl/openssl-1.1.1w/include/openssl/dherr.h +++ b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dherr.h @@ -82,6 +82,7 @@ int ERR_load_DH_strings(void); # define DH_R_NO_PRIVATE_VALUE 100 # define DH_R_PARAMETER_ENCODING_ERROR 105 # define DH_R_PEER_KEY_ERROR 111 +# define DH_R_Q_TOO_LARGE 130 # define DH_R_SHARED_INFO_ERROR 113 # define DH_R_UNABLE_TO_CHECK_GENERATOR 121 diff --git a/src/openssl/openssl-1.1.1w/include/openssl/dsa.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/dsa.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsa.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/dsaerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsaerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/dsaerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsaerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/dtls1.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dtls1.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/dtls1.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/dtls1.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/e_os2.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/e_os2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/e_os2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/e_os2.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ebcdic.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ebcdic.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ebcdic.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ebcdic.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ec.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ec.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ec.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ec.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ecdh.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdh.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ecdh.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdh.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ecdsa.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ecdsa.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdsa.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ecerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ecerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/engine.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/engine.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/engine.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/engine.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/engineerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/engineerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/engineerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/engineerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/err.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/err.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/evp.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/evp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/evp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/evp.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/evperr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/evperr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/evperr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/evperr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/hmac.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/hmac.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/hmac.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/hmac.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/idea.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/idea.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/idea.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/idea.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/kdf.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdf.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/kdf.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdf.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/kdferr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdferr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/kdferr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdferr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/lhash.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/lhash.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/lhash.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/lhash.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/md2.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/md2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/md2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/md2.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/md4.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/md4.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/md4.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/md4.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/md5.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/md5.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/md5.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/md5.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/mdc2.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/mdc2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/mdc2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/mdc2.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/modes.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/modes.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/modes.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/modes.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/obj_mac.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/obj_mac.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/obj_mac.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/obj_mac.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/objects.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/objects.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/objects.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/objects.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/objectserr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/objectserr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/objectserr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/objectserr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ocsp.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ocsp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsp.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ocsperr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsperr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ocsperr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsperr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/opensslconf.h.in b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslconf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/opensslconf.h.in rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslconf.h.in diff --git a/src/openssl/openssl-1.1.1w/include/openssl/opensslv.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslv.h similarity index 98% rename from src/openssl/openssl-1.1.1w/include/openssl/opensslv.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslv.h index 5667d4712..07e9bb796 100644 --- a/src/openssl/openssl-1.1.1w/include/openssl/opensslv.h +++ b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslv.h @@ -40,7 +40,7 @@ extern "C" { * major minor fix final patch/beta) */ # define OPENSSL_VERSION_NUMBER 0x1010117fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w 11 Sep 2023" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w-chevah1 26 Jul 2024" /*- * The macros below are to be used for shared library (.so, .dll, ...) diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ossl_typ.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ossl_typ.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ossl_typ.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ossl_typ.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pem.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pem.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pem2.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pem2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem2.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pemerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pemerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pemerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pemerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pkcs12.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pkcs12.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pkcs12err.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pkcs12err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12err.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pkcs7.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pkcs7.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/pkcs7err.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/pkcs7err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7err.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rand.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rand.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rand_drbg.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand_drbg.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rand_drbg.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand_drbg.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/randerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/randerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/randerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/randerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rc2.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rc2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc2.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rc4.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc4.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rc4.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc4.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rc5.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc5.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rc5.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc5.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ripemd.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ripemd.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ripemd.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ripemd.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rsa.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rsa.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsa.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/rsaerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsaerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/rsaerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsaerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/safestack.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/safestack.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/safestack.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/safestack.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/seed.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/seed.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/seed.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/seed.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/sha.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/sha.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/sha.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/sha.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/srp.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/srp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/srp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/srp.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/srtp.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/srtp.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/srtp.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/srtp.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ssl.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ssl.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ssl2.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl2.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ssl2.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl2.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ssl3.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl3.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ssl3.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl3.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/sslerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/sslerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/sslerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/sslerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/stack.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/stack.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/stack.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/stack.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/store.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/store.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/store.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/store.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/storeerr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/storeerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/storeerr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/storeerr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/symhacks.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/symhacks.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/symhacks.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/symhacks.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/tls1.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/tls1.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/tls1.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/tls1.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ts.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ts.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ts.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ts.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/tserr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/tserr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/tserr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/tserr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/txt_db.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/txt_db.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/txt_db.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/txt_db.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/ui.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ui.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/ui.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/ui.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/uierr.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/uierr.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/uierr.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/uierr.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/whrlpool.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/whrlpool.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/whrlpool.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/whrlpool.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/x509.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/x509.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/x509_vfy.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509_vfy.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/x509_vfy.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509_vfy.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/x509err.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/x509err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509err.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/x509v3.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/x509v3.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3.h diff --git a/src/openssl/openssl-1.1.1w/include/openssl/x509v3err.h b/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3err.h similarity index 100% rename from src/openssl/openssl-1.1.1w/include/openssl/x509v3err.h rename to src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3err.h diff --git a/src/openssl/openssl-1.1.1w/ms/applink.c b/src/openssl/openssl-1.1.1w-chevah1/ms/applink.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/applink.c rename to src/openssl/openssl-1.1.1w-chevah1/ms/applink.c diff --git a/src/openssl/openssl-1.1.1w/ms/cmp.pl b/src/openssl/openssl-1.1.1w-chevah1/ms/cmp.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/cmp.pl rename to src/openssl/openssl-1.1.1w-chevah1/ms/cmp.pl diff --git a/src/openssl/openssl-1.1.1w/ms/uplink-common.pl b/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-common.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/uplink-common.pl rename to src/openssl/openssl-1.1.1w-chevah1/ms/uplink-common.pl diff --git a/src/openssl/openssl-1.1.1w/ms/uplink-ia64.pl b/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/uplink-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah1/ms/uplink-ia64.pl diff --git a/src/openssl/openssl-1.1.1w/ms/uplink-x86.pl b/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/uplink-x86.pl rename to src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86.pl diff --git a/src/openssl/openssl-1.1.1w/ms/uplink-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/uplink-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w/ms/uplink.c b/src/openssl/openssl-1.1.1w-chevah1/ms/uplink.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/uplink.c rename to src/openssl/openssl-1.1.1w-chevah1/ms/uplink.c diff --git a/src/openssl/openssl-1.1.1w/ms/uplink.h b/src/openssl/openssl-1.1.1w-chevah1/ms/uplink.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ms/uplink.h rename to src/openssl/openssl-1.1.1w-chevah1/ms/uplink.h diff --git a/src/openssl/openssl-1.1.1w/os-dep/haiku.h b/src/openssl/openssl-1.1.1w-chevah1/os-dep/haiku.h similarity index 100% rename from src/openssl/openssl-1.1.1w/os-dep/haiku.h rename to src/openssl/openssl-1.1.1w-chevah1/os-dep/haiku.h diff --git a/src/openssl/openssl-1.1.1w/ssl/bio_ssl.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/bio_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/bio_ssl.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/bio_ssl.c diff --git a/src/openssl/openssl-1.1.1w/ssl/build.info b/src/openssl/openssl-1.1.1w-chevah1/ssl/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/build.info rename to src/openssl/openssl-1.1.1w-chevah1/ssl/build.info diff --git a/src/openssl/openssl-1.1.1w/ssl/d1_lib.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/d1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/d1_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/d1_lib.c diff --git a/src/openssl/openssl-1.1.1w/ssl/d1_msg.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/d1_msg.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/d1_msg.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/d1_msg.c diff --git a/src/openssl/openssl-1.1.1w/ssl/d1_srtp.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/d1_srtp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/d1_srtp.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/d1_srtp.c diff --git a/src/openssl/openssl-1.1.1w/ssl/methods.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/methods.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/methods.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/methods.c diff --git a/src/openssl/openssl-1.1.1w/ssl/packet.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/packet.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/packet.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/packet.c diff --git a/src/openssl/openssl-1.1.1w/ssl/packet_local.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/packet_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/packet_local.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/packet_local.h diff --git a/src/openssl/openssl-1.1.1w/ssl/pqueue.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/pqueue.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/pqueue.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/pqueue.c diff --git a/src/openssl/openssl-1.1.1w/ssl/record/README b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/README similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/README rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/README diff --git a/src/openssl/openssl-1.1.1w/ssl/record/dtls1_bitmap.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/dtls1_bitmap.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/dtls1_bitmap.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/dtls1_bitmap.c diff --git a/src/openssl/openssl-1.1.1w/ssl/record/rec_layer_d1.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_d1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/rec_layer_d1.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_d1.c diff --git a/src/openssl/openssl-1.1.1w/ssl/record/rec_layer_s3.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_s3.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/rec_layer_s3.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_s3.c diff --git a/src/openssl/openssl-1.1.1w/ssl/record/record.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/record.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/record.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/record.h diff --git a/src/openssl/openssl-1.1.1w/ssl/record/record_local.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/record_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/record_local.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/record_local.h diff --git a/src/openssl/openssl-1.1.1w/ssl/record/ssl3_buffer.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_buffer.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/ssl3_buffer.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_buffer.c diff --git a/src/openssl/openssl-1.1.1w/ssl/record/ssl3_record.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/ssl3_record.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record.c diff --git a/src/openssl/openssl-1.1.1w/ssl/record/ssl3_record_tls13.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record_tls13.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/record/ssl3_record_tls13.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record_tls13.c diff --git a/src/openssl/openssl-1.1.1w/ssl/s3_cbc.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/s3_cbc.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/s3_cbc.c diff --git a/src/openssl/openssl-1.1.1w/ssl/s3_enc.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/s3_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/s3_enc.c diff --git a/src/openssl/openssl-1.1.1w/ssl/s3_lib.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/s3_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/s3_lib.c diff --git a/src/openssl/openssl-1.1.1w/ssl/s3_msg.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_msg.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/s3_msg.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/s3_msg.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_asn1.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_asn1.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_asn1.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_cert.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_cert.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_cert_table.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert_table.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_cert_table.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert_table.h diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_ciph.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_ciph.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_ciph.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_ciph.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_conf.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_conf.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_conf.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_err.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_err.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_err.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_init.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_init.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_init.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_lib.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_lib.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_local.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_local.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_local.h diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_mcnf.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_mcnf.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_mcnf.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_mcnf.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_rsa.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_rsa.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_rsa.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_sess.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_sess.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_sess.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_sess.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_stat.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_stat.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_stat.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_stat.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_txt.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_txt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_txt.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_txt.c diff --git a/src/openssl/openssl-1.1.1w/ssl/ssl_utst.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_utst.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/ssl_utst.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_utst.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/README b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/README similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/README rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/README diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/extensions.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/extensions.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/extensions_clnt.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_clnt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/extensions_clnt.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_clnt.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/extensions_cust.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_cust.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/extensions_cust.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_cust.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/extensions_srvr.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_srvr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/extensions_srvr.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_srvr.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.h diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem_clnt.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_clnt.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem_clnt.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_clnt.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem_dtls.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_dtls.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem_dtls.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_dtls.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem_lib.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_lib.c diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem_local.h b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem_local.h rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_local.h diff --git a/src/openssl/openssl-1.1.1w/ssl/statem/statem_srvr.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_srvr.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/statem/statem_srvr.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_srvr.c diff --git a/src/openssl/openssl-1.1.1w/ssl/t1_enc.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/t1_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/t1_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/t1_enc.c diff --git a/src/openssl/openssl-1.1.1w/ssl/t1_lib.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/t1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/t1_lib.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/t1_lib.c diff --git a/src/openssl/openssl-1.1.1w/ssl/t1_trce.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/t1_trce.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/t1_trce.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/t1_trce.c diff --git a/src/openssl/openssl-1.1.1w/ssl/tls13_enc.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/tls13_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/tls13_enc.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/tls13_enc.c diff --git a/src/openssl/openssl-1.1.1w/ssl/tls_srp.c b/src/openssl/openssl-1.1.1w-chevah1/ssl/tls_srp.c similarity index 100% rename from src/openssl/openssl-1.1.1w/ssl/tls_srp.c rename to src/openssl/openssl-1.1.1w-chevah1/ssl/tls_srp.c diff --git a/src/openssl/openssl-1.1.1w/test/CAss.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/CAss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/CAss.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/CAss.cnf diff --git a/src/openssl/openssl-1.1.1w/test/CAssdh.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/CAssdh.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/CAssdh.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/CAssdh.cnf diff --git a/src/openssl/openssl-1.1.1w/test/CAssdsa.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/CAssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/CAssdsa.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/CAssdsa.cnf diff --git a/src/openssl/openssl-1.1.1w/test/CAssrsa.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/CAssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/CAssrsa.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/CAssrsa.cnf diff --git a/src/openssl/openssl-1.1.1w/test/CAtsa.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/CAtsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/CAtsa.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/CAtsa.cnf diff --git a/src/openssl/openssl-1.1.1w/test/P1ss.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/P1ss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/P1ss.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/P1ss.cnf diff --git a/src/openssl/openssl-1.1.1w/test/P2ss.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/P2ss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/P2ss.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/P2ss.cnf diff --git a/src/openssl/openssl-1.1.1w/test/README b/src/openssl/openssl-1.1.1w-chevah1/test/README similarity index 100% rename from src/openssl/openssl-1.1.1w/test/README rename to src/openssl/openssl-1.1.1w-chevah1/test/README diff --git a/src/openssl/openssl-1.1.1w/test/README.external b/src/openssl/openssl-1.1.1w-chevah1/test/README.external similarity index 100% rename from src/openssl/openssl-1.1.1w/test/README.external rename to src/openssl/openssl-1.1.1w-chevah1/test/README.external diff --git a/src/openssl/openssl-1.1.1w/test/README.ssltest.md b/src/openssl/openssl-1.1.1w-chevah1/test/README.ssltest.md similarity index 100% rename from src/openssl/openssl-1.1.1w/test/README.ssltest.md rename to src/openssl/openssl-1.1.1w-chevah1/test/README.ssltest.md diff --git a/src/openssl/openssl-1.1.1w/test/Sssdsa.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/Sssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/Sssdsa.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/Sssdsa.cnf diff --git a/src/openssl/openssl-1.1.1w/test/Sssrsa.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/Sssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/Sssrsa.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/Sssrsa.cnf diff --git a/src/openssl/openssl-1.1.1w/test/Uss.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/Uss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/Uss.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/Uss.cnf diff --git a/src/openssl/openssl-1.1.1w/test/aborttest.c b/src/openssl/openssl-1.1.1w-chevah1/test/aborttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/aborttest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/aborttest.c diff --git a/src/openssl/openssl-1.1.1w/test/afalgtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/afalgtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/afalgtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/afalgtest.c diff --git a/src/openssl/openssl-1.1.1w/test/asn1_decode_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/asn1_decode_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asn1_decode_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asn1_decode_test.c diff --git a/src/openssl/openssl-1.1.1w/test/asn1_encode_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/asn1_encode_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asn1_encode_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asn1_encode_test.c diff --git a/src/openssl/openssl-1.1.1w/test/asn1_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/asn1_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asn1_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asn1_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/asn1_string_table_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/asn1_string_table_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asn1_string_table_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asn1_string_table_test.c diff --git a/src/openssl/openssl-1.1.1w/test/asn1_time_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/asn1_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asn1_time_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asn1_time_test.c diff --git a/src/openssl/openssl-1.1.1w/test/asynciotest.c b/src/openssl/openssl-1.1.1w-chevah1/test/asynciotest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asynciotest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asynciotest.c diff --git a/src/openssl/openssl-1.1.1w/test/asynctest.c b/src/openssl/openssl-1.1.1w-chevah1/test/asynctest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/asynctest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/asynctest.c diff --git a/src/openssl/openssl-1.1.1w/test/bad_dtls_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/bad_dtls_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bad_dtls_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bad_dtls_test.c diff --git a/src/openssl/openssl-1.1.1w/test/bftest.c b/src/openssl/openssl-1.1.1w-chevah1/test/bftest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bftest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bftest.c diff --git a/src/openssl/openssl-1.1.1w/test/bio_callback_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/bio_callback_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bio_callback_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bio_callback_test.c diff --git a/src/openssl/openssl-1.1.1w/test/bio_enc_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/bio_enc_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bio_enc_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bio_enc_test.c diff --git a/src/openssl/openssl-1.1.1w/test/bio_memleak_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/bio_memleak_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bio_memleak_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bio_memleak_test.c diff --git a/src/openssl/openssl-1.1.1w/test/bioprinttest.c b/src/openssl/openssl-1.1.1w-chevah1/test/bioprinttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bioprinttest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bioprinttest.c diff --git a/src/openssl/openssl-1.1.1w/test/bntest.c b/src/openssl/openssl-1.1.1w-chevah1/test/bntest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bntest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/bntest.c diff --git a/src/openssl/openssl-1.1.1w/test/bntests.pl b/src/openssl/openssl-1.1.1w-chevah1/test/bntests.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/bntests.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/bntests.pl diff --git a/src/openssl/openssl-1.1.1w/test/build.info b/src/openssl/openssl-1.1.1w-chevah1/test/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/test/build.info rename to src/openssl/openssl-1.1.1w-chevah1/test/build.info diff --git a/src/openssl/openssl-1.1.1w/test/casttest.c b/src/openssl/openssl-1.1.1w-chevah1/test/casttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/casttest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/casttest.c diff --git a/src/openssl/openssl-1.1.1w/test/certs/alt1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/alt1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/alt1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/alt1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/alt2-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/alt2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/alt2-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/alt2-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/alt3-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/alt3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/alt3-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/alt3-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad-pc3-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad-pc3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad-pc3-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad-pc3-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad-pc4-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad-pc4-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad-pc4-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad-pc4-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad-pc6-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad-pc6-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad-pc6-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad-pc6-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad.key b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.key similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad.key rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.key diff --git a/src/openssl/openssl-1.1.1w/test/certs/bad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/bad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt10-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt10-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt10-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt10-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt2-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt2-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt2-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt3-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt3-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt3-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt4-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt4-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt4-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt4-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt5-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt5-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt5-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt5-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt6-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt6-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt6-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt6-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt7-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt7-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt7-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt7-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt8-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt8-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt8-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt8-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt9-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt9-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badalt9-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badalt9-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badcn1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badcn1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/badcn1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/badcn1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert-768.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert-768.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert-768i.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768i.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert-768i.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768i.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5-any.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5-any.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5-any.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5-any.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-cert2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-expired.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-expired.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-expired.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-key-768.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-key-768.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-768.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-key2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-key2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-name2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-name2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-name2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-nonbc.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonbc.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-nonbc.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonbc.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-nonca.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-nonca.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonca.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-pol-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pol-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-pol-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pol-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-pss-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-pss-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-pss-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-pss-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-root2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-root2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-root2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-root2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ca-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cca-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cca-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/client-ed25519-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/client-ed25519-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/client-ed25519-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/client-ed25519-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/client-ed448-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/client-ed448-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/client-ed448-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/client-ed448-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/croot-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/croot-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cross-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cross-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cross-root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cross-root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-root.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cyrillic.msb b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.msb similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cyrillic.msb rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.msb diff --git a/src/openssl/openssl-1.1.1w/test/certs/cyrillic.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cyrillic.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cyrillic.utf8 b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.utf8 similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cyrillic.utf8 rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.utf8 diff --git a/src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.utf8 b/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.utf8 similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.utf8 rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.utf8 diff --git a/src/openssl/openssl-1.1.1w/test/certs/dhp2048.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/dhp2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/dhp2048.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/dhp2048.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-768.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-768.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-768i.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768i.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-768i.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768i.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-md5.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-md5.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies-bad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies-bad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies-bad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies-bad.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-client-chain.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client-chain.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-client-chain.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client-chain.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-client.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-client.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-client-chain.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-client-chain.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-client-chain.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-client-chain.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-ed25519.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ed25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-ed25519.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ed25519.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-expired.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-expired.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-expired.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-key-768.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-key-768.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-768.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-name2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-name2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-name2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-pathlen.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pathlen.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-pathlen.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pathlen.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-pss-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-pss-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha256-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha256-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha256-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha256-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-self-signed.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-self-signed.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-self-signed.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-self-signed.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ee-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.sct b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.sct similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.sct rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.sct diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.sct b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.sct similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.sct rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.sct diff --git a/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3_issuer.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3_issuer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3_issuer.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3_issuer.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/goodcn1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/goodcn1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/goodcn1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/goodcn1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/interCA.key b/src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.key similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/interCA.key rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.key diff --git a/src/openssl/openssl-1.1.1w/test/certs/interCA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/interCA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/invalid-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/invalid-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/invalid-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/invalid-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/leaf.key b/src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.key similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/leaf.key rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.key diff --git a/src/openssl/openssl-1.1.1w/test/certs/leaf.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/leaf.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/many-constraints.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-constraints.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/many-constraints.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/many-constraints.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/many-names1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/many-names1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names1.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/many-names2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/many-names2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/many-names3.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/many-names3.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names3.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/mkcert.sh b/src/openssl/openssl-1.1.1w-chevah1/test/certs/mkcert.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/mkcert.sh rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/mkcert.sh diff --git a/src/openssl/openssl-1.1.1w/test/certs/nca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/nca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/nca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/nca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca2-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca2-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca2-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca3-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ncca3-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/ncca3-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/nroot+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/nroot+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/nroot+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/nroot+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/p256-server-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/p256-server-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/p256-server-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/p256-server-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/p384-root-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/p384-root-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/p384-root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/p384-root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/p384-server-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/p384-server-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/p384-server-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/p384-server-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pathlen.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pathlen.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pathlen.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pathlen.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pc1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pc1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pc1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pc1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pc2-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pc2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pc2-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pc2-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pc5-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pc5-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/pc5-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/pc5-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-cert-768.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-cert-768.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-768.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-cert-md5.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-cert-md5.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-cert-rsa2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-rsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-cert-rsa2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-rsa2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-cert2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-cross-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cross-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-cross-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cross-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-ed25519.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-ed25519.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed25519.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-ed448-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-ed448-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-ed448-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-ed448-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-expired.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-expired.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-expired.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-key-768.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-key-768.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key-768.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-key2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-key2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-name2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-name2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-name2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-nonca.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-nonca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-nonca.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-nonca.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-noserver.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-noserver.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-noserver.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-noserver.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root2+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root2+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root2+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root2+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/root2-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/root2-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/root2-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/root2-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/rootCA.key b/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.key similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/rootCA.key rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.key diff --git a/src/openssl/openssl-1.1.1w/test/certs/rootCA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/rootCA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/rootcert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootcert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/rootcert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/rootcert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/rootkey.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/rootkey.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/rootkey.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/roots.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/roots.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/roots.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/roots.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sca-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sca-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-dsa-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-dsa-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-dsa-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-dsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ed25519-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ed25519-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ed25519-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ed25519-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ed448-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ed448-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-ed448-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-ed448-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-pss-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-pss-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-pss-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-pss-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/server-trusted.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-trusted.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/server-trusted.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/server-trusted.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/servercert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/servercert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/servercert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/servercert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/serverkey.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/serverkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/serverkey.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/serverkey.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/setup.sh b/src/openssl/openssl-1.1.1w-chevah1/test/certs/setup.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/setup.sh rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/setup.sh diff --git a/src/openssl/openssl-1.1.1w/test/certs/some-names1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/some-names1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names1.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/some-names2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/some-names2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names2.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/some-names3.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/some-names3.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names3.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot-cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot-cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/sroot-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/sroot-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/subinterCA-ss.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA-ss.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/subinterCA-ss.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA-ss.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/subinterCA.key b/src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.key similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/subinterCA.key rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.key diff --git a/src/openssl/openssl-1.1.1w/test/certs/subinterCA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/subinterCA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/untrusted.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/untrusted.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/untrusted.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/untrusted.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/wrongcert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongcert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/wrongcert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongcert.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/wrongkey.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/wrongkey.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongkey.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/x509-check-key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/x509-check-key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check-key.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/x509-check.csr b/src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check.csr similarity index 100% rename from src/openssl/openssl-1.1.1w/test/certs/x509-check.csr rename to src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check.csr diff --git a/src/openssl/openssl-1.1.1w/test/chacha_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/chacha_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/chacha_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/chacha_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/cipher_overhead_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/cipher_overhead_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/cipher_overhead_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/cipher_overhead_test.c diff --git a/src/openssl/openssl-1.1.1w/test/cipherbytes_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/cipherbytes_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/cipherbytes_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/cipherbytes_test.c diff --git a/src/openssl/openssl-1.1.1w/test/cipherlist_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/cipherlist_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/cipherlist_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/cipherlist_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ciphername_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ciphername_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ciphername_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ciphername_test.c diff --git a/src/openssl/openssl-1.1.1w/test/clienthellotest.c b/src/openssl/openssl-1.1.1w-chevah1/test/clienthellotest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/clienthellotest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/clienthellotest.c diff --git a/src/openssl/openssl-1.1.1w/test/cmactest.c b/src/openssl/openssl-1.1.1w-chevah1/test/cmactest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/cmactest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/cmactest.c diff --git a/src/openssl/openssl-1.1.1w/test/cms-examples.pl b/src/openssl/openssl-1.1.1w-chevah1/test/cms-examples.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/cms-examples.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/cms-examples.pl diff --git a/src/openssl/openssl-1.1.1w/test/cmsapitest.c b/src/openssl/openssl-1.1.1w-chevah1/test/cmsapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/cmsapitest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/cmsapitest.c diff --git a/src/openssl/openssl-1.1.1w/test/conf_include_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/conf_include_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/conf_include_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/conf_include_test.c diff --git a/src/openssl/openssl-1.1.1w/test/constant_time_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/constant_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/constant_time_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/constant_time_test.c diff --git a/src/openssl/openssl-1.1.1w/test/crltest.c b/src/openssl/openssl-1.1.1w-chevah1/test/crltest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/crltest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/crltest.c diff --git a/src/openssl/openssl-1.1.1w/test/ct/log_list.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ct/log_list.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ct/log_list.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ct/log_list.conf diff --git a/src/openssl/openssl-1.1.1w/test/ct/tls1.sct b/src/openssl/openssl-1.1.1w-chevah1/test/ct/tls1.sct similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ct/tls1.sct rename to src/openssl/openssl-1.1.1w-chevah1/test/ct/tls1.sct diff --git a/src/openssl/openssl-1.1.1w/test/ct_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ct_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ct_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ct_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ctype_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ctype_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ctype_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ctype_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/curve448_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/curve448_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/curve448_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/curve448_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/bad-cms.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-cms.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/bad-cms.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-cms.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-pad0.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-pad0.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-pad0.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-pad0.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-padminus1.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-padminus1.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-padminus1.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-padminus1.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/bad_bio.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_bio.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/bad_bio.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_bio.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/bad_cert.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_cert.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/bad_cert.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_cert.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/bad_generalname.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_generalname.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/bad_generalname.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_generalname.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/high_tag.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/high_tag.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/high_tag.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/high_tag.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/int0.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int0.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/int0.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int0.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/int1.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int1.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/int1.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int1.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i-tests/intminus1.der b/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/intminus1.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i-tests/intminus1.der rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/intminus1.der diff --git a/src/openssl/openssl-1.1.1w/test/d2i_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/d2i_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/d2i_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/d2i_test.c diff --git a/src/openssl/openssl-1.1.1w/test/dane-cross.in b/src/openssl/openssl-1.1.1w-chevah1/test/dane-cross.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dane-cross.in rename to src/openssl/openssl-1.1.1w-chevah1/test/dane-cross.in diff --git a/src/openssl/openssl-1.1.1w/test/danetest.c b/src/openssl/openssl-1.1.1w-chevah1/test/danetest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/danetest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/danetest.c diff --git a/src/openssl/openssl-1.1.1w/test/danetest.in b/src/openssl/openssl-1.1.1w-chevah1/test/danetest.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/danetest.in rename to src/openssl/openssl-1.1.1w-chevah1/test/danetest.in diff --git a/src/openssl/openssl-1.1.1w/test/danetest.pem b/src/openssl/openssl-1.1.1w-chevah1/test/danetest.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/danetest.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/danetest.pem diff --git a/src/openssl/openssl-1.1.1w/test/data.bin b/src/openssl/openssl-1.1.1w-chevah1/test/data.bin similarity index 100% rename from src/openssl/openssl-1.1.1w/test/data.bin rename to src/openssl/openssl-1.1.1w-chevah1/test/data.bin diff --git a/src/openssl/openssl-1.1.1w/test/destest.c b/src/openssl/openssl-1.1.1w-chevah1/test/destest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/destest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/destest.c diff --git a/src/openssl/openssl-1.1.1w/test/dhtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/dhtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dhtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/dhtest.c diff --git a/src/openssl/openssl-1.1.1w/test/drbg_cavs_data.c b/src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/drbg_cavs_data.c rename to src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.c diff --git a/src/openssl/openssl-1.1.1w/test/drbg_cavs_data.h b/src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/drbg_cavs_data.h rename to src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.h diff --git a/src/openssl/openssl-1.1.1w/test/drbg_cavs_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/drbg_cavs_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_test.c diff --git a/src/openssl/openssl-1.1.1w/test/drbgtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/drbgtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.c diff --git a/src/openssl/openssl-1.1.1w/test/drbgtest.h b/src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/drbgtest.h rename to src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.h diff --git a/src/openssl/openssl-1.1.1w/test/dsa_no_digest_size_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/dsa_no_digest_size_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dsa_no_digest_size_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/dsa_no_digest_size_test.c diff --git a/src/openssl/openssl-1.1.1w/test/dsatest.c b/src/openssl/openssl-1.1.1w-chevah1/test/dsatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dsatest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/dsatest.c diff --git a/src/openssl/openssl-1.1.1w/test/dtls_mtu_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/dtls_mtu_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dtls_mtu_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/dtls_mtu_test.c diff --git a/src/openssl/openssl-1.1.1w/test/dtlstest.c b/src/openssl/openssl-1.1.1w-chevah1/test/dtlstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dtlstest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/dtlstest.c diff --git a/src/openssl/openssl-1.1.1w/test/dtlsv1listentest.c b/src/openssl/openssl-1.1.1w-chevah1/test/dtlsv1listentest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/dtlsv1listentest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/dtlsv1listentest.c diff --git a/src/openssl/openssl-1.1.1w/test/ec_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ec_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ec_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ec_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ecdsatest.c b/src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ecdsatest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.c diff --git a/src/openssl/openssl-1.1.1w/test/ecdsatest.h b/src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ecdsatest.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.h diff --git a/src/openssl/openssl-1.1.1w/test/ecstresstest.c b/src/openssl/openssl-1.1.1w-chevah1/test/ecstresstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ecstresstest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ecstresstest.c diff --git a/src/openssl/openssl-1.1.1w/test/ectest.c b/src/openssl/openssl-1.1.1w-chevah1/test/ectest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ectest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ectest.c diff --git a/src/openssl/openssl-1.1.1w/test/enginetest.c b/src/openssl/openssl-1.1.1w-chevah1/test/enginetest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/enginetest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/enginetest.c diff --git a/src/openssl/openssl-1.1.1w/test/errtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/errtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/errtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/errtest.c diff --git a/src/openssl/openssl-1.1.1w/test/evp_extra_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/evp_extra_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/evp_extra_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/evp_extra_test.c diff --git a/src/openssl/openssl-1.1.1w/test/evp_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/evp_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/evp_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/evp_test.c diff --git a/src/openssl/openssl-1.1.1w/test/evp_test.h b/src/openssl/openssl-1.1.1w-chevah1/test/evp_test.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/evp_test.h rename to src/openssl/openssl-1.1.1w-chevah1/test/evp_test.h diff --git a/src/openssl/openssl-1.1.1w/test/exdatatest.c b/src/openssl/openssl-1.1.1w-chevah1/test/exdatatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/exdatatest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/exdatatest.c diff --git a/src/openssl/openssl-1.1.1w/test/exptest.c b/src/openssl/openssl-1.1.1w-chevah1/test/exptest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/exptest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/exptest.c diff --git a/src/openssl/openssl-1.1.1w/test/fatalerrtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/fatalerrtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/fatalerrtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/fatalerrtest.c diff --git a/src/openssl/openssl-1.1.1w/test/generate_buildtest.pl b/src/openssl/openssl-1.1.1w-chevah1/test/generate_buildtest.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/generate_buildtest.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/generate_buildtest.pl diff --git a/src/openssl/openssl-1.1.1w/test/generate_ssl_tests.pl b/src/openssl/openssl-1.1.1w-chevah1/test/generate_ssl_tests.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/generate_ssl_tests.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/generate_ssl_tests.pl diff --git a/src/openssl/openssl-1.1.1w/test/gmdifftest.c b/src/openssl/openssl-1.1.1w-chevah1/test/gmdifftest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/gmdifftest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/gmdifftest.c diff --git a/src/openssl/openssl-1.1.1w/test/gosttest.c b/src/openssl/openssl-1.1.1w-chevah1/test/gosttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/gosttest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/gosttest.c diff --git a/src/openssl/openssl-1.1.1w/test/handshake_helper.c b/src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/handshake_helper.c rename to src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.c diff --git a/src/openssl/openssl-1.1.1w/test/handshake_helper.h b/src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/handshake_helper.h rename to src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.h diff --git a/src/openssl/openssl-1.1.1w/test/hmactest.c b/src/openssl/openssl-1.1.1w-chevah1/test/hmactest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/hmactest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/hmactest.c diff --git a/src/openssl/openssl-1.1.1w/test/ideatest.c b/src/openssl/openssl-1.1.1w-chevah1/test/ideatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ideatest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ideatest.c diff --git a/src/openssl/openssl-1.1.1w/test/igetest.c b/src/openssl/openssl-1.1.1w-chevah1/test/igetest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/igetest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/igetest.c diff --git a/src/openssl/openssl-1.1.1w/test/lhash_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/lhash_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/lhash_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/lhash_test.c diff --git a/src/openssl/openssl-1.1.1w/test/md2test.c b/src/openssl/openssl-1.1.1w-chevah1/test/md2test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/md2test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/md2test.c diff --git a/src/openssl/openssl-1.1.1w/test/mdc2_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/mdc2_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/mdc2_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/mdc2_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/mdc2test.c b/src/openssl/openssl-1.1.1w-chevah1/test/mdc2test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/mdc2test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/mdc2test.c diff --git a/src/openssl/openssl-1.1.1w/test/memleaktest.c b/src/openssl/openssl-1.1.1w-chevah1/test/memleaktest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/memleaktest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/memleaktest.c diff --git a/src/openssl/openssl-1.1.1w/test/modes_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/modes_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/modes_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/modes_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Cert_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Cert_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cross_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cross_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cross_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cross_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Cert_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Cert_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND1.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND1.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND2.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND2.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND3.ors b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND3.ors diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w/test/ocspapitest.c b/src/openssl/openssl-1.1.1w-chevah1/test/ocspapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ocspapitest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ocspapitest.c diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.cc b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.cc similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.cc rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.cc diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.h b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.h diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/build.info b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/build.info rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/build.info diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/include/openssl/base.h b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/include/openssl/base.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/include/openssl/base.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/include/openssl/base.h diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_config.json b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_config.json similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_config.json rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_config.json diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_shim.cc b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_shim.cc similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_shim.cc rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_shim.cc diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.cc b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.cc similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.cc rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.cc diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.h b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.h diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.cc b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.cc similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.cc rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.cc diff --git a/src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.h b/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.h diff --git a/src/openssl/openssl-1.1.1w/test/packettest.c b/src/openssl/openssl-1.1.1w-chevah1/test/packettest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/packettest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/packettest.c diff --git a/src/openssl/openssl-1.1.1w/test/pbelutest.c b/src/openssl/openssl-1.1.1w-chevah1/test/pbelutest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pbelutest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/pbelutest.c diff --git a/src/openssl/openssl-1.1.1w/test/pemtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/pemtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pemtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/pemtest.c diff --git a/src/openssl/openssl-1.1.1w/test/pkcs7-1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/pkcs7-1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pkcs7-1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/pkcs7-1.pem diff --git a/src/openssl/openssl-1.1.1w/test/pkcs7.pem b/src/openssl/openssl-1.1.1w-chevah1/test/pkcs7.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pkcs7.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/pkcs7.pem diff --git a/src/openssl/openssl-1.1.1w/test/pkey_meth_kdf_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_kdf_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pkey_meth_kdf_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_kdf_test.c diff --git a/src/openssl/openssl-1.1.1w/test/pkey_meth_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pkey_meth_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_test.c diff --git a/src/openssl/openssl-1.1.1w/test/pkits-test.pl b/src/openssl/openssl-1.1.1w-chevah1/test/pkits-test.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/pkits-test.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/pkits-test.pl diff --git a/src/openssl/openssl-1.1.1w/test/poly1305_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/poly1305_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/poly1305_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/poly1305_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/rc2test.c b/src/openssl/openssl-1.1.1w-chevah1/test/rc2test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rc2test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rc2test.c diff --git a/src/openssl/openssl-1.1.1w/test/rc4test.c b/src/openssl/openssl-1.1.1w-chevah1/test/rc4test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rc4test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rc4test.c diff --git a/src/openssl/openssl-1.1.1w/test/rc5test.c b/src/openssl/openssl-1.1.1w-chevah1/test/rc5test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rc5test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rc5test.c diff --git a/src/openssl/openssl-1.1.1w/test/rdrand_sanitytest.c b/src/openssl/openssl-1.1.1w-chevah1/test/rdrand_sanitytest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rdrand_sanitytest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rdrand_sanitytest.c diff --git a/src/openssl/openssl-1.1.1w/test/recipes/01-test_abort.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_abort.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/01-test_abort.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_abort.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/01-test_sanity.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_sanity.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/01-test_sanity.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_sanity.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/01-test_symbol_presence.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_symbol_presence.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/01-test_symbol_presence.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_symbol_presence.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/01-test_test.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_test.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/01-test_test.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_test.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/02-test_errstr.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_errstr.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/02-test_errstr.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_errstr.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/02-test_internal_ctype.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_internal_ctype.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/02-test_internal_ctype.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_internal_ctype.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/02-test_lhash.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_lhash.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/02-test_lhash.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_lhash.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/02-test_ordinals.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_ordinals.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/02-test_ordinals.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_ordinals.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/02-test_stack.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_stack.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/02-test_stack.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_stack.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_exdata.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_exdata.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_exdata.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_exdata.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_asn1.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_asn1.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_asn1.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_asn1.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_chacha.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_chacha.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_chacha.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_chacha.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_curve448.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_curve448.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_curve448.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_curve448.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ec.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ec.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ec.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ec.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_mdc2.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_mdc2.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_mdc2.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_mdc2.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_modes.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_modes.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_modes.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_modes.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_poly1305.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_poly1305.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_poly1305.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_poly1305.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_siphash.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_siphash.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_siphash.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_siphash.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm2.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm2.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm2.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm2.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm4.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm4.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm4.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm4.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ssl_cert_table.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ssl_cert_table.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ssl_cert_table.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ssl_cert_table.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_x509.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_x509.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_x509.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_x509.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/03-test_ui.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_ui.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/03-test_ui.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_ui.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_decode.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_decode.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_decode.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_decode.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_encode.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_encode.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_encode.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_encode.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_string_table.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_string_table.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_string_table.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_string_table.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_bio_callback.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bio_callback.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_bio_callback.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bio_callback.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_bioprint.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bioprint.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_bioprint.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bioprint.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_err.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_err.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_err.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_err.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/NOTES b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/NOTES similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/NOTES rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/NOTES diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/beermug.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/beermug.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/beermug.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/beermug.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1023line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1023line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1023line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1023line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1024line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1024line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1024line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1024line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1025line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1025line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1025line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1025line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-255line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-255line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-255line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-255line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-256line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-256line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-256line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-256line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-257line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-257line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-257line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-257line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-blankline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-blankline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-blankline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-blankline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-comment.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-comment.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-comment.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-comment.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-earlypad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-earlypad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-earlypad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-earlypad.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-extrapad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-extrapad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-extrapad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-extrapad.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-infixwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-infixwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-infixwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-infixwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-junk.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-junk.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-junk.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-junk.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-longline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-longline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-longline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-longline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-misalignedpad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-misalignedpad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-misalignedpad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-misalignedpad.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-onecolumn.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-onecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-onecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-onecolumn.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortandlongline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortandlongline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortandlongline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortandlongline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-threecolumn.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-threecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-threecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-threecolumn.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/csr.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/csr.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/csr.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/csr.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1023line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1023line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1023line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1023line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1024line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1024line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1024line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1024line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1025line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1025line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1025line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1025line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-255line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-255line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-255line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-255line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-256line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-256line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-256line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-256line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-257line.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-257line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-257line.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-257line.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-blankline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-blankline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-blankline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-blankline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-comment.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-comment.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-comment.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-comment.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptedheader.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptedheader.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptedheader.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptedheader.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptiv.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptiv.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptiv.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptiv.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-earlypad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-earlypad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-earlypad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-earlypad.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-extrapad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-extrapad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-extrapad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-extrapad.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-junk.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-junk.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-junk.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-junk.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-longline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-longline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-longline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-longline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-misalignedpad.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-misalignedpad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-misalignedpad.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-misalignedpad.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onecolumn.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onecolumn.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-oneline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-oneline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-oneline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-oneline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onelineheader.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onelineheader.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onelineheader.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onelineheader.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortandlongline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortandlongline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortandlongline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortandlongline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortline.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortline.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortline.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-threecolumn.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-threecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-threecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-threecolumn.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsaparam.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsaparam.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsaparam.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsaparam.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/key.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/wellknown b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/wellknown similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/wellknown rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/wellknown diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_bf.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_bf.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_bf.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_bf.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_cast.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cast.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_cast.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cast.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_cmac.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cmac.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_cmac.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cmac.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_des.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_des.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_des.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_des.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_hmac.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_hmac.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_hmac.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_hmac.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_idea.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_idea.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_idea.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_idea.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_md2.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_md2.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_md2.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_md2.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_mdc2.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_mdc2.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_mdc2.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_mdc2.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_rand.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rand.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_rand.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rand.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_rc2.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc2.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_rc2.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc2.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_rc4.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc4.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_rc4.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc4.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/05-test_rc5.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc5.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/05-test_rc5.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc5.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/06-test-rdrand.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/06-test-rdrand.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/06-test-rdrand.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/06-test-rdrand.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnexp.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnexp.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnexp.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnexp.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bngcd.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bngcd.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bngcd.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bngcd.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmod.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmod.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmod.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmod.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmul.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmul.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmul.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmul.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnshift.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnshift.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnshift.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnshift.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnsum.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnsum.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnsum.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnsum.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/10-test_exp.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_exp.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/10-test_exp.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_exp.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_dh.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dh.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_dh.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dh.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_dsa.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_dsa.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dsa.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ec.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ec.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ec.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ec.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecdsa.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecdsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecdsa.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecdsa.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_genec.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genec.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_genec.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genec.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_genrsa.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genrsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_genrsa.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genrsa.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa_data/plain_text b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa_data/plain_text similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa_data/plain_text rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa_data/plain_text diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_out_option.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_out_option.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_out_option.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_out_option.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_rsa.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_rsa.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsa.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/15-test_rsapss.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsapss.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/15-test_rsapss.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsapss.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/20-test_dgst.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_dgst.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/20-test_dgst.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_dgst.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/20-test_enc.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/20-test_enc.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/20-test_enc_more.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc_more.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/20-test_enc_more.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc_more.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/20-test_passwd.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_passwd.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/20-test_passwd.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_passwd.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_crl.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_crl.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_crl.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_crl.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_d2i.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_d2i.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_d2i.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_d2i.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_pkcs7.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_pkcs7.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_pkcs7.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_pkcs7.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_req.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_req.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_req.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_req.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_sid.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_sid.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_sid.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_sid.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_verify.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_verify.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_verify.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_verify.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/25-test_x509.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_x509.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/25-test_x509.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_x509.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_afalg.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_afalg.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_afalg.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_afalg.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_engine.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_engine.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_engine.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_engine.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpcase.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpcase.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpcase.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpcase.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpccmcavs.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpccmcavs.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpccmcavs.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpccmcavs.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpciph.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpciph.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpciph.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpciph.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpdigest.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpdigest.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpdigest.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpdigest.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpencod.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpencod.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpencod.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpencod.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpkdf.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpkdf.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpkdf.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpkdf.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpmac.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpmac.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpmac.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpmac.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppbe.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppbe.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppbe.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppbe.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey_ecc.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey_ecc.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey_ecc.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey_ecc.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_extra.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_extra.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_extra.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_extra.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_pbelu.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pbelu.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_pbelu.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pbelu.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth_kdf.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth_kdf.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth_kdf.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth_kdf.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/40-test_rehash.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/40-test_rehash.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/40-test_rehash.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/40-test_rehash.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_check_cert_pkey.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_check_cert_pkey.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_check_cert_pkey.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_check_cert_pkey.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_dup_cert.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_dup_cert.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_dup_cert.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_dup_cert.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_store.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_store.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_store.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_store.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_time.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_time.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_time.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_time.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_asyncio.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_asyncio.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_asyncio.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_asyncio.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_bad_dtls.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_bad_dtls.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_bad_dtls.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_bad_dtls.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_clienthello.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_clienthello.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_clienthello.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_clienthello.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_comp.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_comp.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_comp.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_comp.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_key_share.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_key_share.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_key_share.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_key_share.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_packet.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_packet.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_packet.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_packet.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_recordlen.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_recordlen.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_recordlen.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_recordlen.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_renegotiation.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_renegotiation.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_renegotiation.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_renegotiation.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_servername.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_servername.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_servername.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_servername.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcbcpadding.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcbcpadding.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcbcpadding.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcbcpadding.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcertstatus.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcertstatus.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcertstatus.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcertstatus.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslextension.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslextension.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslextension.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslextension.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslmessages.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslmessages.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslmessages.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslmessages.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslrecords.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslrecords.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslrecords.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslrecords.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsessiontick.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsessiontick.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsessiontick.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsessiontick.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsigalgs.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsigalgs.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsigalgs.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsigalgs.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsignature.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsignature.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsignature.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsignature.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslskewith0p.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslskewith0p.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslskewith0p.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslskewith0p.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslversions.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslversions.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslversions.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslversions.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslvertol.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslvertol.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_sslvertol.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslvertol.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13alerts.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13alerts.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13alerts.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13alerts.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13cookie.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13cookie.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13cookie.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13cookie.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13downgrade.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13downgrade.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13downgrade.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13downgrade.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13hrr.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13hrr.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13hrr.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13hrr.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13kexmodes.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13kexmodes.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13kexmodes.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13kexmodes.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13messages.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13messages.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13messages.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13messages.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13psk.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13psk.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13psk.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13psk.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_tlsextms.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tlsextms.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_tlsextms.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tlsextms.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_verify_extra.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_verify_extra.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_verify_extra.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_verify_extra.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/70-test_wpacket.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_wpacket.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/70-test_wpacket.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_wpacket.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ca.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ca.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ca.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ca.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherbytes.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherbytes.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherbytes.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherbytes.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherlist.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherlist.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherlist.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherlist.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ciphername.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ciphername.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ciphername.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ciphername.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cms.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/bad_signtime_attr.cms b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/bad_signtime_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/bad_signtime_attr.cms rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/bad_signtime_attr.cms diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/ct_multiple_attr.cms b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/ct_multiple_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/ct_multiple_attr.cms rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/ct_multiple_attr.cms diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_ct_attr.cms b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_ct_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_ct_attr.cms rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_ct_attr.cms diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_md_attr.cms b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_md_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_md_attr.cms rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_md_attr.cms diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_cmsapi.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cmsapi.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_cmsapi.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cmsapi.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ct.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ct.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ct.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ct.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_dane.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dane.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_dane.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dane.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls_mtu.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls_mtu.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls_mtu.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls_mtu.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_dtlsv1listen.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtlsv1listen.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_dtlsv1listen.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtlsv1listen.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/cert.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/cert.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/cert.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/key.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/key.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/key.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_pkcs12.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_pkcs12.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_pkcs12.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_pkcs12.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_leaf.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_leaf.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_leaf.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_policy_tree.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_policy_tree.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_policy_tree.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_policy_tree.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_leaf.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_leaf.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_leaf.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_policy_tree.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_policy_tree.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_policy_tree.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_policy_tree.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_new.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_new.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_new.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_new.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_old.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_old.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_old.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_old.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_test_ctx.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_test_ctx.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_test_ctx.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_test_ctx.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_sslcorrupt.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_sslcorrupt.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_sslcorrupt.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_sslcorrupt.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_tsa.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_tsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_tsa.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_tsa.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_x509aux.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_x509aux.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/80-test_x509aux.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_x509aux.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_asn1_time.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_asn1_time.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_asn1_time.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_asn1_time.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_async.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_async.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_async.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_async.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_enc.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_enc.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_enc.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_enc.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_memleak.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_memleak.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_memleak.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_memleak.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_constant_time.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_constant_time.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_constant_time.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_constant_time.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_fatalerr.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_fatalerr.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_fatalerr.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_fatalerr.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gmdiff.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gmdiff.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gmdiff.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gmdiff.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gost.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/gost.conf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/gost.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/gost.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/gost.conf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2001.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2001.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2001.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2001.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2012.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2012.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2012.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2012.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2001.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2001.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2001.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2001.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2012.pem b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2012.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2012.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2012.pem diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_ige.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_ige.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_ige.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_ige.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes1.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes1.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes1.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes1.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes2.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes2.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes2.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes2.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-broken.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-broken.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-broken.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-broken.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq-ws.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq-ws.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq-ws.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq-ws.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-file.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-file.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-file.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-file.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes-file.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes-file.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes-file.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes-file.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_memleak.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_memleak.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_memleak.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_memleak.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_overhead.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_overhead.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_overhead.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_overhead.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_secmem.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_secmem.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_secmem.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_secmem.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_shlibload.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_shlibload.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_shlibload.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_shlibload.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_srp.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_srp.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_srp.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_srp.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi_data/passwd.txt b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi_data/passwd.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi_data/passwd.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi_data/passwd.txt diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_sslbuffers.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslbuffers.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_sslbuffers.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslbuffers.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_store.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_store.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/ca.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/ca.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/ca.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/user.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/user.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/user.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/user.cnf diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_sysdefault.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sysdefault.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_sysdefault.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sysdefault.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_threads.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_threads.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_threads.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_threads.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_time_offset.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_time_offset.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_time_offset.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_time_offset.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13ccs.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13ccs.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13ccs.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13ccs.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13encryption.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13encryption.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13encryption.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13encryption.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13secrets.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13secrets.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13secrets.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13secrets.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/90-test_v3name.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_v3name.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/90-test_v3name.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_v3name.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_boringssl.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_boringssl.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/95-test_external_boringssl.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_boringssl.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5_data/krb5.sh b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5_data/krb5.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5_data/krb5.sh rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5_data/krb5.sh diff --git a/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca_data/cryptography.sh b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca_data/cryptography.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca_data/cryptography.sh rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca_data/cryptography.sh diff --git a/src/openssl/openssl-1.1.1w/test/recipes/99-test_ecstress.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_ecstress.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/99-test_ecstress.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_ecstress.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/99-test_fuzz.t b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_fuzz.t similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/99-test_fuzz.t rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_fuzz.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/ocsp-response.der b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/ocsp-response.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/ocsp-response.der rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/ocsp-response.der diff --git a/src/openssl/openssl-1.1.1w/test/recipes/tconversion.pl b/src/openssl/openssl-1.1.1w-chevah1/test/recipes/tconversion.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recipes/tconversion.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/recipes/tconversion.pl diff --git a/src/openssl/openssl-1.1.1w/test/recordlentest.c b/src/openssl/openssl-1.1.1w-chevah1/test/recordlentest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/recordlentest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/recordlentest.c diff --git a/src/openssl/openssl-1.1.1w/test/rsa_complex.c b/src/openssl/openssl-1.1.1w-chevah1/test/rsa_complex.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rsa_complex.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rsa_complex.c diff --git a/src/openssl/openssl-1.1.1w/test/rsa_mp_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/rsa_mp_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rsa_mp_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rsa_mp_test.c diff --git a/src/openssl/openssl-1.1.1w/test/rsa_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/rsa_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/rsa_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/rsa_test.c diff --git a/src/openssl/openssl-1.1.1w/test/run_tests.pl b/src/openssl/openssl-1.1.1w-chevah1/test/run_tests.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/run_tests.pl rename to src/openssl/openssl-1.1.1w-chevah1/test/run_tests.pl diff --git a/src/openssl/openssl-1.1.1w/test/sanitytest.c b/src/openssl/openssl-1.1.1w-chevah1/test/sanitytest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sanitytest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sanitytest.c diff --git a/src/openssl/openssl-1.1.1w/test/secmemtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/secmemtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/secmemtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/secmemtest.c diff --git a/src/openssl/openssl-1.1.1w/test/serverinfo.pem b/src/openssl/openssl-1.1.1w-chevah1/test/serverinfo.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/serverinfo.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/serverinfo.pem diff --git a/src/openssl/openssl-1.1.1w/test/serverinfo2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/serverinfo2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/serverinfo2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/serverinfo2.pem diff --git a/src/openssl/openssl-1.1.1w/test/servername_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/servername_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/servername_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/servername_test.c diff --git a/src/openssl/openssl-1.1.1w/test/session.pem b/src/openssl/openssl-1.1.1w-chevah1/test/session.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/session.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/session.pem diff --git a/src/openssl/openssl-1.1.1w/test/shibboleth.pfx b/src/openssl/openssl-1.1.1w-chevah1/test/shibboleth.pfx similarity index 100% rename from src/openssl/openssl-1.1.1w/test/shibboleth.pfx rename to src/openssl/openssl-1.1.1w-chevah1/test/shibboleth.pfx diff --git a/src/openssl/openssl-1.1.1w/test/shlibloadtest.c b/src/openssl/openssl-1.1.1w-chevah1/test/shlibloadtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/shlibloadtest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/shlibloadtest.c diff --git a/src/openssl/openssl-1.1.1w/test/siphash_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/siphash_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/siphash_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/siphash_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/sm2_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/sm2_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sm2_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sm2_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/sm4_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/sm4_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sm4_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sm4_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/smcont.txt b/src/openssl/openssl-1.1.1w-chevah1/test/smcont.txt similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smcont.txt rename to src/openssl/openssl-1.1.1w-chevah1/test/smcont.txt diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/badrsa.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/badrsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/badrsa.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/badrsa.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/ca.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/ca.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/ca.cnf diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/mksmime-certs.sh b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/mksmime-certs.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/mksmime-certs.sh rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/mksmime-certs.sh diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smdh.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdh.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smdh.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdh.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smdsa1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smdsa1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa1.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smdsa2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smdsa2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa2.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smdsa3.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smdsa3.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa3.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smdsap.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsap.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smdsap.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsap.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smec1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smec1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec1.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smec2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smec2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec2.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smec3.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smec3.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec3.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smroot.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smroot.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smroot.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smroot.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smrsa1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smrsa1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa1.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smrsa2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smrsa2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa2.pem diff --git a/src/openssl/openssl-1.1.1w/test/smime-certs/smrsa3.pem b/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/smime-certs/smrsa3.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa3.pem diff --git a/src/openssl/openssl-1.1.1w/test/srptest.c b/src/openssl/openssl-1.1.1w-chevah1/test/srptest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/srptest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/srptest.c diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf.in b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf.in rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf.in diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/protocol_version.pm b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/protocol_version.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/protocol_version.pm rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/protocol_version.pm diff --git a/src/openssl/openssl-1.1.1w/test/ssl-tests/ssltests_base.pm b/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/ssltests_base.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl-tests/ssltests_base.pm rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/ssltests_base.pm diff --git a/src/openssl/openssl-1.1.1w/test/ssl_cert_table_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_cert_table_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_cert_table_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_cert_table_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ssl_ctx_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_ctx_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_ctx_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_ctx_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ssl_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ssl_test.tmpl b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_test.tmpl rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.tmpl diff --git a/src/openssl/openssl-1.1.1w/test/ssl_test_ctx.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_test_ctx.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.c diff --git a/src/openssl/openssl-1.1.1w/test/ssl_test_ctx.h b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_test_ctx.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.h diff --git a/src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.c diff --git a/src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.conf b/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.conf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.conf rename to src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.conf diff --git a/src/openssl/openssl-1.1.1w/test/sslapitest.c b/src/openssl/openssl-1.1.1w-chevah1/test/sslapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sslapitest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sslapitest.c diff --git a/src/openssl/openssl-1.1.1w/test/sslbuffertest.c b/src/openssl/openssl-1.1.1w-chevah1/test/sslbuffertest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sslbuffertest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sslbuffertest.c diff --git a/src/openssl/openssl-1.1.1w/test/sslcorrupttest.c b/src/openssl/openssl-1.1.1w-chevah1/test/sslcorrupttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sslcorrupttest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sslcorrupttest.c diff --git a/src/openssl/openssl-1.1.1w/test/ssltest_old.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssltest_old.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssltest_old.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssltest_old.c diff --git a/src/openssl/openssl-1.1.1w/test/ssltestlib.c b/src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssltestlib.c rename to src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.c diff --git a/src/openssl/openssl-1.1.1w/test/ssltestlib.h b/src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/ssltestlib.h rename to src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.h diff --git a/src/openssl/openssl-1.1.1w/test/stack_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/stack_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/stack_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/stack_test.c diff --git a/src/openssl/openssl-1.1.1w/test/sysdefault.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/sysdefault.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sysdefault.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/sysdefault.cnf diff --git a/src/openssl/openssl-1.1.1w/test/sysdefaulttest.c b/src/openssl/openssl-1.1.1w-chevah1/test/sysdefaulttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/sysdefaulttest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/sysdefaulttest.c diff --git a/src/openssl/openssl-1.1.1w/test/test.cnf b/src/openssl/openssl-1.1.1w-chevah1/test/test.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w/test/test.cnf rename to src/openssl/openssl-1.1.1w-chevah1/test/test.cnf diff --git a/src/openssl/openssl-1.1.1w/test/test_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/test_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/test_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/test_test.c diff --git a/src/openssl/openssl-1.1.1w/test/testcrl.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testcrl.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testcrl.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testcrl.pem diff --git a/src/openssl/openssl-1.1.1w/test/testdsa.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testdsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testdsa.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testdsa.pem diff --git a/src/openssl/openssl-1.1.1w/test/testdsapub.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testdsapub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testdsapub.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testdsapub.pem diff --git a/src/openssl/openssl-1.1.1w/test/testec-p256.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testec-p256.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testec-p256.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testec-p256.pem diff --git a/src/openssl/openssl-1.1.1w/test/testecpub-p256.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testecpub-p256.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testecpub-p256.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testecpub-p256.pem diff --git a/src/openssl/openssl-1.1.1w/test/tested25519.pem b/src/openssl/openssl-1.1.1w-chevah1/test/tested25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tested25519.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/tested25519.pem diff --git a/src/openssl/openssl-1.1.1w/test/tested25519pub.pem b/src/openssl/openssl-1.1.1w-chevah1/test/tested25519pub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tested25519pub.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/tested25519pub.pem diff --git a/src/openssl/openssl-1.1.1w/test/tested448.pem b/src/openssl/openssl-1.1.1w-chevah1/test/tested448.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tested448.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/tested448.pem diff --git a/src/openssl/openssl-1.1.1w/test/tested448pub.pem b/src/openssl/openssl-1.1.1w-chevah1/test/tested448pub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tested448pub.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/tested448pub.pem diff --git a/src/openssl/openssl-1.1.1w/test/testp7.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testp7.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testp7.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testp7.pem diff --git a/src/openssl/openssl-1.1.1w/test/testreq2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testreq2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testreq2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testreq2.pem diff --git a/src/openssl/openssl-1.1.1w/test/testrsa.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testrsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testrsa.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testrsa.pem diff --git a/src/openssl/openssl-1.1.1w/test/testrsa_withattrs.der b/src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.der similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testrsa_withattrs.der rename to src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.der diff --git a/src/openssl/openssl-1.1.1w/test/testrsa_withattrs.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testrsa_withattrs.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.pem diff --git a/src/openssl/openssl-1.1.1w/test/testrsapub.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testrsapub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testrsapub.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testrsapub.pem diff --git a/src/openssl/openssl-1.1.1w/test/testsid.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testsid.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testsid.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testsid.pem diff --git a/src/openssl/openssl-1.1.1w/test/testutil.h b/src/openssl/openssl-1.1.1w-chevah1/test/testutil.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil.h rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil.h diff --git a/src/openssl/openssl-1.1.1w/test/testutil/basic_output.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/basic_output.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/basic_output.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/basic_output.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/cb.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/cb.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/cb.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/cb.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/driver.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/driver.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/driver.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/driver.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/format_output.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/format_output.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/format_output.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/format_output.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/main.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/main.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/main.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/main.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/output.h b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/output.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/output.h rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/output.h diff --git a/src/openssl/openssl-1.1.1w/test/testutil/output_helpers.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/output_helpers.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/output_helpers.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/output_helpers.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/random.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/random.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/random.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/random.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/stanza.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/stanza.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/stanza.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/stanza.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/tap_bio.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/tap_bio.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/tap_bio.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/tap_bio.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/test_cleanup.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/test_cleanup.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/test_cleanup.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/test_cleanup.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/tests.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/tests.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/tests.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/tests.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/testutil_init.c b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/testutil_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/testutil_init.c rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/testutil_init.c diff --git a/src/openssl/openssl-1.1.1w/test/testutil/tu_local.h b/src/openssl/openssl-1.1.1w-chevah1/test/testutil/tu_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testutil/tu_local.h rename to src/openssl/openssl-1.1.1w-chevah1/test/testutil/tu_local.h diff --git a/src/openssl/openssl-1.1.1w/test/testx509.pem b/src/openssl/openssl-1.1.1w-chevah1/test/testx509.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/testx509.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/testx509.pem diff --git a/src/openssl/openssl-1.1.1w/test/threadstest.c b/src/openssl/openssl-1.1.1w-chevah1/test/threadstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/threadstest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/threadstest.c diff --git a/src/openssl/openssl-1.1.1w/test/time_offset_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/time_offset_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/time_offset_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/time_offset_test.c diff --git a/src/openssl/openssl-1.1.1w/test/tls13ccstest.c b/src/openssl/openssl-1.1.1w-chevah1/test/tls13ccstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tls13ccstest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/tls13ccstest.c diff --git a/src/openssl/openssl-1.1.1w/test/tls13encryptiontest.c b/src/openssl/openssl-1.1.1w-chevah1/test/tls13encryptiontest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tls13encryptiontest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/tls13encryptiontest.c diff --git a/src/openssl/openssl-1.1.1w/test/tls13secretstest.c b/src/openssl/openssl-1.1.1w-chevah1/test/tls13secretstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/tls13secretstest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/tls13secretstest.c diff --git a/src/openssl/openssl-1.1.1w/test/uitest.c b/src/openssl/openssl-1.1.1w-chevah1/test/uitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/uitest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/uitest.c diff --git a/src/openssl/openssl-1.1.1w/test/v3-cert1.pem b/src/openssl/openssl-1.1.1w-chevah1/test/v3-cert1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/v3-cert1.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/v3-cert1.pem diff --git a/src/openssl/openssl-1.1.1w/test/v3-cert2.pem b/src/openssl/openssl-1.1.1w-chevah1/test/v3-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w/test/v3-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah1/test/v3-cert2.pem diff --git a/src/openssl/openssl-1.1.1w/test/v3ext.c b/src/openssl/openssl-1.1.1w-chevah1/test/v3ext.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/v3ext.c rename to src/openssl/openssl-1.1.1w-chevah1/test/v3ext.c diff --git a/src/openssl/openssl-1.1.1w/test/v3nametest.c b/src/openssl/openssl-1.1.1w-chevah1/test/v3nametest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/v3nametest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/v3nametest.c diff --git a/src/openssl/openssl-1.1.1w/test/verify_extra_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/verify_extra_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/verify_extra_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/verify_extra_test.c diff --git a/src/openssl/openssl-1.1.1w/test/versions.c b/src/openssl/openssl-1.1.1w-chevah1/test/versions.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/versions.c rename to src/openssl/openssl-1.1.1w-chevah1/test/versions.c diff --git a/src/openssl/openssl-1.1.1w/test/wpackettest.c b/src/openssl/openssl-1.1.1w-chevah1/test/wpackettest.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/wpackettest.c rename to src/openssl/openssl-1.1.1w-chevah1/test/wpackettest.c diff --git a/src/openssl/openssl-1.1.1w/test/x509_check_cert_pkey_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/x509_check_cert_pkey_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/x509_check_cert_pkey_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/x509_check_cert_pkey_test.c diff --git a/src/openssl/openssl-1.1.1w/test/x509_dup_cert_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/x509_dup_cert_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/x509_dup_cert_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/x509_dup_cert_test.c diff --git a/src/openssl/openssl-1.1.1w/test/x509_internal_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/x509_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/x509_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/x509_internal_test.c diff --git a/src/openssl/openssl-1.1.1w/test/x509_time_test.c b/src/openssl/openssl-1.1.1w-chevah1/test/x509_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/x509_time_test.c rename to src/openssl/openssl-1.1.1w-chevah1/test/x509_time_test.c diff --git a/src/openssl/openssl-1.1.1w/test/x509aux.c b/src/openssl/openssl-1.1.1w-chevah1/test/x509aux.c similarity index 100% rename from src/openssl/openssl-1.1.1w/test/x509aux.c rename to src/openssl/openssl-1.1.1w-chevah1/test/x509aux.c diff --git a/src/openssl/openssl-1.1.1w/tools/build.info b/src/openssl/openssl-1.1.1w-chevah1/tools/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/tools/build.info rename to src/openssl/openssl-1.1.1w-chevah1/tools/build.info diff --git a/src/openssl/openssl-1.1.1w/tools/c_rehash.in b/src/openssl/openssl-1.1.1w-chevah1/tools/c_rehash.in similarity index 100% rename from src/openssl/openssl-1.1.1w/tools/c_rehash.in rename to src/openssl/openssl-1.1.1w-chevah1/tools/c_rehash.in diff --git a/src/openssl/openssl-1.1.1w/util/add-depends.pl b/src/openssl/openssl-1.1.1w-chevah1/util/add-depends.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/add-depends.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/add-depends.pl diff --git a/src/openssl/openssl-1.1.1w/util/build.info b/src/openssl/openssl-1.1.1w-chevah1/util/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w/util/build.info rename to src/openssl/openssl-1.1.1w-chevah1/util/build.info diff --git a/src/openssl/openssl-1.1.1w/util/cavs-to-evptest.pl b/src/openssl/openssl-1.1.1w-chevah1/util/cavs-to-evptest.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/cavs-to-evptest.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/cavs-to-evptest.pl diff --git a/src/openssl/openssl-1.1.1w/util/check-malloc-errs b/src/openssl/openssl-1.1.1w-chevah1/util/check-malloc-errs similarity index 100% rename from src/openssl/openssl-1.1.1w/util/check-malloc-errs rename to src/openssl/openssl-1.1.1w-chevah1/util/check-malloc-errs diff --git a/src/openssl/openssl-1.1.1w/util/ck_errf.pl b/src/openssl/openssl-1.1.1w-chevah1/util/ck_errf.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/ck_errf.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/ck_errf.pl diff --git a/src/openssl/openssl-1.1.1w/util/copy.pl b/src/openssl/openssl-1.1.1w-chevah1/util/copy.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/copy.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/copy.pl diff --git a/src/openssl/openssl-1.1.1w/util/dofile.pl b/src/openssl/openssl-1.1.1w-chevah1/util/dofile.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/dofile.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/dofile.pl diff --git a/src/openssl/openssl-1.1.1w/util/echo.pl b/src/openssl/openssl-1.1.1w-chevah1/util/echo.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/echo.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/echo.pl diff --git a/src/openssl/openssl-1.1.1w/util/find-doc-nits b/src/openssl/openssl-1.1.1w-chevah1/util/find-doc-nits similarity index 100% rename from src/openssl/openssl-1.1.1w/util/find-doc-nits rename to src/openssl/openssl-1.1.1w-chevah1/util/find-doc-nits diff --git a/src/openssl/openssl-1.1.1w/util/find-unused-errs b/src/openssl/openssl-1.1.1w-chevah1/util/find-unused-errs similarity index 100% rename from src/openssl/openssl-1.1.1w/util/find-unused-errs rename to src/openssl/openssl-1.1.1w-chevah1/util/find-unused-errs diff --git a/src/openssl/openssl-1.1.1w/util/fix-includes b/src/openssl/openssl-1.1.1w-chevah1/util/fix-includes similarity index 100% rename from src/openssl/openssl-1.1.1w/util/fix-includes rename to src/openssl/openssl-1.1.1w-chevah1/util/fix-includes diff --git a/src/openssl/openssl-1.1.1w/util/fix-includes.sed b/src/openssl/openssl-1.1.1w-chevah1/util/fix-includes.sed similarity index 100% rename from src/openssl/openssl-1.1.1w/util/fix-includes.sed rename to src/openssl/openssl-1.1.1w-chevah1/util/fix-includes.sed diff --git a/src/openssl/openssl-1.1.1w/util/indent.pro b/src/openssl/openssl-1.1.1w-chevah1/util/indent.pro similarity index 100% rename from src/openssl/openssl-1.1.1w/util/indent.pro rename to src/openssl/openssl-1.1.1w-chevah1/util/indent.pro diff --git a/src/openssl/openssl-1.1.1w/util/libcrypto.num b/src/openssl/openssl-1.1.1w-chevah1/util/libcrypto.num similarity index 100% rename from src/openssl/openssl-1.1.1w/util/libcrypto.num rename to src/openssl/openssl-1.1.1w-chevah1/util/libcrypto.num diff --git a/src/openssl/openssl-1.1.1w/util/libssl.num b/src/openssl/openssl-1.1.1w-chevah1/util/libssl.num similarity index 100% rename from src/openssl/openssl-1.1.1w/util/libssl.num rename to src/openssl/openssl-1.1.1w-chevah1/util/libssl.num diff --git a/src/openssl/openssl-1.1.1w/util/local_shlib.com.in b/src/openssl/openssl-1.1.1w-chevah1/util/local_shlib.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w/util/local_shlib.com.in rename to src/openssl/openssl-1.1.1w-chevah1/util/local_shlib.com.in diff --git a/src/openssl/openssl-1.1.1w/util/mkbuildinf.pl b/src/openssl/openssl-1.1.1w-chevah1/util/mkbuildinf.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/mkbuildinf.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/mkbuildinf.pl diff --git a/src/openssl/openssl-1.1.1w/util/mkdef.pl b/src/openssl/openssl-1.1.1w-chevah1/util/mkdef.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/mkdef.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/mkdef.pl diff --git a/src/openssl/openssl-1.1.1w/util/mkdir-p.pl b/src/openssl/openssl-1.1.1w-chevah1/util/mkdir-p.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/mkdir-p.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/mkdir-p.pl diff --git a/src/openssl/openssl-1.1.1w/util/mkerr.pl b/src/openssl/openssl-1.1.1w-chevah1/util/mkerr.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/mkerr.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/mkerr.pl diff --git a/src/openssl/openssl-1.1.1w/util/mkrc.pl b/src/openssl/openssl-1.1.1w-chevah1/util/mkrc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/mkrc.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/mkrc.pl diff --git a/src/openssl/openssl-1.1.1w/util/openssl-format-source b/src/openssl/openssl-1.1.1w-chevah1/util/openssl-format-source similarity index 100% rename from src/openssl/openssl-1.1.1w/util/openssl-format-source rename to src/openssl/openssl-1.1.1w-chevah1/util/openssl-format-source diff --git a/src/openssl/openssl-1.1.1w/util/openssl-update-copyright b/src/openssl/openssl-1.1.1w-chevah1/util/openssl-update-copyright similarity index 100% rename from src/openssl/openssl-1.1.1w/util/openssl-update-copyright rename to src/openssl/openssl-1.1.1w-chevah1/util/openssl-update-copyright diff --git a/src/openssl/openssl-1.1.1w/util/opensslwrap.sh b/src/openssl/openssl-1.1.1w-chevah1/util/opensslwrap.sh similarity index 100% rename from src/openssl/openssl-1.1.1w/util/opensslwrap.sh rename to src/openssl/openssl-1.1.1w-chevah1/util/opensslwrap.sh diff --git a/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Glob.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Glob.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Glob.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Glob.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Simple.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Simple.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Simple.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Simple.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Utils.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Utils.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Utils.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Utils.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Util/Pod.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Util/Pod.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Util/Pod.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Util/Pod.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/copyright.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/copyright.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/OpenSSL/copyright.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/copyright.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Alert.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Alert.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Alert.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Alert.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Certificate.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Certificate.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Certificate.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Certificate.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateRequest.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateRequest.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateRequest.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateRequest.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateVerify.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateVerify.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateVerify.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateVerify.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ClientHello.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ClientHello.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ClientHello.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ClientHello.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/EncryptedExtensions.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/EncryptedExtensions.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/EncryptedExtensions.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/EncryptedExtensions.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Message.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Message.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Message.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Message.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/NewSessionTicket.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/NewSessionTicket.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/NewSessionTicket.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/NewSessionTicket.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Proxy.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Proxy.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Proxy.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Proxy.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Record.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Record.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Record.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Record.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerHello.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerHello.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerHello.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerHello.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerKeyExchange.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerKeyExchange.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerKeyExchange.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerKeyExchange.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/checkhandshake.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/checkhandshake.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/checkhandshake.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/checkhandshake.pm diff --git a/src/openssl/openssl-1.1.1w/util/perl/with_fallback.pm b/src/openssl/openssl-1.1.1w-chevah1/util/perl/with_fallback.pm similarity index 100% rename from src/openssl/openssl-1.1.1w/util/perl/with_fallback.pm rename to src/openssl/openssl-1.1.1w-chevah1/util/perl/with_fallback.pm diff --git a/src/openssl/openssl-1.1.1w/util/private.num b/src/openssl/openssl-1.1.1w-chevah1/util/private.num similarity index 100% rename from src/openssl/openssl-1.1.1w/util/private.num rename to src/openssl/openssl-1.1.1w-chevah1/util/private.num diff --git a/src/openssl/openssl-1.1.1w/util/process_docs.pl b/src/openssl/openssl-1.1.1w-chevah1/util/process_docs.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/process_docs.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/process_docs.pl diff --git a/src/openssl/openssl-1.1.1w/util/shlib_wrap.sh.in b/src/openssl/openssl-1.1.1w-chevah1/util/shlib_wrap.sh.in similarity index 100% rename from src/openssl/openssl-1.1.1w/util/shlib_wrap.sh.in rename to src/openssl/openssl-1.1.1w-chevah1/util/shlib_wrap.sh.in diff --git a/src/openssl/openssl-1.1.1w/util/su-filter.pl b/src/openssl/openssl-1.1.1w-chevah1/util/su-filter.pl similarity index 100% rename from src/openssl/openssl-1.1.1w/util/su-filter.pl rename to src/openssl/openssl-1.1.1w-chevah1/util/su-filter.pl diff --git a/src/openssl/openssl-1.1.1w/util/unlocal_shlib.com.in b/src/openssl/openssl-1.1.1w-chevah1/util/unlocal_shlib.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w/util/unlocal_shlib.com.in rename to src/openssl/openssl-1.1.1w-chevah1/util/unlocal_shlib.com.in From 97458f6ebb49b55a28425857412c11f03f9618f8 Mon Sep 17 00:00:00 2001 From: dumol Date: Mon, 29 Jul 2024 10:52:23 +0000 Subject: [PATCH 06/42] Updated SQLite sources and DLLs to 3.46.0. --- .../{SQLite-3.43.1 => SQLite-3.46.0}/INSTALL | 0 .../Makefile.am | 0 .../Makefile.fallback | 0 .../Makefile.in | 0 .../Makefile.msc | 22 +- .../README.txt | 0 .../Replace.cs | 0 .../aclocal.m4 | 0 .../{SQLite-3.43.1 => SQLite-3.46.0}/compile | 0 .../config.guess | 0 .../config.sub | 0 .../configure | 20 +- .../configure.ac | 2 +- .../{SQLite-3.43.1 => SQLite-3.46.0}/depcomp | 0 .../install-sh | 0 .../ltmain.sh | 0 .../{SQLite-3.43.1 => SQLite-3.46.0}/missing | 0 .../{SQLite-3.43.1 => SQLite-3.46.0}/shell.c | 9648 +++++--- .../sqlite3.1 | 0 .../sqlite3.c | 20449 +++++++++++----- .../sqlite3.h | 457 +- .../sqlite3.pc.in | 0 .../sqlite3.rc | 0 .../sqlite3ext.h | 6 + .../sqlite3rc.h | 2 +- .../tea/Makefile.in | 0 .../tea/README | 0 .../tea/aclocal.m4 | 0 .../tea/configure | 20 +- .../tea/configure.ac | 2 +- .../tea/doc/sqlite3.n | 0 .../tea/generic/tclsqlite3.c | 0 .../tea/license.terms | 0 .../tea/pkgIndex.tcl.in | 0 .../tea/tclconfig/install-sh | 0 .../tea/tclconfig/tcl.m4 | 0 .../tea/win/makefile.vc | 0 .../tea/win/nmakehlp.c | 0 .../tea/win/rules.vc | 0 src/sqlite/sqlite3-3.43.1-x64.dll | Bin 2973696 -> 0 bytes src/sqlite/sqlite3-3.43.1-x86.dll | Bin 1147327 -> 0 bytes src/sqlite/sqlite3-3.46.0-x64.dll | Bin 0 -> 3181056 bytes src/sqlite/sqlite3-3.46.0-x86.dll | Bin 0 -> 2489856 bytes 43 files changed, 20149 insertions(+), 10479 deletions(-) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/INSTALL (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/Makefile.am (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/Makefile.fallback (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/Makefile.in (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/Makefile.msc (97%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/README.txt (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/Replace.cs (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/aclocal.m4 (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/compile (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/config.guess (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/config.sub (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/configure (99%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/configure.ac (99%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/depcomp (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/install-sh (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/ltmain.sh (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/missing (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/shell.c (86%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3.1 (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3.c (94%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3.h (96%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3.pc.in (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3.rc (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3ext.h (99%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/sqlite3rc.h (50%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/Makefile.in (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/README (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/aclocal.m4 (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/configure (99%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/configure.ac (99%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/doc/sqlite3.n (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/generic/tclsqlite3.c (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/license.terms (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/pkgIndex.tcl.in (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/tclconfig/install-sh (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/tclconfig/tcl.m4 (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/win/makefile.vc (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/win/nmakehlp.c (100%) rename src/sqlite/{SQLite-3.43.1 => SQLite-3.46.0}/tea/win/rules.vc (100%) delete mode 100644 src/sqlite/sqlite3-3.43.1-x64.dll delete mode 100755 src/sqlite/sqlite3-3.43.1-x86.dll create mode 100644 src/sqlite/sqlite3-3.46.0-x64.dll create mode 100644 src/sqlite/sqlite3-3.46.0-x86.dll diff --git a/src/sqlite/SQLite-3.43.1/INSTALL b/src/sqlite/SQLite-3.46.0/INSTALL similarity index 100% rename from src/sqlite/SQLite-3.43.1/INSTALL rename to src/sqlite/SQLite-3.46.0/INSTALL diff --git a/src/sqlite/SQLite-3.43.1/Makefile.am b/src/sqlite/SQLite-3.46.0/Makefile.am similarity index 100% rename from src/sqlite/SQLite-3.43.1/Makefile.am rename to src/sqlite/SQLite-3.46.0/Makefile.am diff --git a/src/sqlite/SQLite-3.43.1/Makefile.fallback b/src/sqlite/SQLite-3.46.0/Makefile.fallback similarity index 100% rename from src/sqlite/SQLite-3.43.1/Makefile.fallback rename to src/sqlite/SQLite-3.46.0/Makefile.fallback diff --git a/src/sqlite/SQLite-3.43.1/Makefile.in b/src/sqlite/SQLite-3.46.0/Makefile.in similarity index 100% rename from src/sqlite/SQLite-3.43.1/Makefile.in rename to src/sqlite/SQLite-3.46.0/Makefile.in diff --git a/src/sqlite/SQLite-3.43.1/Makefile.msc b/src/sqlite/SQLite-3.46.0/Makefile.msc similarity index 97% rename from src/sqlite/SQLite-3.43.1/Makefile.msc rename to src/sqlite/SQLite-3.46.0/Makefile.msc index 13663d877..a4270fb2a 100644 --- a/src/sqlite/SQLite-3.43.1/Makefile.msc +++ b/src/sqlite/SQLite-3.46.0/Makefile.msc @@ -18,6 +18,13 @@ TOP = . +# Optionally set EXTRA_SRC to a list of C files to append to +# the generated sqlite3.c. +# +!IFNDEF EXTRA_SRC +EXTRA_SRC = +!ENDIF + # Set this non-0 to enable full warnings (-W4, etc) when compiling. # !IFNDEF USE_FULLWARN @@ -52,8 +59,8 @@ MINIMAL_AMALGAMATION = 0 USE_STDCALL = 0 !ENDIF -# Set this non-0 to use structured exception handling (SEH) for WAL mode -# in the core library. +# Use the USE_SEH=0 option on the nmake command line to omit structured +# exception handling (SEH) support. SEH is on by default. # !IFNDEF USE_SEH USE_SEH = 1 @@ -296,6 +303,7 @@ SQLITE3EXEPDB = /pdb:sqlite3sh.pdb !IFNDEF OPT_FEATURE_FLAGS !IF $(MINIMAL_AMALGAMATION)==0 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS5=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_GEOPOLY=1 OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_STMTVTAB=1 @@ -325,10 +333,11 @@ OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RBU=1 !ENDIF # Should structured exception handling (SEH) be enabled for WAL mode in -# the core library? +# the core library? It is on by default. Only omit it if the +# USE_SEH=0 option is provided on the nmake command-line. # -!IF $(USE_SEH)!=0 -OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_USE_SEH=1 +!IF $(USE_SEH)==0 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_OMIT_SEH=1 !ENDIF # These are the "extended" SQLite compilation options used when compiling for @@ -986,6 +995,9 @@ SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_DQS=0 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_STMT_SCANSTATUS=1 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_STRICT_SUBTYPE=1 !ENDIF diff --git a/src/sqlite/SQLite-3.43.1/README.txt b/src/sqlite/SQLite-3.46.0/README.txt similarity index 100% rename from src/sqlite/SQLite-3.43.1/README.txt rename to src/sqlite/SQLite-3.46.0/README.txt diff --git a/src/sqlite/SQLite-3.43.1/Replace.cs b/src/sqlite/SQLite-3.46.0/Replace.cs similarity index 100% rename from src/sqlite/SQLite-3.43.1/Replace.cs rename to src/sqlite/SQLite-3.46.0/Replace.cs diff --git a/src/sqlite/SQLite-3.43.1/aclocal.m4 b/src/sqlite/SQLite-3.46.0/aclocal.m4 similarity index 100% rename from src/sqlite/SQLite-3.43.1/aclocal.m4 rename to src/sqlite/SQLite-3.46.0/aclocal.m4 diff --git a/src/sqlite/SQLite-3.43.1/compile b/src/sqlite/SQLite-3.46.0/compile similarity index 100% rename from src/sqlite/SQLite-3.43.1/compile rename to src/sqlite/SQLite-3.46.0/compile diff --git a/src/sqlite/SQLite-3.43.1/config.guess b/src/sqlite/SQLite-3.46.0/config.guess similarity index 100% rename from src/sqlite/SQLite-3.43.1/config.guess rename to src/sqlite/SQLite-3.46.0/config.guess diff --git a/src/sqlite/SQLite-3.43.1/config.sub b/src/sqlite/SQLite-3.46.0/config.sub similarity index 100% rename from src/sqlite/SQLite-3.43.1/config.sub rename to src/sqlite/SQLite-3.46.0/config.sub diff --git a/src/sqlite/SQLite-3.43.1/configure b/src/sqlite/SQLite-3.46.0/configure similarity index 99% rename from src/sqlite/SQLite-3.43.1/configure rename to src/sqlite/SQLite-3.46.0/configure index 39694c067..f2f70b5ae 100755 --- a/src/sqlite/SQLite-3.43.1/configure +++ b/src/sqlite/SQLite-3.46.0/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for sqlite 3.43.1. +# Generated by GNU Autoconf 2.71 for sqlite 3.46.0. # # Report bugs to . # @@ -621,8 +621,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.43.1' -PACKAGE_STRING='sqlite 3.43.1' +PACKAGE_VERSION='3.46.0' +PACKAGE_STRING='sqlite 3.46.0' PACKAGE_BUGREPORT='http://www.sqlite.org' PACKAGE_URL='' @@ -1367,7 +1367,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.43.1 to adapt to many kinds of systems. +\`configure' configures sqlite 3.46.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1438,7 +1438,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.43.1:";; + short | recursive ) echo "Configuration of sqlite 3.46.0:";; esac cat <<\_ACEOF @@ -1563,7 +1563,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.43.1 +sqlite configure 3.46.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1833,7 +1833,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.43.1, which was +It was created by sqlite $as_me 3.46.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3106,7 +3106,7 @@ fi # Define the identity of the package. PACKAGE='sqlite' - VERSION='3.43.1' + VERSION='3.46.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -15314,7 +15314,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.43.1, which was +This file was extended by sqlite $as_me 3.46.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15373,7 +15373,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -sqlite config.status 3.43.1 +sqlite config.status 3.46.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/src/sqlite/SQLite-3.43.1/configure.ac b/src/sqlite/SQLite-3.46.0/configure.ac similarity index 99% rename from src/sqlite/SQLite-3.43.1/configure.ac rename to src/sqlite/SQLite-3.46.0/configure.ac index 3d7da8b98..c83f381d9 100644 --- a/src/sqlite/SQLite-3.43.1/configure.ac +++ b/src/sqlite/SQLite-3.46.0/configure.ac @@ -10,7 +10,7 @@ # AC_PREREQ(2.61) -AC_INIT(sqlite, 3.43.1, http://www.sqlite.org) +AC_INIT(sqlite, 3.46.0, http://www.sqlite.org) AC_CONFIG_SRCDIR([sqlite3.c]) AC_CONFIG_AUX_DIR([.]) diff --git a/src/sqlite/SQLite-3.43.1/depcomp b/src/sqlite/SQLite-3.46.0/depcomp similarity index 100% rename from src/sqlite/SQLite-3.43.1/depcomp rename to src/sqlite/SQLite-3.46.0/depcomp diff --git a/src/sqlite/SQLite-3.43.1/install-sh b/src/sqlite/SQLite-3.46.0/install-sh similarity index 100% rename from src/sqlite/SQLite-3.43.1/install-sh rename to src/sqlite/SQLite-3.46.0/install-sh diff --git a/src/sqlite/SQLite-3.43.1/ltmain.sh b/src/sqlite/SQLite-3.46.0/ltmain.sh similarity index 100% rename from src/sqlite/SQLite-3.43.1/ltmain.sh rename to src/sqlite/SQLite-3.46.0/ltmain.sh diff --git a/src/sqlite/SQLite-3.43.1/missing b/src/sqlite/SQLite-3.46.0/missing similarity index 100% rename from src/sqlite/SQLite-3.43.1/missing rename to src/sqlite/SQLite-3.46.0/missing diff --git a/src/sqlite/SQLite-3.43.1/shell.c b/src/sqlite/SQLite-3.46.0/shell.c similarity index 86% rename from src/sqlite/SQLite-3.43.1/shell.c rename to src/sqlite/SQLite-3.46.0/shell.c index 6b2cdca83..7d46e4aca 100644 --- a/src/sqlite/SQLite-3.43.1/shell.c +++ b/src/sqlite/SQLite-3.46.0/shell.c @@ -252,476 +252,967 @@ typedef unsigned char u8; /* string conversion routines only needed on Win32 */ extern char *sqlite3_win32_unicode_to_utf8(LPCWSTR); -extern char *sqlite3_win32_mbcs_to_utf8_v2(const char *, int); -extern char *sqlite3_win32_utf8_to_mbcs_v2(const char *, int); extern LPWSTR sqlite3_win32_utf8_to_unicode(const char *zText); #endif -/* On Windows, we normally run with output mode of TEXT so that \n characters -** are automatically translated into \r\n. However, this behavior needs -** to be disabled in some cases (ex: when generating CSV output and when -** rendering quoted strings that contain \n characters). The following -** routines take care of that. -*/ -#if (defined(_WIN32) || defined(WIN32)) && !SQLITE_OS_WINRT -static void setBinaryMode(FILE *file, int isOutput){ - if( isOutput ) fflush(file); - _setmode(_fileno(file), _O_BINARY); -} -static void setTextMode(FILE *file, int isOutput){ - if( isOutput ) fflush(file); - _setmode(_fileno(file), _O_TEXT); -} +/* Use console I/O package as a direct INCLUDE. */ +#define SQLITE_INTERNAL_LINKAGE static + +#ifdef SQLITE_SHELL_FIDDLE +/* Deselect most features from the console I/O package for Fiddle. */ +# define SQLITE_CIO_NO_REDIRECT +# define SQLITE_CIO_NO_CLASSIFY +# define SQLITE_CIO_NO_TRANSLATE +# define SQLITE_CIO_NO_SETMODE +#endif +/************************* Begin ../ext/consio/console_io.h ******************/ +/* +** 2023 November 1 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +******************************************************************************** +** This file exposes various interfaces used for console and other I/O +** by the SQLite project command-line tools. These interfaces are used +** at either source conglomeration time, compilation time, or run time. +** This source provides for either inclusion into conglomerated, +** "single-source" forms or separate compilation then linking. +** +** Platform dependencies are "hidden" here by various stratagems so +** that, provided certain conditions are met, the programs using this +** source or object code compiled from it need no explicit conditional +** compilation in their source for their console and stream I/O. +** +** The symbols and functionality exposed here are not a public API. +** This code may change in tandem with other project code as needed. +** +** When this .h file and its companion .c are directly incorporated into +** a source conglomeration (such as shell.c), the preprocessor symbol +** CIO_WIN_WC_XLATE is defined as 0 or 1, reflecting whether console I/O +** translation for Windows is effected for the build. +*/ +#define HAVE_CONSOLE_IO_H 1 +#ifndef SQLITE_INTERNAL_LINKAGE +# define SQLITE_INTERNAL_LINKAGE extern /* external to translation unit */ +# include #else -# define setBinaryMode(X,Y) -# define setTextMode(X,Y) +# define SHELL_NO_SYSINC /* Better yet, modify mkshellc.tcl for this. */ #endif -/* True if the timer is enabled */ -static int enableTimer = 0; - -/* A version of strcmp() that works with NULL values */ -static int cli_strcmp(const char *a, const char *b){ - if( a==0 ) a = ""; - if( b==0 ) b = ""; - return strcmp(a,b); -} -static int cli_strncmp(const char *a, const char *b, size_t n){ - if( a==0 ) a = ""; - if( b==0 ) b = ""; - return strncmp(a,b,n); -} - -/* Return the current wall-clock time */ -static sqlite3_int64 timeOfDay(void){ - static sqlite3_vfs *clockVfs = 0; - sqlite3_int64 t; - if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0); - if( clockVfs==0 ) return 0; /* Never actually happens */ - if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){ - clockVfs->xCurrentTimeInt64(clockVfs, &t); - }else{ - double r; - clockVfs->xCurrentTime(clockVfs, &r); - t = (sqlite3_int64)(r*86400000.0); - } - return t; -} - -#if !defined(_WIN32) && !defined(WIN32) && !defined(__minux) -#include -#include - -/* VxWorks does not support getrusage() as far as we can determine */ -#if defined(_WRS_KERNEL) || defined(__RTP__) -struct rusage { - struct timeval ru_utime; /* user CPU time used */ - struct timeval ru_stime; /* system CPU time used */ -}; -#define getrusage(A,B) memset(B,0,sizeof(*B)) +#ifndef SQLITE3_H +/* # include "sqlite3.h" */ #endif -/* Saved resource information for the beginning of an operation */ -static struct rusage sBegin; /* CPU time at start */ -static sqlite3_int64 iBegin; /* Wall-clock time at start */ - -/* -** Begin timing an operation -*/ -static void beginTimer(void){ - if( enableTimer ){ - getrusage(RUSAGE_SELF, &sBegin); - iBegin = timeOfDay(); - } -} +#ifndef SQLITE_CIO_NO_CLASSIFY -/* Return the difference of two time_structs in seconds */ -static double timeDiff(struct timeval *pStart, struct timeval *pEnd){ - return (pEnd->tv_usec - pStart->tv_usec)*0.000001 + - (double)(pEnd->tv_sec - pStart->tv_sec); -} +/* Define enum for use with following function. */ +typedef enum StreamsAreConsole { + SAC_NoConsole = 0, + SAC_InConsole = 1, SAC_OutConsole = 2, SAC_ErrConsole = 4, + SAC_AnyConsole = 0x7 +} StreamsAreConsole; /* -** Print the timing results. +** Classify the three standard I/O streams according to whether +** they are connected to a console attached to the process. +** +** Returns the bit-wise OR of SAC_{In,Out,Err}Console values, +** or SAC_NoConsole if none of the streams reaches a console. +** +** This function should be called before any I/O is done with +** the given streams. As a side-effect, the given inputs are +** recorded so that later I/O operations on them may be done +** differently than the C library FILE* I/O would be done, +** iff the stream is used for the I/O functions that follow, +** and to support the ones that use an implicit stream. +** +** On some platforms, stream or console mode alteration (aka +** "Setup") may be made which is undone by consoleRestore(). */ -static void endTimer(void){ - if( enableTimer ){ - sqlite3_int64 iEnd = timeOfDay(); - struct rusage sEnd; - getrusage(RUSAGE_SELF, &sEnd); - printf("Run Time: real %.3f user %f sys %f\n", - (iEnd - iBegin)*0.001, - timeDiff(&sBegin.ru_utime, &sEnd.ru_utime), - timeDiff(&sBegin.ru_stime, &sEnd.ru_stime)); - } -} - -#define BEGIN_TIMER beginTimer() -#define END_TIMER endTimer() -#define HAS_TIMER 1 - -#elif (defined(_WIN32) || defined(WIN32)) - -/* Saved resource information for the beginning of an operation */ -static HANDLE hProcess; -static FILETIME ftKernelBegin; -static FILETIME ftUserBegin; -static sqlite3_int64 ftWallBegin; -typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME, - LPFILETIME, LPFILETIME); -static GETPROCTIMES getProcessTimesAddr = NULL; +SQLITE_INTERNAL_LINKAGE StreamsAreConsole +consoleClassifySetup( FILE *pfIn, FILE *pfOut, FILE *pfErr ); +/* A usual call for convenience: */ +#define SQLITE_STD_CONSOLE_INIT() consoleClassifySetup(stdin,stdout,stderr) /* -** Check to see if we have timer support. Return 1 if necessary -** support found (or found previously). +** After an initial call to consoleClassifySetup(...), renew +** the same setup it effected. (A call not after is an error.) +** This will restore state altered by consoleRestore(); +** +** Applications which run an inferior (child) process which +** inherits the same I/O streams may call this function after +** such a process exits to guard against console mode changes. */ -static int hasTimer(void){ - if( getProcessTimesAddr ){ - return 1; - } else { -#if !SQLITE_OS_WINRT - /* GetProcessTimes() isn't supported in WIN95 and some other Windows - ** versions. See if the version we are running on has it, and if it - ** does, save off a pointer to it and the current process handle. - */ - hProcess = GetCurrentProcess(); - if( hProcess ){ - HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll")); - if( NULL != hinstLib ){ - getProcessTimesAddr = - (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes"); - if( NULL != getProcessTimesAddr ){ - return 1; - } - FreeLibrary(hinstLib); - } - } -#endif - } - return 0; -} +SQLITE_INTERNAL_LINKAGE void consoleRenewSetup(void); /* -** Begin timing an operation +** Undo any side-effects left by consoleClassifySetup(...). +** +** This should be called after consoleClassifySetup() and +** before the process terminates normally. It is suitable +** for use with the atexit() C library procedure. After +** this call, no console I/O should be done until one of +** console{Classify or Renew}Setup(...) is called again. +** +** Applications which run an inferior (child) process that +** inherits the same I/O streams might call this procedure +** before so that said process will have a console setup +** however users have configured it or come to expect. */ -static void beginTimer(void){ - if( enableTimer && getProcessTimesAddr ){ - FILETIME ftCreation, ftExit; - getProcessTimesAddr(hProcess,&ftCreation,&ftExit, - &ftKernelBegin,&ftUserBegin); - ftWallBegin = timeOfDay(); - } -} +SQLITE_INTERNAL_LINKAGE void SQLITE_CDECL consoleRestore( void ); -/* Return the difference of two FILETIME structs in seconds */ -static double timeDiff(FILETIME *pStart, FILETIME *pEnd){ - sqlite_int64 i64Start = *((sqlite_int64 *) pStart); - sqlite_int64 i64End = *((sqlite_int64 *) pEnd); - return (double) ((i64End - i64Start) / 10000000.0); -} +#else /* defined(SQLITE_CIO_NO_CLASSIFY) */ +# define consoleClassifySetup(i,o,e) +# define consoleRenewSetup() +# define consoleRestore() +#endif /* defined(SQLITE_CIO_NO_CLASSIFY) */ +#ifndef SQLITE_CIO_NO_REDIRECT /* -** Print the timing results. +** Set stream to be used for the functions below which write +** to "the designated X stream", where X is Output or Error. +** Returns the previous value. +** +** Alternatively, pass the special value, invalidFileStream, +** to get the designated stream value without setting it. +** +** Before the designated streams are set, they default to +** those passed to consoleClassifySetup(...), and before +** that is called they default to stdout and stderr. +** +** It is error to close a stream so designated, then, without +** designating another, use the corresponding {o,e}Emit(...). */ -static void endTimer(void){ - if( enableTimer && getProcessTimesAddr){ - FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd; - sqlite3_int64 ftWallEnd = timeOfDay(); - getProcessTimesAddr(hProcess,&ftCreation,&ftExit,&ftKernelEnd,&ftUserEnd); - printf("Run Time: real %.3f user %f sys %f\n", - (ftWallEnd - ftWallBegin)*0.001, - timeDiff(&ftUserBegin, &ftUserEnd), - timeDiff(&ftKernelBegin, &ftKernelEnd)); - } -} - -#define BEGIN_TIMER beginTimer() -#define END_TIMER endTimer() -#define HAS_TIMER hasTimer() - +SQLITE_INTERNAL_LINKAGE FILE *invalidFileStream; +SQLITE_INTERNAL_LINKAGE FILE *setOutputStream(FILE *pf); +# ifdef CONSIO_SET_ERROR_STREAM +SQLITE_INTERNAL_LINKAGE FILE *setErrorStream(FILE *pf); +# endif #else -#define BEGIN_TIMER -#define END_TIMER -#define HAS_TIMER 0 -#endif +# define setOutputStream(pf) +# define setErrorStream(pf) +#endif /* !defined(SQLITE_CIO_NO_REDIRECT) */ +#ifndef SQLITE_CIO_NO_TRANSLATE /* -** Used to prevent warnings about unused parameters +** Emit output like fprintf(). If the output is going to the +** console and translation from UTF-8 is necessary, perform +** the needed translation. Otherwise, write formatted output +** to the provided stream almost as-is, possibly with newline +** translation as specified by set{Binary,Text}Mode(). */ -#define UNUSED_PARAMETER(x) (void)(x) +SQLITE_INTERNAL_LINKAGE int fPrintfUtf8(FILE *pfO, const char *zFormat, ...); +/* Like fPrintfUtf8 except stream is always the designated output. */ +SQLITE_INTERNAL_LINKAGE int oPrintfUtf8(const char *zFormat, ...); +/* Like fPrintfUtf8 except stream is always the designated error. */ +SQLITE_INTERNAL_LINKAGE int ePrintfUtf8(const char *zFormat, ...); /* -** Number of elements in an array +** Emit output like fputs(). If the output is going to the +** console and translation from UTF-8 is necessary, perform +** the needed translation. Otherwise, write given text to the +** provided stream almost as-is, possibly with newline +** translation as specified by set{Binary,Text}Mode(). */ -#define ArraySize(X) (int)(sizeof(X)/sizeof(X[0])) +SQLITE_INTERNAL_LINKAGE int fPutsUtf8(const char *z, FILE *pfO); +/* Like fPutsUtf8 except stream is always the designated output. */ +SQLITE_INTERNAL_LINKAGE int oPutsUtf8(const char *z); +/* Like fPutsUtf8 except stream is always the designated error. */ +SQLITE_INTERNAL_LINKAGE int ePutsUtf8(const char *z); /* -** If the following flag is set, then command execution stops -** at an error if we are not interactive. +** Emit output like fPutsUtf8(), except that the length of the +** accepted char or character sequence is limited by nAccept. +** +** Returns the number of accepted char values. */ -static int bail_on_error = 0; +#ifdef CONSIO_SPUTB +SQLITE_INTERNAL_LINKAGE int +fPutbUtf8(FILE *pfOut, const char *cBuf, int nAccept); +/* Like fPutbUtf8 except stream is always the designated output. */ +#endif +SQLITE_INTERNAL_LINKAGE int +oPutbUtf8(const char *cBuf, int nAccept); +/* Like fPutbUtf8 except stream is always the designated error. */ +#ifdef CONSIO_EPUTB +SQLITE_INTERNAL_LINKAGE int +ePutbUtf8(const char *cBuf, int nAccept); +#endif /* -** Treat stdin as an interactive input if the following variable -** is true. Otherwise, assume stdin is connected to a file or pipe. +** Collect input like fgets(...) with special provisions for input +** from the console on platforms that require same. Defers to the +** C library fgets() when input is not from the console. Newline +** translation may be done as set by set{Binary,Text}Mode(). As a +** convenience, pfIn==NULL is treated as stdin. */ -static int stdin_is_interactive = 1; +SQLITE_INTERNAL_LINKAGE char* fGetsUtf8(char *cBuf, int ncMax, FILE *pfIn); +/* Like fGetsUtf8 except stream is always the designated input. */ +/* SQLITE_INTERNAL_LINKAGE char* iGetsUtf8(char *cBuf, int ncMax); */ -#if (defined(_WIN32) || defined(WIN32)) && SHELL_USE_LOCAL_GETLINE \ - && !defined(SHELL_OMIT_WIN_UTF8) -# define SHELL_WIN_UTF8_OPT 1 -#else -# define SHELL_WIN_UTF8_OPT 0 -#endif +#endif /* !defined(SQLITE_CIO_NO_TRANSLATE) */ -#if SHELL_WIN_UTF8_OPT +#ifndef SQLITE_CIO_NO_SETMODE /* -** Setup console for UTF-8 input/output when following variable true. +** Set given stream for binary mode, where newline translation is +** not done, or for text mode where, for some platforms, newlines +** are translated to the platform's conventional char sequence. +** If bFlush true, flush the stream. +** +** An additional side-effect is that if the stream is one passed +** to consoleClassifySetup() as an output, it is flushed first. +** +** Note that binary/text mode has no effect on console I/O +** translation. On all platforms, newline to the console starts +** a new line and CR,LF chars from the console become a newline. */ -static int console_utf8 = 0; +SQLITE_INTERNAL_LINKAGE void setBinaryMode(FILE *, short bFlush); +SQLITE_INTERNAL_LINKAGE void setTextMode(FILE *, short bFlush); #endif -/* -** On Windows systems we have to know if standard output is a console -** in order to translate UTF-8 into MBCS. The following variable is -** true if translation is required. -*/ -static int stdout_is_console = 1; +#ifdef SQLITE_CIO_PROMPTED_IN +typedef struct Prompts { + int numPrompts; + const char **azPrompts; +} Prompts; /* -** The following is the open SQLite database. We make a pointer -** to this database a static variable so that it can be accessed -** by the SIGINT handler to interrupt database processing. +** Macros for use of a line editor. +** +** The following macros define operations involving use of a +** line-editing library or simple console interaction. +** A "T" argument is a text (char *) buffer or filename. +** A "N" argument is an integer. +** +** SHELL_ADD_HISTORY(T) // Record text as line(s) of history. +** SHELL_READ_HISTORY(T) // Read history from file named by T. +** SHELL_WRITE_HISTORY(T) // Write history to file named by T. +** SHELL_STIFLE_HISTORY(N) // Limit history to N entries. +** +** A console program which does interactive console input is +** expected to call: +** SHELL_READ_HISTORY(T) before collecting such input; +** SHELL_ADD_HISTORY(T) as record-worthy input is taken; +** SHELL_STIFLE_HISTORY(N) after console input ceases; then +** SHELL_WRITE_HISTORY(T) before the program exits. */ -static sqlite3 *globalDb = 0; /* -** True if an interrupt (Control-C) has been received. +** Retrieve a single line of input text from an input stream. +** +** If pfIn is the input stream passed to consoleClassifySetup(), +** and azPrompt is not NULL, then a prompt is issued before the +** line is collected, as selected by the isContinuation flag. +** Array azPrompt[{0,1}] holds the {main,continuation} prompt. +** +** If zBufPrior is not NULL then it is a buffer from a prior +** call to this routine that can be reused, or will be freed. +** +** The result is stored in space obtained from malloc() and +** must either be freed by the caller or else passed back to +** this function as zBufPrior for reuse. +** +** This function may call upon services of a line-editing +** library to interactively collect line edited input. */ -static volatile int seenInterrupt = 0; - +SQLITE_INTERNAL_LINKAGE char * +shellGetLine(FILE *pfIn, char *zBufPrior, int nLen, + short isContinuation, Prompts azPrompt); +#endif /* defined(SQLITE_CIO_PROMPTED_IN) */ /* -** This is the name of our program. It is set in main(), used -** in a number of other places, mostly for error messages. +** TBD: Define an interface for application(s) to generate +** completion candidates for use by the line-editor. +** +** This may be premature; the CLI is the only application +** that does this. Yet, getting line-editing melded into +** console I/O is desirable because a line-editing library +** may have to establish console operating mode, possibly +** in a way that interferes with the above functionality. */ -static char *Argv0; +#if !(defined(SQLITE_CIO_NO_UTF8SCAN)&&defined(SQLITE_CIO_NO_TRANSLATE)) +/* Skip over as much z[] input char sequence as is valid UTF-8, +** limited per nAccept char's or whole characters and containing +** no char cn such that ((1<=0 => char count, nAccept<0 => character + */ +SQLITE_INTERNAL_LINKAGE const char* +zSkipValidUtf8(const char *z, int nAccept, long ccm); + +#endif + +/************************* End ../ext/consio/console_io.h ********************/ +/************************* Begin ../ext/consio/console_io.c ******************/ /* -** Prompt strings. Initialized in main. Settable with -** .prompt main continue +** 2023 November 4 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +******************************************************************************** +** This file implements various interfaces used for console and stream I/O +** by the SQLite project command-line tools, as explained in console_io.h . +** Functions prefixed by "SQLITE_INTERNAL_LINKAGE" behave as described there. */ -#define PROMPT_LEN_MAX 20 -/* First line prompt. default: "sqlite> " */ -static char mainPrompt[PROMPT_LEN_MAX]; -/* Continuation prompt. default: " ...> " */ -static char continuePrompt[PROMPT_LEN_MAX]; -/* This is variant of the standard-library strncpy() routine with the -** one change that the destination string is always zero-terminated, even -** if there is no zero-terminator in the first n-1 characters of the source -** string. -*/ -static char *shell_strncpy(char *dest, const char *src, size_t n){ - size_t i; - for(i=0; i +# include +# include +# include +# include +/* # include "sqlite3.h" */ +#endif +#ifndef HAVE_CONSOLE_IO_H +# include "console_io.h" +#endif +#if defined(_MSC_VER) +# pragma warning(disable : 4204) +#endif + +#ifndef SQLITE_CIO_NO_TRANSLATE +# if (defined(_WIN32) || defined(WIN32)) && !SQLITE_OS_WINRT +# ifndef SHELL_NO_SYSINC +# include +# include +# undef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# include +# endif +# define CIO_WIN_WC_XLATE 1 /* Use WCHAR Windows APIs for console I/O */ +# else +# ifndef SHELL_NO_SYSINC +# include +# endif +# define CIO_WIN_WC_XLATE 0 /* Use plain C library stream I/O at console */ +# endif +#else +# define CIO_WIN_WC_XLATE 0 /* Not exposing translation routines at all */ +#endif + +#if CIO_WIN_WC_XLATE +/* Character used to represent a known-incomplete UTF-8 char group (�) */ +static WCHAR cBadGroup = 0xfffd; +#endif + +#if CIO_WIN_WC_XLATE +static HANDLE handleOfFile(FILE *pf){ + int fileDesc = _fileno(pf); + union { intptr_t osfh; HANDLE fh; } fid = { + (fileDesc>=0)? _get_osfhandle(fileDesc) : (intptr_t)INVALID_HANDLE_VALUE + }; + return fid.fh; } +#endif -/* -** Optionally disable dynamic continuation prompt. -** Unless disabled, the continuation prompt shows open SQL lexemes if any, -** or open parentheses level if non-zero, or continuation prompt as set. -** This facility interacts with the scanner and process_input() where the -** below 5 macros are used. -*/ -#ifdef SQLITE_OMIT_DYNAPROMPT -# define CONTINUATION_PROMPT continuePrompt -# define CONTINUE_PROMPT_RESET -# define CONTINUE_PROMPT_AWAITS(p,s) -# define CONTINUE_PROMPT_AWAITC(p,c) -# define CONTINUE_PAREN_INCR(p,n) -# define CONTINUE_PROMPT_PSTATE 0 -typedef void *t_NoDynaPrompt; -# define SCAN_TRACKER_REFTYPE t_NoDynaPrompt -#else -# define CONTINUATION_PROMPT dynamicContinuePrompt() -# define CONTINUE_PROMPT_RESET \ - do {setLexemeOpen(&dynPrompt,0,0); trackParenLevel(&dynPrompt,0);} while(0) -# define CONTINUE_PROMPT_AWAITS(p,s) \ - if(p && stdin_is_interactive) setLexemeOpen(p, s, 0) -# define CONTINUE_PROMPT_AWAITC(p,c) \ - if(p && stdin_is_interactive) setLexemeOpen(p, 0, c) -# define CONTINUE_PAREN_INCR(p,n) \ - if(p && stdin_is_interactive) (trackParenLevel(p,n)) -# define CONTINUE_PROMPT_PSTATE (&dynPrompt) -typedef struct DynaPrompt *t_DynaPromptRef; -# define SCAN_TRACKER_REFTYPE t_DynaPromptRef +#ifndef SQLITE_CIO_NO_TRANSLATE +typedef struct PerStreamTags { +# if CIO_WIN_WC_XLATE + HANDLE hx; + DWORD consMode; + char acIncomplete[4]; +# else + short reachesConsole; +# endif + FILE *pf; +} PerStreamTags; -static struct DynaPrompt { - char dynamicPrompt[PROMPT_LEN_MAX]; - char acAwait[2]; - int inParenLevel; - char *zScannerAwaits; -} dynPrompt = { {0}, {0}, 0, 0 }; +/* Define NULL-like value for things which can validly be 0. */ +# define SHELL_INVALID_FILE_PTR ((FILE *)~0) +# if CIO_WIN_WC_XLATE +# define SHELL_INVALID_CONS_MODE 0xFFFF0000 +# endif -/* Record parenthesis nesting level change, or force level to 0. */ -static void trackParenLevel(struct DynaPrompt *p, int ni){ - p->inParenLevel += ni; - if( ni==0 ) p->inParenLevel = 0; - p->zScannerAwaits = 0; +# if CIO_WIN_WC_XLATE +# define PST_INITIALIZER { INVALID_HANDLE_VALUE, SHELL_INVALID_CONS_MODE, \ + {0,0,0,0}, SHELL_INVALID_FILE_PTR } +# else +# define PST_INITIALIZER { 0, SHELL_INVALID_FILE_PTR } +# endif + +/* Quickly say whether a known output is going to the console. */ +# if CIO_WIN_WC_XLATE +static short pstReachesConsole(PerStreamTags *ppst){ + return (ppst->hx != INVALID_HANDLE_VALUE); } +# else +# define pstReachesConsole(ppst) 0 +# endif -/* Record that a lexeme is opened, or closed with args==0. */ -static void setLexemeOpen(struct DynaPrompt *p, char *s, char c){ - if( s!=0 || c==0 ){ - p->zScannerAwaits = s; - p->acAwait[0] = 0; - }else{ - p->acAwait[0] = c; - p->zScannerAwaits = p->acAwait; +# if CIO_WIN_WC_XLATE +static void restoreConsoleArb(PerStreamTags *ppst){ + if( pstReachesConsole(ppst) ) SetConsoleMode(ppst->hx, ppst->consMode); +} +# else +# define restoreConsoleArb(ppst) +# endif + +/* Say whether FILE* appears to be a console, collect associated info. */ +static short streamOfConsole(FILE *pf, /* out */ PerStreamTags *ppst){ +# if CIO_WIN_WC_XLATE + short rv = 0; + DWORD dwCM = SHELL_INVALID_CONS_MODE; + HANDLE fh = handleOfFile(pf); + ppst->pf = pf; + if( INVALID_HANDLE_VALUE != fh ){ + rv = (GetFileType(fh) == FILE_TYPE_CHAR && GetConsoleMode(fh,&dwCM)); + } + ppst->hx = (rv)? fh : INVALID_HANDLE_VALUE; + ppst->consMode = dwCM; + return rv; +# else + ppst->pf = pf; + ppst->reachesConsole = ( (short)isatty(fileno(pf)) ); + return ppst->reachesConsole; +# endif +} + +# ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING +# define ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x4) +# endif + +# if CIO_WIN_WC_XLATE +/* Define console modes for use with the Windows Console API. */ +# define SHELL_CONI_MODE \ + (ENABLE_ECHO_INPUT | ENABLE_INSERT_MODE | ENABLE_LINE_INPUT | 0x80 \ + | ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS | ENABLE_PROCESSED_INPUT) +# define SHELL_CONO_MODE (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT \ + | ENABLE_VIRTUAL_TERMINAL_PROCESSING) +# endif + +typedef struct ConsoleInfo { + PerStreamTags pstSetup[3]; + PerStreamTags pstDesignated[3]; + StreamsAreConsole sacSetup; +} ConsoleInfo; + +static short isValidStreamInfo(PerStreamTags *ppst){ + return (ppst->pf != SHELL_INVALID_FILE_PTR); +} + +static ConsoleInfo consoleInfo = { + { /* pstSetup */ PST_INITIALIZER, PST_INITIALIZER, PST_INITIALIZER }, + { /* pstDesignated[] */ PST_INITIALIZER, PST_INITIALIZER, PST_INITIALIZER }, + SAC_NoConsole /* sacSetup */ +}; + +SQLITE_INTERNAL_LINKAGE FILE* invalidFileStream = (FILE *)~0; + +# if CIO_WIN_WC_XLATE +static void maybeSetupAsConsole(PerStreamTags *ppst, short odir){ + if( pstReachesConsole(ppst) ){ + DWORD cm = odir? SHELL_CONO_MODE : SHELL_CONI_MODE; + SetConsoleMode(ppst->hx, cm); } } +# else +# define maybeSetupAsConsole(ppst,odir) +# endif -/* Upon demand, derive the continuation prompt to display. */ -static char *dynamicContinuePrompt(void){ - if( continuePrompt[0]==0 - || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){ - return continuePrompt; - }else{ - if( dynPrompt.zScannerAwaits ){ - size_t ncp = strlen(continuePrompt); - size_t ndp = strlen(dynPrompt.zScannerAwaits); - if( ndp > ncp-3 ) return continuePrompt; - strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits); - while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' '; - shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, - PROMPT_LEN_MAX-4); - }else{ - if( dynPrompt.inParenLevel>9 ){ - shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4); - }else if( dynPrompt.inParenLevel<0 ){ - shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4); - }else{ - shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4); - dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel); +SQLITE_INTERNAL_LINKAGE void consoleRenewSetup(void){ +# if CIO_WIN_WC_XLATE + int ix = 0; + while( ix < 6 ){ + PerStreamTags *ppst = (ix<3)? + &consoleInfo.pstSetup[ix] : &consoleInfo.pstDesignated[ix-3]; + maybeSetupAsConsole(ppst, (ix % 3)>0); + ++ix; + } +# endif +} + +SQLITE_INTERNAL_LINKAGE StreamsAreConsole +consoleClassifySetup( FILE *pfIn, FILE *pfOut, FILE *pfErr ){ + StreamsAreConsole rv = SAC_NoConsole; + FILE* apf[3] = { pfIn, pfOut, pfErr }; + int ix; + for( ix = 2; ix >= 0; --ix ){ + PerStreamTags *ppst = &consoleInfo.pstSetup[ix]; + if( streamOfConsole(apf[ix], ppst) ){ + rv |= (SAC_InConsole< 0 ) fflush(apf[ix]); + } + consoleInfo.sacSetup = rv; + consoleRenewSetup(); + return rv; +} + +SQLITE_INTERNAL_LINKAGE void SQLITE_CDECL consoleRestore( void ){ +# if CIO_WIN_WC_XLATE + static ConsoleInfo *pci = &consoleInfo; + if( pci->sacSetup ){ + int ix; + for( ix=0; ix<3; ++ix ){ + if( pci->sacSetup & (SAC_InConsole<pstSetup[ix]; + SetConsoleMode(ppst->hx, ppst->consMode); } - shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, PROMPT_LEN_MAX-4); } } - return dynPrompt.dynamicPrompt; +# endif } -#endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */ +#endif /* !defined(SQLITE_CIO_NO_TRANSLATE) */ -#if SHELL_WIN_UTF8_OPT -/* Following struct is used for -utf8 operation. */ -static struct ConsoleState { - int stdinEof; /* EOF has been seen on console input */ - int infsMode; /* Input file stream mode upon shell start */ - UINT inCodePage; /* Input code page upon shell start */ - UINT outCodePage; /* Output code page upon shell start */ - HANDLE hConsoleIn; /* Console input handle */ - DWORD consoleMode; /* Console mode upon shell start */ -} conState = { 0, 0, 0, 0, INVALID_HANDLE_VALUE, 0 }; - -#ifndef _O_U16TEXT /* For build environments lacking this constant: */ -# define _O_U16TEXT 0x20000 -#endif - -/* -** Prepare console, (if known to be a WIN32 console), for UTF-8 -** input (from either typing or suitable paste operations) and for -** UTF-8 rendering. This may "fail" with a message to stderr, where -** the preparation is not done and common "code page" issues occur. -*/ -static void console_prepare(void){ - HANDLE hCI = GetStdHandle(STD_INPUT_HANDLE); - DWORD consoleMode = 0; - if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR - && GetConsoleMode( hCI, &consoleMode) ){ - if( !IsValidCodePage(CP_UTF8) ){ - fprintf(stderr, "Cannot use UTF-8 code page.\n"); - console_utf8 = 0; - return; +#ifdef SQLITE_CIO_INPUT_REDIR +/* Say whether given FILE* is among those known, via either +** consoleClassifySetup() or set{Output,Error}Stream, as +** readable, and return an associated PerStreamTags pointer +** if so. Otherwise, return 0. +*/ +static PerStreamTags * isKnownReadable(FILE *pf){ + static PerStreamTags *apst[] = { + &consoleInfo.pstDesignated[0], &consoleInfo.pstSetup[0], 0 + }; + int ix = 0; + do { + if( apst[ix]->pf == pf ) break; + } while( apst[++ix] != 0 ); + return apst[ix]; +} +#endif + +#ifndef SQLITE_CIO_NO_TRANSLATE +/* Say whether given FILE* is among those known, via either +** consoleClassifySetup() or set{Output,Error}Stream, as +** writable, and return an associated PerStreamTags pointer +** if so. Otherwise, return 0. +*/ +static PerStreamTags * isKnownWritable(FILE *pf){ + static PerStreamTags *apst[] = { + &consoleInfo.pstDesignated[1], &consoleInfo.pstDesignated[2], + &consoleInfo.pstSetup[1], &consoleInfo.pstSetup[2], 0 + }; + int ix = 0; + do { + if( apst[ix]->pf == pf ) break; + } while( apst[++ix] != 0 ); + return apst[ix]; +} + +static FILE *designateEmitStream(FILE *pf, unsigned chix){ + FILE *rv = consoleInfo.pstDesignated[chix].pf; + if( pf == invalidFileStream ) return rv; + else{ + /* Setting a possibly new output stream. */ + PerStreamTags *ppst = isKnownWritable(pf); + if( ppst != 0 ){ + PerStreamTags pst = *ppst; + consoleInfo.pstDesignated[chix] = pst; + }else streamOfConsole(pf, &consoleInfo.pstDesignated[chix]); + } + return rv; +} + +SQLITE_INTERNAL_LINKAGE FILE *setOutputStream(FILE *pf){ + return designateEmitStream(pf, 1); +} +# ifdef CONSIO_SET_ERROR_STREAM +SQLITE_INTERNAL_LINKAGE FILE *setErrorStream(FILE *pf){ + return designateEmitStream(pf, 2); +} +# endif +#endif /* !defined(SQLITE_CIO_NO_TRANSLATE) */ + +#ifndef SQLITE_CIO_NO_SETMODE +# if CIO_WIN_WC_XLATE +static void setModeFlushQ(FILE *pf, short bFlush, int mode){ + if( bFlush ) fflush(pf); + _setmode(_fileno(pf), mode); +} +# else +# define setModeFlushQ(f, b, m) if(b) fflush(f) +# endif + +SQLITE_INTERNAL_LINKAGE void setBinaryMode(FILE *pf, short bFlush){ + setModeFlushQ(pf, bFlush, _O_BINARY); +} +SQLITE_INTERNAL_LINKAGE void setTextMode(FILE *pf, short bFlush){ + setModeFlushQ(pf, bFlush, _O_TEXT); +} +# undef setModeFlushQ + +#else /* defined(SQLITE_CIO_NO_SETMODE) */ +# define setBinaryMode(f, bFlush) do{ if((bFlush)) fflush(f); }while(0) +# define setTextMode(f, bFlush) do{ if((bFlush)) fflush(f); }while(0) +#endif /* defined(SQLITE_CIO_NO_SETMODE) */ + +#ifndef SQLITE_CIO_NO_TRANSLATE +# if CIO_WIN_WC_XLATE +/* Write buffer cBuf as output to stream known to reach console, +** limited to ncTake char's. Return ncTake on success, else 0. */ +static int conZstrEmit(PerStreamTags *ppst, const char *z, int ncTake){ + int rv = 0; + if( z!=NULL ){ + int nwc = MultiByteToWideChar(CP_UTF8,0, z,ncTake, 0,0); + if( nwc > 0 ){ + WCHAR *zw = sqlite3_malloc64(nwc*sizeof(WCHAR)); + if( zw!=NULL ){ + nwc = MultiByteToWideChar(CP_UTF8,0, z,ncTake, zw,nwc); + if( nwc > 0 ){ + /* Translation from UTF-8 to UTF-16, then WCHARs out. */ + if( WriteConsoleW(ppst->hx, zw,nwc, 0, NULL) ){ + rv = ncTake; + } + } + sqlite3_free(zw); + } } - conState.hConsoleIn = hCI; - conState.consoleMode = consoleMode; - conState.inCodePage = GetConsoleCP(); - conState.outCodePage = GetConsoleOutputCP(); - SetConsoleCP(CP_UTF8); - SetConsoleOutputCP(CP_UTF8); - consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; - SetConsoleMode(conState.hConsoleIn, consoleMode); - conState.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); - console_utf8 = 1; + } + return rv; +} + +/* For {f,o,e}PrintfUtf8() when stream is known to reach console. */ +static int conioVmPrintf(PerStreamTags *ppst, const char *zFormat, va_list ap){ + char *z = sqlite3_vmprintf(zFormat, ap); + if( z ){ + int rv = conZstrEmit(ppst, z, (int)strlen(z)); + sqlite3_free(z); + return rv; + }else return 0; +} +# endif /* CIO_WIN_WC_XLATE */ + +# ifdef CONSIO_GET_EMIT_STREAM +static PerStreamTags * getDesignatedEmitStream(FILE *pf, unsigned chix, + PerStreamTags *ppst){ + PerStreamTags *rv = isKnownWritable(pf); + short isValid = (rv!=0)? isValidStreamInfo(rv) : 0; + if( rv != 0 && isValid ) return rv; + streamOfConsole(pf, ppst); + return ppst; +} +# endif + +/* Get stream info, either for designated output or error stream when +** chix equals 1 or 2, or for an arbitrary stream when chix == 0. +** In either case, ppst references a caller-owned PerStreamTags +** struct which may be filled in if none of the known writable +** streams is being held by consoleInfo. The ppf parameter is a +** byref output when chix!=0 and a byref input when chix==0. + */ +static PerStreamTags * +getEmitStreamInfo(unsigned chix, PerStreamTags *ppst, + /* in/out */ FILE **ppf){ + PerStreamTags *ppstTry; + FILE *pfEmit; + if( chix > 0 ){ + ppstTry = &consoleInfo.pstDesignated[chix]; + if( !isValidStreamInfo(ppstTry) ){ + ppstTry = &consoleInfo.pstSetup[chix]; + pfEmit = ppst->pf; + }else pfEmit = ppstTry->pf; + if( !isValidStreamInfo(ppstTry) ){ + pfEmit = (chix > 1)? stderr : stdout; + ppstTry = ppst; + streamOfConsole(pfEmit, ppstTry); + } + *ppf = pfEmit; }else{ - console_utf8 = 0; + ppstTry = isKnownWritable(*ppf); + if( ppstTry != 0 ) return ppstTry; + streamOfConsole(*ppf, ppst); + return ppst; } + return ppstTry; } -/* -** Undo the effects of console_prepare(), if any. -*/ -static void SQLITE_CDECL console_restore(void){ - if( console_utf8 && conState.inCodePage!=0 - && conState.hConsoleIn!=INVALID_HANDLE_VALUE ){ - _setmode(_fileno(stdin), conState.infsMode); - SetConsoleCP(conState.inCodePage); - SetConsoleOutputCP(conState.outCodePage); - SetConsoleMode(conState.hConsoleIn, conState.consoleMode); - /* Avoid multiple calls. */ - conState.hConsoleIn = INVALID_HANDLE_VALUE; - conState.consoleMode = 0; - console_utf8 = 0; +SQLITE_INTERNAL_LINKAGE int oPrintfUtf8(const char *zFormat, ...){ + va_list ap; + int rv; + FILE *pfOut; + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ +# if CIO_WIN_WC_XLATE + PerStreamTags *ppst = getEmitStreamInfo(1, &pst, &pfOut); +# else + getEmitStreamInfo(1, &pst, &pfOut); +# endif + assert(zFormat!=0); + va_start(ap, zFormat); +# if CIO_WIN_WC_XLATE + if( pstReachesConsole(ppst) ){ + rv = conioVmPrintf(ppst, zFormat, ap); + }else{ +# endif + rv = vfprintf(pfOut, zFormat, ap); +# if CIO_WIN_WC_XLATE } +# endif + va_end(ap); + return rv; } -/* -** Collect input like fgets(...) with special provisions for input -** from the Windows console to get around its strange coding issues. -** Defers to plain fgets() when input is not interactive or when the -** startup option, -utf8, has not been provided or taken effect. -*/ -static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ - if( fin==0 ) fin = stdin; - if( fin==stdin && stdin_is_interactive && console_utf8 ){ -# define SQLITE_IALIM 150 - wchar_t wbuf[SQLITE_IALIM]; - int lend = 0; - int noc = 0; - if( ncmax==0 || conState.stdinEof ) return 0; - buf[0] = 0; - while( nocpf) ) restoreConsoleArb(ppst); + }else{ +# endif + rv = vfprintf(pfO, zFormat, ap); +# if CIO_WIN_WC_XLATE + } +# endif + va_end(ap); + return rv; +} + +SQLITE_INTERNAL_LINKAGE int fPutsUtf8(const char *z, FILE *pfO){ + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ +# if CIO_WIN_WC_XLATE + PerStreamTags *ppst = getEmitStreamInfo(0, &pst, &pfO); +# else + getEmitStreamInfo(0, &pst, &pfO); +# endif + assert(z!=0); +# if CIO_WIN_WC_XLATE + if( pstReachesConsole(ppst) ){ + int rv; + maybeSetupAsConsole(ppst, 1); + rv = conZstrEmit(ppst, z, (int)strlen(z)); + if( 0 == isKnownWritable(ppst->pf) ) restoreConsoleArb(ppst); + return rv; + }else { +# endif + return (fputs(z, pfO)<0)? 0 : (int)strlen(z); +# if CIO_WIN_WC_XLATE + } +# endif +} + +SQLITE_INTERNAL_LINKAGE int ePutsUtf8(const char *z){ + FILE *pfErr; + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ +# if CIO_WIN_WC_XLATE + PerStreamTags *ppst = getEmitStreamInfo(2, &pst, &pfErr); +# else + getEmitStreamInfo(2, &pst, &pfErr); +# endif + assert(z!=0); +# if CIO_WIN_WC_XLATE + if( pstReachesConsole(ppst) ) return conZstrEmit(ppst, z, (int)strlen(z)); + else { +# endif + return (fputs(z, pfErr)<0)? 0 : (int)strlen(z); +# if CIO_WIN_WC_XLATE + } +# endif +} + +SQLITE_INTERNAL_LINKAGE int oPutsUtf8(const char *z){ + FILE *pfOut; + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ +# if CIO_WIN_WC_XLATE + PerStreamTags *ppst = getEmitStreamInfo(1, &pst, &pfOut); +# else + getEmitStreamInfo(1, &pst, &pfOut); +# endif + assert(z!=0); +# if CIO_WIN_WC_XLATE + if( pstReachesConsole(ppst) ) return conZstrEmit(ppst, z, (int)strlen(z)); + else { +# endif + return (fputs(z, pfOut)<0)? 0 : (int)strlen(z); +# if CIO_WIN_WC_XLATE + } +# endif +} + +#endif /* !defined(SQLITE_CIO_NO_TRANSLATE) */ + +#if !(defined(SQLITE_CIO_NO_UTF8SCAN) && defined(SQLITE_CIO_NO_TRANSLATE)) +/* Skip over as much z[] input char sequence as is valid UTF-8, +** limited per nAccept char's or whole characters and containing +** no char cn such that ((1<=0 => char count, nAccept<0 => character + */ +SQLITE_INTERNAL_LINKAGE const char* +zSkipValidUtf8(const char *z, int nAccept, long ccm){ + int ng = (nAccept<0)? -nAccept : 0; + const char *pcLimit = (nAccept>=0)? z+nAccept : 0; + assert(z!=0); + while( (pcLimit)? (z= pcLimit ) return z; + else{ + char ct = *zt++; + if( ct==0 || (zt-z)>4 || (ct & 0xC0)!=0x80 ){ + /* Trailing bytes are too few, too many, or invalid. */ + return z; + } + } + } while( ((c <<= 1) & 0x40) == 0x40 ); /* Eat lead byte's count. */ + z = zt; + } + } + return z; +} +#endif /*!(defined(SQLITE_CIO_NO_UTF8SCAN)&&defined(SQLITE_CIO_NO_TRANSLATE))*/ + +#ifndef SQLITE_CIO_NO_TRANSLATE +# ifdef CONSIO_SPUTB +SQLITE_INTERNAL_LINKAGE int +fPutbUtf8(FILE *pfO, const char *cBuf, int nAccept){ + assert(pfO!=0); +# if CIO_WIN_WC_XLATE + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ + PerStreamTags *ppst = getEmitStreamInfo(0, &pst, &pfO); + if( pstReachesConsole(ppst) ){ + int rv; + maybeSetupAsConsole(ppst, 1); + rv = conZstrEmit(ppst, cBuf, nAccept); + if( 0 == isKnownWritable(ppst->pf) ) restoreConsoleArb(ppst); + return rv; + }else { +# endif + return (int)fwrite(cBuf, 1, nAccept, pfO); +# if CIO_WIN_WC_XLATE + } +# endif +} +# endif + +SQLITE_INTERNAL_LINKAGE int +oPutbUtf8(const char *cBuf, int nAccept){ + FILE *pfOut; + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ +# if CIO_WIN_WC_XLATE + PerStreamTags *ppst = getEmitStreamInfo(1, &pst, &pfOut); +# else + getEmitStreamInfo(1, &pst, &pfOut); +# endif +# if CIO_WIN_WC_XLATE + if( pstReachesConsole(ppst) ){ + return conZstrEmit(ppst, cBuf, nAccept); + }else { +# endif + return (int)fwrite(cBuf, 1, nAccept, pfOut); +# if CIO_WIN_WC_XLATE + } +# endif +} + +# ifdef CONSIO_EPUTB +SQLITE_INTERNAL_LINKAGE int +ePutbUtf8(const char *cBuf, int nAccept){ + FILE *pfErr; + PerStreamTags pst = PST_INITIALIZER; /* for unknown streams */ + PerStreamTags *ppst = getEmitStreamInfo(2, &pst, &pfErr); +# if CIO_WIN_WC_XLATE + if( pstReachesConsole(ppst) ){ + return conZstrEmit(ppst, cBuf, nAccept); + }else { +# endif + return (int)fwrite(cBuf, 1, nAccept, pfErr); +# if CIO_WIN_WC_XLATE + } +# endif +} +# endif /* defined(CONSIO_EPUTB) */ + +SQLITE_INTERNAL_LINKAGE char* fGetsUtf8(char *cBuf, int ncMax, FILE *pfIn){ + if( pfIn==0 ) pfIn = stdin; +# if CIO_WIN_WC_XLATE + if( pfIn == consoleInfo.pstSetup[0].pf + && (consoleInfo.sacSetup & SAC_InConsole)!=0 ){ +# if CIO_WIN_WC_XLATE==1 +# define SHELL_GULP 150 /* Count of WCHARS to be gulped at a time */ + WCHAR wcBuf[SHELL_GULP+1]; + int lend = 0, noc = 0; + if( ncMax > 0 ) cBuf[0] = 0; + while( noc < ncMax-8-1 && !lend ){ /* There is room for at least 2 more characters and a 0-terminator. */ - int na = (ncmax > SQLITE_IALIM*4+1 + noc) - ? SQLITE_IALIM : (ncmax-1 - noc)/4; -# undef SQLITE_IALIM + int na = (ncMax > SHELL_GULP*4+1 + noc)? SHELL_GULP : (ncMax-1 - noc)/4; +# undef SHELL_GULP DWORD nbr = 0; - BOOL bRC = ReadConsoleW(conState.hConsoleIn, wbuf, na, &nbr, 0); + BOOL bRC = ReadConsoleW(consoleInfo.pstSetup[0].hx, wcBuf, na, &nbr, 0); + if( bRC && nbr>0 && (wcBuf[nbr-1]&0xF800)==0xD800 ){ + /* Last WHAR read is first of a UTF-16 surrogate pair. Grab its mate. */ + DWORD nbrx; + bRC &= ReadConsoleW(consoleInfo.pstSetup[0].hx, wcBuf+nbr, 1, &nbrx, 0); + if( bRC ) nbr += nbrx; + } if( !bRC || (noc==0 && nbr==0) ) return 0; if( nbr > 0 ){ - int nmb = WideCharToMultiByte(CP_UTF8,WC_COMPOSITECHECK|WC_DEFAULTCHAR, - wbuf,nbr,0,0,0,0); - if( nmb !=0 && noc+nmb <= ncmax ){ + int nmb = WideCharToMultiByte(CP_UTF8, 0, wcBuf,nbr,0,0,0,0); + if( nmb != 0 && noc+nmb <= ncMax ){ int iseg = noc; - nmb = WideCharToMultiByte(CP_UTF8,WC_COMPOSITECHECK|WC_DEFAULTCHAR, - wbuf,nbr,buf+noc,nmb,0,0); + nmb = WideCharToMultiByte(CP_UTF8, 0, wcBuf,nbr,cBuf+noc,nmb,0,0); noc += nmb; - /* Fixup line-ends as coded by Windows for CR (or "Enter".)*/ + /* Fixup line-ends as coded by Windows for CR (or "Enter".) + ** This is done without regard for any setMode{Text,Binary}() + ** call that might have been done on the interactive input. + */ if( noc > 0 ){ - if( buf[noc-1]=='\n' ){ + if( cBuf[noc-1]=='\n' ){ lend = 1; - if( noc > 1 && buf[noc-2]=='\r' ){ - buf[noc-2] = '\n'; - --noc; - } + if( noc > 1 && cBuf[noc-2]=='\r' ) cBuf[--noc-1] = '\n'; } } - /* Check for ^Z (anywhere in line) too. */ + /* Check for ^Z (anywhere in line) too, to act as EOF. */ while( iseg < noc ){ - if( buf[iseg]==0x1a ){ - conState.stdinEof = 1; + if( cBuf[iseg]=='\x1a' ){ noc = iseg; /* Chop ^Z and anything following. */ + lend = 1; /* Counts as end of line too. */ break; } ++iseg; @@ -730,826 +1221,1148 @@ static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ }else break; } /* If got nothing, (after ^Z chop), must be at end-of-file. */ - if( noc == 0 ) return 0; - buf[noc] = 0; - return buf; + if( noc > 0 ){ + cBuf[noc] = 0; + return cBuf; + }else return 0; +# endif }else{ - return fgets(buf, ncmax, fin); - } -} - -# define fgets(b,n,f) utf8_fgets(b,n,f) -#endif /* SHELL_WIN_UTF8_OPT */ - -/* -** Render output like fprintf(). Except, if the output is going to the -** console and if this is running on a Windows machine, and if the -utf8 -** option is unavailable or (available and inactive), translate the -** output from UTF-8 into MBCS for output through 8-bit stdout stream. -** (With -utf8 active, no translation is needed and must not be done.) -*/ -#if defined(_WIN32) || defined(WIN32) -void utf8_printf(FILE *out, const char *zFormat, ...){ - va_list ap; - va_start(ap, zFormat); - if( stdout_is_console && (out==stdout || out==stderr) -# if SHELL_WIN_UTF8_OPT - && !console_utf8 # endif - ){ - char *z1 = sqlite3_vmprintf(zFormat, ap); - char *z2 = sqlite3_win32_utf8_to_mbcs_v2(z1, 0); - sqlite3_free(z1); - fputs(z2, out); - sqlite3_free(z2); - }else{ - vfprintf(out, zFormat, ap); + return fgets(cBuf, ncMax, pfIn); +# if CIO_WIN_WC_XLATE } - va_end(ap); +# endif } -#elif !defined(utf8_printf) -# define utf8_printf fprintf -#endif +#endif /* !defined(SQLITE_CIO_NO_TRANSLATE) */ -/* -** Render output like fprintf(). This should not be used on anything that -** includes string formatting (e.g. "%s"). -*/ -#if !defined(raw_printf) -# define raw_printf fprintf +#if defined(_MSC_VER) +# pragma warning(default : 4204) #endif -/* Indicate out-of-memory and exit. */ -static void shell_out_of_memory(void){ - raw_printf(stderr,"Error: out of memory\n"); - exit(1); -} +#undef SHELL_INVALID_FILE_PTR -/* Check a pointer to see if it is NULL. If it is NULL, exit with an -** out-of-memory error. -*/ -static void shell_check_oom(const void *p){ - if( p==0 ) shell_out_of_memory(); -} +/************************* End ../ext/consio/console_io.c ********************/ -/* -** Write I/O traces to the following stream. -*/ -#ifdef SQLITE_ENABLE_IOTRACE -static FILE *iotrace = 0; +#ifndef SQLITE_SHELL_FIDDLE + +/* From here onward, fgets() is redirected to the console_io library. */ +# define fgets(b,n,f) fGetsUtf8(b,n,f) +/* + * Define macros for emitting output text in various ways: + * sputz(s, z) => emit 0-terminated string z to given stream s + * sputf(s, f, ...) => emit varargs per format f to given stream s + * oputz(z) => emit 0-terminated string z to default stream + * oputf(f, ...) => emit varargs per format f to default stream + * eputz(z) => emit 0-terminated string z to error stream + * eputf(f, ...) => emit varargs per format f to error stream + * oputb(b, n) => emit char buffer b[0..n-1] to default stream + * + * Note that the default stream is whatever has been last set via: + * setOutputStream(FILE *pf) + * This is normally the stream that CLI normal output goes to. + * For the stand-alone CLI, it is stdout with no .output redirect. + * + * The ?putz(z) forms are required for the Fiddle builds for string literal + * output, in aid of enforcing format string to argument correspondence. + */ +# define sputz(s,z) fPutsUtf8(z,s) +# define sputf fPrintfUtf8 +# define oputz(z) oPutsUtf8(z) +# define oputf oPrintfUtf8 +# define eputz(z) ePutsUtf8(z) +# define eputf ePrintfUtf8 +# define oputb(buf,na) oPutbUtf8(buf,na) + +#else +/* For Fiddle, all console handling and emit redirection is omitted. */ +/* These next 3 macros are for emitting formatted output. When complaints + * from the WASM build are issued for non-formatted output, (when a mere + * string literal is to be emitted, the ?putz(z) forms should be used. + * (This permits compile-time checking of format string / argument mismatch.) + */ +# define oputf(fmt, ...) printf(fmt,__VA_ARGS__) +# define eputf(fmt, ...) fprintf(stderr,fmt,__VA_ARGS__) +# define sputf(fp,fmt, ...) fprintf(fp,fmt,__VA_ARGS__) +/* These next 3 macros are for emitting simple string literals. */ +# define oputz(z) fputs(z,stdout) +# define eputz(z) fputs(z,stderr) +# define sputz(fp,z) fputs(z,fp) +# define oputb(buf,na) fwrite(buf,1,na,stdout) #endif -/* -** This routine works like printf in that its first argument is a -** format string and subsequent arguments are values to be substituted -** in place of % fields. The result of formatting this string -** is written to iotrace. -*/ -#ifdef SQLITE_ENABLE_IOTRACE -static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){ - va_list ap; - char *z; - if( iotrace==0 ) return; - va_start(ap, zFormat); - z = sqlite3_vmprintf(zFormat, ap); - va_end(ap); - utf8_printf(iotrace, "%s", z); - sqlite3_free(z); +/* True if the timer is enabled */ +static int enableTimer = 0; + +/* A version of strcmp() that works with NULL values */ +static int cli_strcmp(const char *a, const char *b){ + if( a==0 ) a = ""; + if( b==0 ) b = ""; + return strcmp(a,b); +} +static int cli_strncmp(const char *a, const char *b, size_t n){ + if( a==0 ) a = ""; + if( b==0 ) b = ""; + return strncmp(a,b,n); +} + +/* Return the current wall-clock time */ +static sqlite3_int64 timeOfDay(void){ + static sqlite3_vfs *clockVfs = 0; + sqlite3_int64 t; + if( clockVfs==0 ) clockVfs = sqlite3_vfs_find(0); + if( clockVfs==0 ) return 0; /* Never actually happens */ + if( clockVfs->iVersion>=2 && clockVfs->xCurrentTimeInt64!=0 ){ + clockVfs->xCurrentTimeInt64(clockVfs, &t); + }else{ + double r; + clockVfs->xCurrentTime(clockVfs, &r); + t = (sqlite3_int64)(r*86400000.0); + } + return t; } + +#if !defined(_WIN32) && !defined(WIN32) && !defined(__minux) +#include +#include + +/* VxWorks does not support getrusage() as far as we can determine */ +#if defined(_WRS_KERNEL) || defined(__RTP__) +struct rusage { + struct timeval ru_utime; /* user CPU time used */ + struct timeval ru_stime; /* system CPU time used */ +}; +#define getrusage(A,B) memset(B,0,sizeof(*B)) #endif +/* Saved resource information for the beginning of an operation */ +static struct rusage sBegin; /* CPU time at start */ +static sqlite3_int64 iBegin; /* Wall-clock time at start */ + /* -** Output string zUtf to stream pOut as w characters. If w is negative, -** then right-justify the text. W is the width in UTF-8 characters, not -** in bytes. This is different from the %*.*s specification in printf -** since with %*.*s the width is measured in bytes, not characters. +** Begin timing an operation */ -static void utf8_width_print(FILE *pOut, int w, const char *zUtf){ - int i; - int n; - int aw = w<0 ? -w : w; - if( zUtf==0 ) zUtf = ""; - for(i=n=0; zUtf[i]; i++){ - if( (zUtf[i]&0xc0)!=0x80 ){ - n++; - if( n==aw ){ - do{ i++; }while( (zUtf[i]&0xc0)==0x80 ); - break; - } - } - } - if( n>=aw ){ - utf8_printf(pOut, "%.*s", i, zUtf); - }else if( w<0 ){ - utf8_printf(pOut, "%*s%s", aw-n, "", zUtf); - }else{ - utf8_printf(pOut, "%s%*s", zUtf, aw-n, ""); +static void beginTimer(void){ + if( enableTimer ){ + getrusage(RUSAGE_SELF, &sBegin); + iBegin = timeOfDay(); } } +/* Return the difference of two time_structs in seconds */ +static double timeDiff(struct timeval *pStart, struct timeval *pEnd){ + return (pEnd->tv_usec - pStart->tv_usec)*0.000001 + + (double)(pEnd->tv_sec - pStart->tv_sec); +} /* -** Determines if a string is a number of not. +** Print the timing results. */ -static int isNumber(const char *z, int *realnum){ - if( *z=='-' || *z=='+' ) z++; - if( !IsDigit(*z) ){ - return 0; - } - z++; - if( realnum ) *realnum = 0; - while( IsDigit(*z) ){ z++; } - if( *z=='.' ){ - z++; - if( !IsDigit(*z) ) return 0; - while( IsDigit(*z) ){ z++; } - if( realnum ) *realnum = 1; - } - if( *z=='e' || *z=='E' ){ - z++; - if( *z=='+' || *z=='-' ) z++; - if( !IsDigit(*z) ) return 0; - while( IsDigit(*z) ){ z++; } - if( realnum ) *realnum = 1; +static void endTimer(void){ + if( enableTimer ){ + sqlite3_int64 iEnd = timeOfDay(); + struct rusage sEnd; + getrusage(RUSAGE_SELF, &sEnd); + sputf(stdout, "Run Time: real %.3f user %f sys %f\n", + (iEnd - iBegin)*0.001, + timeDiff(&sBegin.ru_utime, &sEnd.ru_utime), + timeDiff(&sBegin.ru_stime, &sEnd.ru_stime)); } - return *z==0; } +#define BEGIN_TIMER beginTimer() +#define END_TIMER endTimer() +#define HAS_TIMER 1 + +#elif (defined(_WIN32) || defined(WIN32)) + +/* Saved resource information for the beginning of an operation */ +static HANDLE hProcess; +static FILETIME ftKernelBegin; +static FILETIME ftUserBegin; +static sqlite3_int64 ftWallBegin; +typedef BOOL (WINAPI *GETPROCTIMES)(HANDLE, LPFILETIME, LPFILETIME, + LPFILETIME, LPFILETIME); +static GETPROCTIMES getProcessTimesAddr = NULL; + /* -** Compute a string length that is limited to what can be stored in -** lower 30 bits of a 32-bit signed integer. +** Check to see if we have timer support. Return 1 if necessary +** support found (or found previously). */ -static int strlen30(const char *z){ - const char *z2 = z; - while( *z2 ){ z2++; } - return 0x3fffffff & (int)(z2 - z); +static int hasTimer(void){ + if( getProcessTimesAddr ){ + return 1; + } else { +#if !SQLITE_OS_WINRT + /* GetProcessTimes() isn't supported in WIN95 and some other Windows + ** versions. See if the version we are running on has it, and if it + ** does, save off a pointer to it and the current process handle. + */ + hProcess = GetCurrentProcess(); + if( hProcess ){ + HINSTANCE hinstLib = LoadLibrary(TEXT("Kernel32.dll")); + if( NULL != hinstLib ){ + getProcessTimesAddr = + (GETPROCTIMES) GetProcAddress(hinstLib, "GetProcessTimes"); + if( NULL != getProcessTimesAddr ){ + return 1; + } + FreeLibrary(hinstLib); + } + } +#endif + } + return 0; } /* -** Return the length of a string in characters. Multibyte UTF8 characters -** count as a single character. +** Begin timing an operation */ -static int strlenChar(const char *z){ - int n = 0; - while( *z ){ - if( (0xc0&*(z++))!=0x80 ) n++; +static void beginTimer(void){ + if( enableTimer && getProcessTimesAddr ){ + FILETIME ftCreation, ftExit; + getProcessTimesAddr(hProcess,&ftCreation,&ftExit, + &ftKernelBegin,&ftUserBegin); + ftWallBegin = timeOfDay(); } - return n; +} + +/* Return the difference of two FILETIME structs in seconds */ +static double timeDiff(FILETIME *pStart, FILETIME *pEnd){ + sqlite_int64 i64Start = *((sqlite_int64 *) pStart); + sqlite_int64 i64End = *((sqlite_int64 *) pEnd); + return (double) ((i64End - i64Start) / 10000000.0); } /* -** Return open FILE * if zFile exists, can be opened for read -** and is an ordinary file or a character stream source. -** Otherwise return 0. +** Print the timing results. */ -static FILE * openChrSource(const char *zFile){ -#ifdef _WIN32 - struct _stat x = {0}; -# define STAT_CHR_SRC(mode) ((mode & (_S_IFCHR|_S_IFIFO|_S_IFREG))!=0) - /* On Windows, open first, then check the stream nature. This order - ** is necessary because _stat() and sibs, when checking a named pipe, - ** effectively break the pipe as its supplier sees it. */ - FILE *rv = fopen(zFile, "rb"); - if( rv==0 ) return 0; - if( _fstat(_fileno(rv), &x) != 0 - || !STAT_CHR_SRC(x.st_mode)){ - fclose(rv); - rv = 0; +static void endTimer(void){ + if( enableTimer && getProcessTimesAddr){ + FILETIME ftCreation, ftExit, ftKernelEnd, ftUserEnd; + sqlite3_int64 ftWallEnd = timeOfDay(); + getProcessTimesAddr(hProcess,&ftCreation,&ftExit,&ftKernelEnd,&ftUserEnd); + sputf(stdout, "Run Time: real %.3f user %f sys %f\n", + (ftWallEnd - ftWallBegin)*0.001, + timeDiff(&ftUserBegin, &ftUserEnd), + timeDiff(&ftKernelBegin, &ftKernelEnd)); } - return rv; +} + +#define BEGIN_TIMER beginTimer() +#define END_TIMER endTimer() +#define HAS_TIMER hasTimer() + #else - struct stat x = {0}; - int rc = stat(zFile, &x); -# define STAT_CHR_SRC(mode) (S_ISREG(mode)||S_ISFIFO(mode)||S_ISCHR(mode)) - if( rc!=0 ) return 0; - if( STAT_CHR_SRC(x.st_mode) ){ - return fopen(zFile, "rb"); - }else{ - return 0; - } +#define BEGIN_TIMER +#define END_TIMER +#define HAS_TIMER 0 #endif -#undef STAT_CHR_SRC -} /* -** This routine reads a line of text from FILE in, stores -** the text in memory obtained from malloc() and returns a pointer -** to the text. NULL is returned at end of file, or if malloc() -** fails. -** -** If zLine is not NULL then it is a malloced buffer returned from -** a previous call to this routine that may be reused. +** Used to prevent warnings about unused parameters */ -static char *local_getline(char *zLine, FILE *in){ - int nLine = zLine==0 ? 0 : 100; - int n = 0; - - while( 1 ){ - if( n+100>nLine ){ - nLine = nLine*2 + 100; - zLine = realloc(zLine, nLine); - shell_check_oom(zLine); - } - if( fgets(&zLine[n], nLine - n, in)==0 ){ - if( n==0 ){ - free(zLine); - return 0; - } - zLine[n] = 0; - break; - } - while( zLine[n] ) n++; - if( n>0 && zLine[n-1]=='\n' ){ - n--; - if( n>0 && zLine[n-1]=='\r' ) n--; - zLine[n] = 0; - break; - } - } -#if defined(_WIN32) || defined(WIN32) - /* For interactive input on Windows systems, without -utf8, - ** translate the multi-byte characterset characters into UTF-8. - ** This is the translation that predates the -utf8 option. */ - if( stdin_is_interactive && in==stdin -# if SHELL_WIN_UTF8_OPT - && !console_utf8 -# endif /* SHELL_WIN_UTF8_OPT */ - ){ - char *zTrans = sqlite3_win32_mbcs_to_utf8_v2(zLine, 0); - if( zTrans ){ - i64 nTrans = strlen(zTrans)+1; - if( nTrans>nLine ){ - zLine = realloc(zLine, nTrans); - shell_check_oom(zLine); - } - memcpy(zLine, zTrans, nTrans); - sqlite3_free(zTrans); - } - } -#endif /* defined(_WIN32) || defined(WIN32) */ - return zLine; -} +#define UNUSED_PARAMETER(x) (void)(x) /* -** Retrieve a single line of input text. -** -** If in==0 then read from standard input and prompt before each line. -** If isContinuation is true, then a continuation prompt is appropriate. -** If isContinuation is zero, then the main prompt should be used. -** -** If zPrior is not NULL then it is a buffer from a prior call to this -** routine that can be reused. -** -** The result is stored in space obtained from malloc() and must either -** be freed by the caller or else passed back into this routine via the -** zPrior argument for reuse. +** Number of elements in an array */ -#ifndef SQLITE_SHELL_FIDDLE -static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ - char *zPrompt; - char *zResult; - if( in!=0 ){ - zResult = local_getline(zPrior, in); - }else{ - zPrompt = isContinuation ? CONTINUATION_PROMPT : mainPrompt; -#if SHELL_USE_LOCAL_GETLINE - printf("%s", zPrompt); - fflush(stdout); - do{ - zResult = local_getline(zPrior, stdin); - zPrior = 0; - /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */ - if( zResult==0 ) sqlite3_sleep(50); - }while( zResult==0 && seenInterrupt>0 ); -#else - free(zPrior); - zResult = shell_readline(zPrompt); - while( zResult==0 ){ - /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */ - sqlite3_sleep(50); - if( seenInterrupt==0 ) break; - zResult = shell_readline(""); - } - if( zResult && *zResult ) shell_add_history(zResult); -#endif - } - return zResult; -} -#endif /* !SQLITE_SHELL_FIDDLE */ +#define ArraySize(X) (int)(sizeof(X)/sizeof(X[0])) /* -** Return the value of a hexadecimal digit. Return -1 if the input -** is not a hex digit. +** If the following flag is set, then command execution stops +** at an error if we are not interactive. */ -static int hexDigitValue(char c){ - if( c>='0' && c<='9' ) return c - '0'; - if( c>='a' && c<='f' ) return c - 'a' + 10; - if( c>='A' && c<='F' ) return c - 'A' + 10; - return -1; -} +static int bail_on_error = 0; /* -** Interpret zArg as an integer value, possibly with suffixes. +** Treat stdin as an interactive input if the following variable +** is true. Otherwise, assume stdin is connected to a file or pipe. */ -static sqlite3_int64 integerValue(const char *zArg){ - sqlite3_int64 v = 0; - static const struct { char *zSuffix; int iMult; } aMult[] = { - { "KiB", 1024 }, - { "MiB", 1024*1024 }, - { "GiB", 1024*1024*1024 }, - { "KB", 1000 }, - { "MB", 1000000 }, - { "GB", 1000000000 }, - { "K", 1000 }, - { "M", 1000000 }, - { "G", 1000000000 }, - }; - int i; - int isNeg = 0; - if( zArg[0]=='-' ){ - isNeg = 1; - zArg++; - }else if( zArg[0]=='+' ){ - zArg++; - } - if( zArg[0]=='0' && zArg[1]=='x' ){ - int x; - zArg += 2; - while( (x = hexDigitValue(zArg[0]))>=0 ){ - v = (v<<4) + x; - zArg++; - } - }else{ - while( IsDigit(zArg[0]) ){ - v = v*10 + zArg[0] - '0'; - zArg++; - } - } - for(i=0; iz); - initText(p); -} +static sqlite3 *globalDb = 0; -/* zIn is either a pointer to a NULL-terminated string in memory obtained -** from malloc(), or a NULL pointer. The string pointed to by zAppend is -** added to zIn, and the result returned in memory obtained from malloc(). -** zIn, if it was not NULL, is freed. -** -** If the third argument, quote, is not '\0', then it is used as a -** quote character for zAppend. +/* +** True if an interrupt (Control-C) has been received. */ -static void appendText(ShellText *p, const char *zAppend, char quote){ - i64 len; - i64 i; - i64 nAppend = strlen30(zAppend); - - len = nAppend+p->n+1; - if( quote ){ - len += 2; - for(i=0; iz==0 || p->n+len>=p->nAlloc ){ - p->nAlloc = p->nAlloc*2 + len + 20; - p->z = realloc(p->z, p->nAlloc); - shell_check_oom(p->z); - } +static volatile int seenInterrupt = 0; - if( quote ){ - char *zCsr = p->z+p->n; - *zCsr++ = quote; - for(i=0; in = (int)(zCsr - p->z); - *zCsr = '\0'; - }else{ - memcpy(p->z+p->n, zAppend, nAppend); - p->n += nAppend; - p->z[p->n] = '\0'; - } -} +/* +** This is the name of our program. It is set in main(), used +** in a number of other places, mostly for error messages. +*/ +static char *Argv0; /* -** Attempt to determine if identifier zName needs to be quoted, either -** because it contains non-alphanumeric characters, or because it is an -** SQLite keyword. Be conservative in this estimate: When in doubt assume -** that quoting is required. -** -** Return '"' if quoting is required. Return 0 if no quoting is required. +** Prompt strings. Initialized in main. Settable with +** .prompt main continue */ -static char quoteChar(const char *zName){ - int i; - if( zName==0 ) return '"'; - if( !isalpha((unsigned char)zName[0]) && zName[0]!='_' ) return '"'; - for(i=0; zName[i]; i++){ - if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ) return '"'; - } - return sqlite3_keyword_check(zName, i) ? '"' : 0; +#define PROMPT_LEN_MAX 20 +/* First line prompt. default: "sqlite> " */ +static char mainPrompt[PROMPT_LEN_MAX]; +/* Continuation prompt. default: " ...> " */ +static char continuePrompt[PROMPT_LEN_MAX]; + +/* This is variant of the standard-library strncpy() routine with the +** one change that the destination string is always zero-terminated, even +** if there is no zero-terminator in the first n-1 characters of the source +** string. +*/ +static char *shell_strncpy(char *dest, const char *src, size_t n){ + size_t i; + for(i=0; iinParenLevel += ni; + if( ni==0 ) p->inParenLevel = 0; + p->zScannerAwaits = 0; +} + +/* Record that a lexeme is opened, or closed with args==0. */ +static void setLexemeOpen(struct DynaPrompt *p, char *s, char c){ + if( s!=0 || c==0 ){ + p->zScannerAwaits = s; + p->acAwait[0] = 0; + }else{ + p->acAwait[0] = c; + p->zScannerAwaits = p->acAwait; } - appendText(&s, ")", 0); - sqlite3_finalize(pStmt); - if( nRow==0 ){ - freeText(&s); - s.z = 0; +} + +/* Upon demand, derive the continuation prompt to display. */ +static char *dynamicContinuePrompt(void){ + if( continuePrompt[0]==0 + || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){ + return continuePrompt; + }else{ + if( dynPrompt.zScannerAwaits ){ + size_t ncp = strlen(continuePrompt); + size_t ndp = strlen(dynPrompt.zScannerAwaits); + if( ndp > ncp-3 ) return continuePrompt; + strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits); + while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' '; + shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, + PROMPT_LEN_MAX-4); + }else{ + if( dynPrompt.inParenLevel>9 ){ + shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4); + }else if( dynPrompt.inParenLevel<0 ){ + shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4); + }else{ + shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4); + dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel); + } + shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, + PROMPT_LEN_MAX-4); + } } - return s.z; + return dynPrompt.dynamicPrompt; +} +#endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */ + +/* Indicate out-of-memory and exit. */ +static void shell_out_of_memory(void){ + eputz("Error: out of memory\n"); + exit(1); +} + +/* Check a pointer to see if it is NULL. If it is NULL, exit with an +** out-of-memory error. +*/ +static void shell_check_oom(const void *p){ + if( p==0 ) shell_out_of_memory(); } /* -** SQL function: strtod(X) -** -** Use the C-library strtod() function to convert string X into a double. -** Used for comparing the accuracy of SQLite's internal text-to-float conversion -** routines against the C-library. +** Write I/O traces to the following stream. */ -static void shellStrtod( - sqlite3_context *pCtx, - int nVal, - sqlite3_value **apVal -){ - char *z = (char*)sqlite3_value_text(apVal[0]); - UNUSED_PARAMETER(nVal); - if( z==0 ) return; - sqlite3_result_double(pCtx, strtod(z,0)); +#ifdef SQLITE_ENABLE_IOTRACE +static FILE *iotrace = 0; +#endif + +/* +** This routine works like printf in that its first argument is a +** format string and subsequent arguments are values to be substituted +** in place of % fields. The result of formatting this string +** is written to iotrace. +*/ +#ifdef SQLITE_ENABLE_IOTRACE +static void SQLITE_CDECL iotracePrintf(const char *zFormat, ...){ + va_list ap; + char *z; + if( iotrace==0 ) return; + va_start(ap, zFormat); + z = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + sputf(iotrace, "%s", z); + sqlite3_free(z); } +#endif /* -** SQL function: dtostr(X) -** -** Use the C-library printf() function to convert real value X into a string. -** Used for comparing the accuracy of SQLite's internal float-to-text conversion -** routines against the C-library. +** Output string zUtf to Out stream as w characters. If w is negative, +** then right-justify the text. W is the width in UTF-8 characters, not +** in bytes. This is different from the %*.*s specification in printf +** since with %*.*s the width is measured in bytes, not characters. */ -static void shellDtostr( - sqlite3_context *pCtx, - int nVal, - sqlite3_value **apVal -){ - double r = sqlite3_value_double(apVal[0]); - int n = nVal>=2 ? sqlite3_value_int(apVal[1]) : 26; - char z[400]; - if( n<1 ) n = 1; - if( n>350 ) n = 350; - sprintf(z, "%#+.*e", n, r); - sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT); +static void utf8_width_print(int w, const char *zUtf){ + int i; + int n; + int aw = w<0 ? -w : w; + if( zUtf==0 ) zUtf = ""; + for(i=n=0; zUtf[i]; i++){ + if( (zUtf[i]&0xc0)!=0x80 ){ + n++; + if( n==aw ){ + do{ i++; }while( (zUtf[i]&0xc0)==0x80 ); + break; + } + } + } + if( n>=aw ){ + oputf("%.*s", i, zUtf); + }else if( w<0 ){ + oputf("%*s%s", aw-n, "", zUtf); + }else{ + oputf("%s%*s", zUtf, aw-n, ""); + } } /* -** SQL function: shell_module_schema(X) -** -** Return a fake schema for the table-valued function or eponymous virtual -** table X. +** Determines if a string is a number of not. */ -static void shellModuleSchema( - sqlite3_context *pCtx, - int nVal, - sqlite3_value **apVal -){ - const char *zName; - char *zFake; - UNUSED_PARAMETER(nVal); - zName = (const char*)sqlite3_value_text(apVal[0]); - zFake = zName? shellFakeSchema(sqlite3_context_db_handle(pCtx), 0, zName) : 0; - if( zFake ){ - sqlite3_result_text(pCtx, sqlite3_mprintf("/* %s */", zFake), - -1, sqlite3_free); - free(zFake); +static int isNumber(const char *z, int *realnum){ + if( *z=='-' || *z=='+' ) z++; + if( !IsDigit(*z) ){ + return 0; + } + z++; + if( realnum ) *realnum = 0; + while( IsDigit(*z) ){ z++; } + if( *z=='.' ){ + z++; + if( !IsDigit(*z) ) return 0; + while( IsDigit(*z) ){ z++; } + if( realnum ) *realnum = 1; + } + if( *z=='e' || *z=='E' ){ + z++; + if( *z=='+' || *z=='-' ) z++; + if( !IsDigit(*z) ) return 0; + while( IsDigit(*z) ){ z++; } + if( realnum ) *realnum = 1; } + return *z==0; } /* -** SQL function: shell_add_schema(S,X) -** -** Add the schema name X to the CREATE statement in S and return the result. -** Examples: -** -** CREATE TABLE t1(x) -> CREATE TABLE xyz.t1(x); -** -** Also works on -** -** CREATE INDEX -** CREATE UNIQUE INDEX -** CREATE VIEW -** CREATE TRIGGER -** CREATE VIRTUAL TABLE -** -** This UDF is used by the .schema command to insert the schema name of -** attached databases into the middle of the sqlite_schema.sql field. +** Compute a string length that is limited to what can be stored in +** lower 30 bits of a 32-bit signed integer. */ -static void shellAddSchemaName( - sqlite3_context *pCtx, - int nVal, - sqlite3_value **apVal -){ - static const char *aPrefix[] = { - "TABLE", - "INDEX", - "UNIQUE INDEX", - "VIEW", - "TRIGGER", - "VIRTUAL TABLE" - }; - int i = 0; - const char *zIn = (const char*)sqlite3_value_text(apVal[0]); - const char *zSchema = (const char*)sqlite3_value_text(apVal[1]); - const char *zName = (const char*)sqlite3_value_text(apVal[2]); - sqlite3 *db = sqlite3_context_db_handle(pCtx); - UNUSED_PARAMETER(nVal); - if( zIn!=0 && cli_strncmp(zIn, "CREATE ", 7)==0 ){ - for(i=0; inLine ){ + nLine = nLine*2 + 100; + zLine = realloc(zLine, nLine); + shell_check_oom(zLine); + } + if( fgets(&zLine[n], nLine - n, in)==0 ){ + if( n==0 ){ + free(zLine); + return 0; + } + zLine[n] = 0; + break; + } + while( zLine[n] ) n++; + if( n>0 && zLine[n-1]=='\n' ){ + n--; + if( n>0 && zLine[n-1]=='\r' ) n--; + zLine[n] = 0; + break; + } + } + return zLine; +} /* -** We need several data types from the Windows SDK header. +** Retrieve a single line of input text. +** +** If in==0 then read from standard input and prompt before each line. +** If isContinuation is true, then a continuation prompt is appropriate. +** If isContinuation is zero, then the main prompt should be used. +** +** If zPrior is not NULL then it is a buffer from a prior call to this +** routine that can be reused. +** +** The result is stored in space obtained from malloc() and must either +** be freed by the caller or else passed back into this routine via the +** zPrior argument for reuse. */ - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN +#ifndef SQLITE_SHELL_FIDDLE +static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ + char *zPrompt; + char *zResult; + if( in!=0 ){ + zResult = local_getline(zPrior, in); + }else{ + zPrompt = isContinuation ? CONTINUATION_PROMPT : mainPrompt; +#if SHELL_USE_LOCAL_GETLINE + sputz(stdout, zPrompt); + fflush(stdout); + do{ + zResult = local_getline(zPrior, stdin); + zPrior = 0; + /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */ + if( zResult==0 ) sqlite3_sleep(50); + }while( zResult==0 && seenInterrupt>0 ); +#else + free(zPrior); + zResult = shell_readline(zPrompt); + while( zResult==0 ){ + /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */ + sqlite3_sleep(50); + if( seenInterrupt==0 ) break; + zResult = shell_readline(""); + } + if( zResult && *zResult ) shell_add_history(zResult); #endif - -#include "windows.h" + } + return zResult; +} +#endif /* !SQLITE_SHELL_FIDDLE */ /* -** We need several support functions from the SQLite core. +** Return the value of a hexadecimal digit. Return -1 if the input +** is not a hex digit. */ - -/* #include "sqlite3.h" */ +static int hexDigitValue(char c){ + if( c>='0' && c<='9' ) return c - '0'; + if( c>='a' && c<='f' ) return c - 'a' + 10; + if( c>='A' && c<='F' ) return c - 'A' + 10; + return -1; +} /* -** We need several things from the ANSI and MSVCRT headers. +** Interpret zArg as an integer value, possibly with suffixes. */ - -#include -#include -#include -#include -#include -#include -#include +static sqlite3_int64 integerValue(const char *zArg){ + sqlite3_int64 v = 0; + static const struct { char *zSuffix; int iMult; } aMult[] = { + { "KiB", 1024 }, + { "MiB", 1024*1024 }, + { "GiB", 1024*1024*1024 }, + { "KB", 1000 }, + { "MB", 1000000 }, + { "GB", 1000000000 }, + { "K", 1000 }, + { "M", 1000000 }, + { "G", 1000000000 }, + }; + int i; + int isNeg = 0; + if( zArg[0]=='-' ){ + isNeg = 1; + zArg++; + }else if( zArg[0]=='+' ){ + zArg++; + } + if( zArg[0]=='0' && zArg[1]=='x' ){ + int x; + zArg += 2; + while( (x = hexDigitValue(zArg[0]))>=0 ){ + v = (v<<4) + x; + zArg++; + } + }else{ + while( IsDigit(zArg[0]) ){ + v = v*10 + zArg[0] - '0'; + zArg++; + } + } + for(i=0; iz); + initText(p); +} -#ifndef MODE_T_DEFINED - #define MODE_T_DEFINED - typedef unsigned short mode_t; -#endif - -/* -** We may need to provide the "ino_t" type. +/* zIn is either a pointer to a NULL-terminated string in memory obtained +** from malloc(), or a NULL pointer. The string pointed to by zAppend is +** added to zIn, and the result returned in memory obtained from malloc(). +** zIn, if it was not NULL, is freed. +** +** If the third argument, quote, is not '\0', then it is used as a +** quote character for zAppend. */ +static void appendText(ShellText *p, const char *zAppend, char quote){ + i64 len; + i64 i; + i64 nAppend = strlen30(zAppend); -#ifndef INO_T_DEFINED - #define INO_T_DEFINED - typedef unsigned short ino_t; -#endif + len = nAppend+p->n+1; + if( quote ){ + len += 2; + for(i=0; iz==0 || p->n+len>=p->nAlloc ){ + p->nAlloc = p->nAlloc*2 + len + 20; + p->z = realloc(p->z, p->nAlloc); + shell_check_oom(p->z); + } -#ifndef NAME_MAX -# ifdef FILENAME_MAX -# define NAME_MAX (FILENAME_MAX) -# else -# define NAME_MAX (260) -# endif -#endif + if( quote ){ + char *zCsr = p->z+p->n; + *zCsr++ = quote; + for(i=0; in = (int)(zCsr - p->z); + *zCsr = '\0'; + }else{ + memcpy(p->z+p->n, zAppend, nAppend); + p->n += nAppend; + p->z[p->n] = '\0'; + } +} /* -** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T". +** Attempt to determine if identifier zName needs to be quoted, either +** because it contains non-alphanumeric characters, or because it is an +** SQLite keyword. Be conservative in this estimate: When in doubt assume +** that quoting is required. +** +** Return '"' if quoting is required. Return 0 if no quoting is required. */ - -#ifndef NULL_INTPTR_T -# define NULL_INTPTR_T ((intptr_t)(0)) -#endif - -#ifndef BAD_INTPTR_T -# define BAD_INTPTR_T ((intptr_t)(-1)) -#endif +static char quoteChar(const char *zName){ + int i; + if( zName==0 ) return '"'; + if( !isalpha((unsigned char)zName[0]) && zName[0]!='_' ) return '"'; + for(i=0; zName[i]; i++){ + if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ) return '"'; + } + return sqlite3_keyword_check(zName, i) ? '"' : 0; +} /* -** We need to provide the necessary structures and related types. +** Construct a fake object name and column list to describe the structure +** of the view, virtual table, or table valued function zSchema.zName. */ +static char *shellFakeSchema( + sqlite3 *db, /* The database connection containing the vtab */ + const char *zSchema, /* Schema of the database holding the vtab */ + const char *zName /* The name of the virtual table */ +){ + sqlite3_stmt *pStmt = 0; + char *zSql; + ShellText s; + char cQuote; + char *zDiv = "("; + int nRow = 0; -#ifndef DIRENT_DEFINED -#define DIRENT_DEFINED -typedef struct DIRENT DIRENT; -typedef DIRENT *LPDIRENT; -struct DIRENT { - ino_t d_ino; /* Sequence number, do not use. */ - unsigned d_attributes; /* Win32 file attributes. */ - char d_name[NAME_MAX + 1]; /* Name within the directory. */ -}; -#endif - -#ifndef DIR_DEFINED -#define DIR_DEFINED -typedef struct DIR DIR; -typedef DIR *LPDIR; -struct DIR { - intptr_t d_handle; /* Value returned by "_findfirst". */ - DIRENT d_first; /* DIRENT constructed based on "_findfirst". */ - DIRENT d_next; /* DIRENT constructed based on "_findnext". */ -}; -#endif + zSql = sqlite3_mprintf("PRAGMA \"%w\".table_info=%Q;", + zSchema ? zSchema : "main", zName); + shell_check_oom(zSql); + sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + initText(&s); + if( zSchema ){ + cQuote = quoteChar(zSchema); + if( cQuote && sqlite3_stricmp(zSchema,"temp")==0 ) cQuote = 0; + appendText(&s, zSchema, cQuote); + appendText(&s, ".", 0); + } + cQuote = quoteChar(zName); + appendText(&s, zName, cQuote); + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + const char *zCol = (const char*)sqlite3_column_text(pStmt, 1); + nRow++; + appendText(&s, zDiv, 0); + zDiv = ","; + if( zCol==0 ) zCol = ""; + cQuote = quoteChar(zCol); + appendText(&s, zCol, cQuote); + } + appendText(&s, ")", 0); + sqlite3_finalize(pStmt); + if( nRow==0 ){ + freeText(&s); + s.z = 0; + } + return s.z; +} /* -** Provide a macro, for use by the implementation, to determine if a -** particular directory entry should be skipped over when searching for -** the next directory entry that should be returned by the readdir() or -** readdir_r() functions. +** SQL function: strtod(X) +** +** Use the C-library strtod() function to convert string X into a double. +** Used for comparing the accuracy of SQLite's internal text-to-float conversion +** routines against the C-library. */ - -#ifndef is_filtered -# define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM)) -#endif +static void shellStrtod( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + char *z = (char*)sqlite3_value_text(apVal[0]); + UNUSED_PARAMETER(nVal); + if( z==0 ) return; + sqlite3_result_double(pCtx, strtod(z,0)); +} /* -** Provide the function prototype for the POSIX compatible getenv() -** function. This function is not thread-safe. +** SQL function: dtostr(X) +** +** Use the C-library printf() function to convert real value X into a string. +** Used for comparing the accuracy of SQLite's internal float-to-text conversion +** routines against the C-library. */ +static void shellDtostr( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + double r = sqlite3_value_double(apVal[0]); + int n = nVal>=2 ? sqlite3_value_int(apVal[1]) : 26; + char z[400]; + if( n<1 ) n = 1; + if( n>350 ) n = 350; + sqlite3_snprintf(sizeof(z), z, "%#+.*e", n, r); + sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT); +} -extern const char *windirent_getenv(const char *name); /* -** Finally, we can provide the function prototypes for the opendir(), -** readdir(), readdir_r(), and closedir() POSIX functions. +** SQL function: shell_module_schema(X) +** +** Return a fake schema for the table-valued function or eponymous virtual +** table X. */ +static void shellModuleSchema( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + const char *zName; + char *zFake; + UNUSED_PARAMETER(nVal); + zName = (const char*)sqlite3_value_text(apVal[0]); + zFake = zName? shellFakeSchema(sqlite3_context_db_handle(pCtx), 0, zName) : 0; + if( zFake ){ + sqlite3_result_text(pCtx, sqlite3_mprintf("/* %s */", zFake), + -1, sqlite3_free); + free(zFake); + } +} -extern LPDIR opendir(const char *dirname); -extern LPDIRENT readdir(LPDIR dirp); -extern INT readdir_r(LPDIR dirp, LPDIRENT entry, LPDIRENT *result); -extern INT closedir(LPDIR dirp); - -#endif /* defined(WIN32) && defined(_MSC_VER) */ - -/************************* End test_windirent.h ********************/ -/************************* Begin test_windirent.c ******************/ /* -** 2015 November 30 +** SQL function: shell_add_schema(S,X) ** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: +** Add the schema name X to the CREATE statement in S and return the result. +** Examples: ** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. +** CREATE TABLE t1(x) -> CREATE TABLE xyz.t1(x); ** -************************************************************************* -** This file contains code to implement most of the opendir() family of -** POSIX functions on Win32 using the MSVCRT. -*/ - -#if defined(_WIN32) && defined(_MSC_VER) +** Also works on +** +** CREATE INDEX +** CREATE UNIQUE INDEX +** CREATE VIEW +** CREATE TRIGGER +** CREATE VIRTUAL TABLE +** +** This UDF is used by the .schema command to insert the schema name of +** attached databases into the middle of the sqlite_schema.sql field. +*/ +static void shellAddSchemaName( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + static const char *aPrefix[] = { + "TABLE", + "INDEX", + "UNIQUE INDEX", + "VIEW", + "TRIGGER", + "VIRTUAL TABLE" + }; + int i = 0; + const char *zIn = (const char*)sqlite3_value_text(apVal[0]); + const char *zSchema = (const char*)sqlite3_value_text(apVal[1]); + const char *zName = (const char*)sqlite3_value_text(apVal[2]); + sqlite3 *db = sqlite3_context_db_handle(pCtx); + UNUSED_PARAMETER(nVal); + if( zIn!=0 && cli_strncmp(zIn, "CREATE ", 7)==0 ){ + for(i=0; i +#include +#include +#include +#include +#include +#include + +/* +** We may need several defines that should have been in "sys/stat.h". +*/ + +#ifndef S_ISREG +#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +#endif + +#ifndef S_ISDIR +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif + +#ifndef S_ISLNK +#define S_ISLNK(mode) (0) +#endif + +/* +** We may need to provide the "mode_t" type. +*/ + +#ifndef MODE_T_DEFINED + #define MODE_T_DEFINED + typedef unsigned short mode_t; +#endif + +/* +** We may need to provide the "ino_t" type. +*/ + +#ifndef INO_T_DEFINED + #define INO_T_DEFINED + typedef unsigned short ino_t; +#endif + +/* +** We need to define "NAME_MAX" if it was not present in "limits.h". +*/ + +#ifndef NAME_MAX +# ifdef FILENAME_MAX +# define NAME_MAX (FILENAME_MAX) +# else +# define NAME_MAX (260) +# endif +#endif + +/* +** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T". +*/ + +#ifndef NULL_INTPTR_T +# define NULL_INTPTR_T ((intptr_t)(0)) +#endif + +#ifndef BAD_INTPTR_T +# define BAD_INTPTR_T ((intptr_t)(-1)) +#endif + +/* +** We need to provide the necessary structures and related types. +*/ + +#ifndef DIRENT_DEFINED +#define DIRENT_DEFINED +typedef struct DIRENT DIRENT; +typedef DIRENT *LPDIRENT; +struct DIRENT { + ino_t d_ino; /* Sequence number, do not use. */ + unsigned d_attributes; /* Win32 file attributes. */ + char d_name[NAME_MAX + 1]; /* Name within the directory. */ +}; +#endif + +#ifndef DIR_DEFINED +#define DIR_DEFINED +typedef struct DIR DIR; +typedef DIR *LPDIR; +struct DIR { + intptr_t d_handle; /* Value returned by "_findfirst". */ + DIRENT d_first; /* DIRENT constructed based on "_findfirst". */ + DIRENT d_next; /* DIRENT constructed based on "_findnext". */ +}; +#endif + +/* +** Provide a macro, for use by the implementation, to determine if a +** particular directory entry should be skipped over when searching for +** the next directory entry that should be returned by the readdir() or +** readdir_r() functions. +*/ + +#ifndef is_filtered +# define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM)) +#endif + +/* +** Provide the function prototype for the POSIX compatible getenv() +** function. This function is not thread-safe. +*/ + +extern const char *windirent_getenv(const char *name); + +/* +** Finally, we can provide the function prototypes for the opendir(), +** readdir(), readdir_r(), and closedir() POSIX functions. +*/ + +extern LPDIR opendir(const char *dirname); +extern LPDIRENT readdir(LPDIR dirp); +extern INT readdir_r(LPDIR dirp, LPDIRENT entry, LPDIRENT *result); +extern INT closedir(LPDIR dirp); + +#endif /* defined(WIN32) && defined(_MSC_VER) */ + +/************************* End test_windirent.h ********************/ +/************************* Begin test_windirent.c ******************/ +/* +** 2015 November 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code to implement most of the opendir() family of +** POSIX functions on Win32 using the MSVCRT. +*/ + +#if defined(_WIN32) && defined(_MSC_VER) /* #include "test_windirent.h" */ /* @@ -4918,16 +5731,20 @@ SQLITE_EXTENSION_INIT1 ** index is ix. The 0th member is given by smBase. The sequence members ** progress per ix increment by smStep. */ -static sqlite3_int64 genSeqMember(sqlite3_int64 smBase, - sqlite3_int64 smStep, - sqlite3_uint64 ix){ - if( ix>=(sqlite3_uint64)LLONG_MAX ){ +static sqlite3_int64 genSeqMember( + sqlite3_int64 smBase, + sqlite3_int64 smStep, + sqlite3_uint64 ix +){ + static const sqlite3_uint64 mxI64 = + ((sqlite3_uint64)0x7fffffff)<<32 | 0xffffffff; + if( ix>=mxI64 ){ /* Get ix into signed i64 range. */ - ix -= (sqlite3_uint64)LLONG_MAX; + ix -= mxI64; /* With 2's complement ALU, this next can be 1 step, but is split into * 2 for UBSAN's satisfaction (and hypothetical 1's complement ALUs.) */ - smBase += (LLONG_MAX/2) * smStep; - smBase += (LLONG_MAX - LLONG_MAX/2) * smStep; + smBase += (mxI64/2) * smStep; + smBase += (mxI64 - mxI64/2) * smStep; } /* Under UBSAN (or on 1's complement machines), must do this last term * in steps to avoid the dreaded (and harmless) signed multiply overlow. */ @@ -5187,13 +6004,13 @@ static int seriesEof(sqlite3_vtab_cursor *cur){ ** parameter. (idxStr is not used in this implementation.) idxNum ** is a bitmask showing which constraints are available: ** -** 1: start=VALUE -** 2: stop=VALUE -** 4: step=VALUE -** -** Also, if bit 8 is set, that means that the series should be output -** in descending order rather than in ascending order. If bit 16 is -** set, then output must appear in ascending order. +** 0x01: start=VALUE +** 0x02: stop=VALUE +** 0x04: step=VALUE +** 0x08: descending order +** 0x10: ascending order +** 0x20: LIMIT VALUE +** 0x40: OFFSET VALUE ** ** This routine should initialize the cursor and position it so that it ** is pointing at the first row, or pointing off the end of the table @@ -5207,26 +6024,44 @@ static int seriesFilter( series_cursor *pCur = (series_cursor *)pVtabCursor; int i = 0; (void)idxStrUnused; - if( idxNum & 1 ){ + if( idxNum & 0x01 ){ pCur->ss.iBase = sqlite3_value_int64(argv[i++]); }else{ pCur->ss.iBase = 0; } - if( idxNum & 2 ){ + if( idxNum & 0x02 ){ pCur->ss.iTerm = sqlite3_value_int64(argv[i++]); }else{ pCur->ss.iTerm = 0xffffffff; } - if( idxNum & 4 ){ + if( idxNum & 0x04 ){ pCur->ss.iStep = sqlite3_value_int64(argv[i++]); if( pCur->ss.iStep==0 ){ pCur->ss.iStep = 1; }else if( pCur->ss.iStep<0 ){ - if( (idxNum & 16)==0 ) idxNum |= 8; + if( (idxNum & 0x10)==0 ) idxNum |= 0x08; } }else{ pCur->ss.iStep = 1; } + if( idxNum & 0x20 ){ + sqlite3_int64 iLimit = sqlite3_value_int64(argv[i++]); + sqlite3_int64 iTerm; + if( idxNum & 0x40 ){ + sqlite3_int64 iOffset = sqlite3_value_int64(argv[i++]); + if( iOffset>0 ){ + pCur->ss.iBase += pCur->ss.iStep*iOffset; + } + } + if( iLimit>=0 ){ + iTerm = pCur->ss.iBase + (iLimit - 1)*pCur->ss.iStep; + if( pCur->ss.iStep<0 ){ + if( iTerm>pCur->ss.iTerm ) pCur->ss.iTerm = iTerm; + }else{ + if( iTermss.iTerm ) pCur->ss.iTerm = iTerm; + } + } + } for(i=0; iss.isReversing = pCur->ss.iStep > 0; }else{ pCur->ss.isReversing = pCur->ss.iStep < 0; @@ -5257,10 +6092,13 @@ static int seriesFilter( ** ** The query plan is represented by bits in idxNum: ** -** (1) start = $value -- constraint exists -** (2) stop = $value -- constraint exists -** (4) step = $value -- constraint exists -** (8) output in descending order +** 0x01 start = $value -- constraint exists +** 0x02 stop = $value -- constraint exists +** 0x04 step = $value -- constraint exists +** 0x08 output is in descending order +** 0x10 output is in ascending order +** 0x20 LIMIT $value -- constraint exists +** 0x40 OFFSET $value -- constraint exists */ static int seriesBestIndex( sqlite3_vtab *pVTab, @@ -5268,10 +6106,12 @@ static int seriesBestIndex( ){ int i, j; /* Loop over constraints */ int idxNum = 0; /* The query plan bitmask */ +#ifndef ZERO_ARGUMENT_GENERATE_SERIES int bStartSeen = 0; /* EQ constraint seen on the START column */ +#endif int unusableMask = 0; /* Mask of unusable constraints */ int nArg = 0; /* Number of arguments that seriesFilter() expects */ - int aIdx[3]; /* Constraints on start, stop, and step */ + int aIdx[5]; /* Constraints on start, stop, step, LIMIT, OFFSET */ const struct sqlite3_index_constraint *pConstraint; /* This implementation assumes that the start, stop, and step columns @@ -5279,28 +6119,54 @@ static int seriesBestIndex( assert( SERIES_COLUMN_STOP == SERIES_COLUMN_START+1 ); assert( SERIES_COLUMN_STEP == SERIES_COLUMN_START+2 ); - aIdx[0] = aIdx[1] = aIdx[2] = -1; + aIdx[0] = aIdx[1] = aIdx[2] = aIdx[3] = aIdx[4] = -1; pConstraint = pIdxInfo->aConstraint; for(i=0; inConstraint; i++, pConstraint++){ int iCol; /* 0 for start, 1 for stop, 2 for step */ int iMask; /* bitmask for those column */ + int op = pConstraint->op; + if( op>=SQLITE_INDEX_CONSTRAINT_LIMIT + && op<=SQLITE_INDEX_CONSTRAINT_OFFSET + ){ + if( pConstraint->usable==0 ){ + /* do nothing */ + }else if( op==SQLITE_INDEX_CONSTRAINT_LIMIT ){ + aIdx[3] = i; + idxNum |= 0x20; + }else{ + assert( op==SQLITE_INDEX_CONSTRAINT_OFFSET ); + aIdx[4] = i; + idxNum |= 0x40; + } + continue; + } if( pConstraint->iColumniColumn - SERIES_COLUMN_START; assert( iCol>=0 && iCol<=2 ); iMask = 1 << iCol; - if( iCol==0 ) bStartSeen = 1; +#ifndef ZERO_ARGUMENT_GENERATE_SERIES + if( iCol==0 && op==SQLITE_INDEX_CONSTRAINT_EQ ){ + bStartSeen = 1; + } +#endif if( pConstraint->usable==0 ){ unusableMask |= iMask; continue; - }else if( pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + }else if( op==SQLITE_INDEX_CONSTRAINT_EQ ){ idxNum |= iMask; aIdx[iCol] = i; } } - for(i=0; i<3; i++){ + if( aIdx[3]==0 ){ + /* Ignore OFFSET if LIMIT is omitted */ + idxNum &= ~0x60; + aIdx[4] = 0; + } + for(i=0; i<5; i++){ if( (j = aIdx[i])>=0 ){ pIdxInfo->aConstraintUsage[j].argvIndex = ++nArg; - pIdxInfo->aConstraintUsage[j].omit = !SQLITE_SERIES_CONSTRAINT_VERIFY; + pIdxInfo->aConstraintUsage[j].omit = + !SQLITE_SERIES_CONSTRAINT_VERIFY || i>=3; } } /* The current generate_column() implementation requires at least one @@ -5321,19 +6187,22 @@ static int seriesBestIndex( ** this plan is unusable */ return SQLITE_CONSTRAINT; } - if( (idxNum & 3)==3 ){ + if( (idxNum & 0x03)==0x03 ){ /* Both start= and stop= boundaries are available. This is the ** the preferred case */ pIdxInfo->estimatedCost = (double)(2 - ((idxNum&4)!=0)); pIdxInfo->estimatedRows = 1000; if( pIdxInfo->nOrderBy>=1 && pIdxInfo->aOrderBy[0].iColumn==0 ){ if( pIdxInfo->aOrderBy[0].desc ){ - idxNum |= 8; + idxNum |= 0x08; }else{ - idxNum |= 16; + idxNum |= 0x10; } pIdxInfo->orderByConsumed = 1; } + }else if( (idxNum & 0x21)==0x21 ){ + /* We have start= and LIMIT */ + pIdxInfo->estimatedRows = 2500; }else{ /* If either boundary is missing, we have to generate a huge span ** of numbers. Make this case very expensive so that the query @@ -5372,7 +6241,8 @@ static sqlite3_module seriesModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ @@ -6659,7 +7529,9 @@ static int writeFile( #if !defined(_WIN32) && !defined(WIN32) if( S_ISLNK(mode) ){ const char *zTo = (const char*)sqlite3_value_text(pData); - if( zTo==0 || symlink(zTo, zFile)<0 ) return 1; + if( zTo==0 ) return 1; + unlink(zFile); + if( symlink(zTo, zFile)<0 ) return 1; }else #endif { @@ -6745,13 +7617,19 @@ static int writeFile( return 1; } #else - /* Legacy unix */ - struct timeval times[2]; - times[0].tv_usec = times[1].tv_usec = 0; - times[0].tv_sec = time(0); - times[1].tv_sec = mtime; - if( utimes(zFile, times) ){ - return 1; + /* Legacy unix. + ** + ** Do not use utimes() on a symbolic link - it sees through the link and + ** modifies the timestamps on the target. Or fails if the target does + ** not exist. */ + if( 0==S_ISLNK(mode) ){ + struct timeval times[2]; + times[0].tv_usec = times[1].tv_usec = 0; + times[0].tv_sec = time(0); + times[1].tv_sec = mtime; + if( utimes(zFile, times) ){ + return 1; + } } #endif } @@ -7270,6 +8148,7 @@ static int fsdirRegister(sqlite3 *db){ 0, /* xRelease */ 0, /* xRollbackTo */ 0, /* xShadowName */ + 0 /* xIntegrity */ }; int rc = sqlite3_create_module(db, "fsdir", &fsdirModule, 0); @@ -7790,7 +8669,8 @@ static sqlite3_module completionModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ @@ -8530,6 +9410,7 @@ SQLITE_EXTENSION_INIT1 #include #include #include +#include #include @@ -10701,7 +11582,8 @@ static int zipfileRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollback */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; int rc = sqlite3_create_module(db, "zipfile" , &zipfileModule, 0); @@ -10819,7 +11701,7 @@ static void sqlarUncompressFunc( sqlite3_value **argv ){ uLong nData; - uLongf sz; + sqlite3_int64 sz; assert( argc==2 ); sz = sqlite3_value_int(argv[1]); @@ -10827,14 +11709,15 @@ static void sqlarUncompressFunc( if( sz<=0 || sz==(nData = sqlite3_value_bytes(argv[0])) ){ sqlite3_result_value(context, argv[0]); }else{ + uLongf szf = sz; const Bytef *pData= sqlite3_value_blob(argv[0]); Bytef *pOut = sqlite3_malloc(sz); if( pOut==0 ){ sqlite3_result_error_nomem(context); - }else if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){ + }else if( Z_OK!=uncompress(pOut, &szf, pData, nData) ){ sqlite3_result_error(context, "error in uncompress()", -1); }else{ - sqlite3_result_blob(context, pOut, sz, SQLITE_TRANSIENT); + sqlite3_result_blob(context, pOut, szf, SQLITE_TRANSIENT); } sqlite3_free(pOut); } @@ -11070,7 +11953,7 @@ void sqlite3_expert_destroy(sqlite3expert*); #endif /* !defined(SQLITE_AMALGAMATION) */ -#ifndef SQLITE_OMIT_VIRTUALTABLE +#ifndef SQLITE_OMIT_VIRTUALTABLE /* typedef sqlite3_int64 i64; */ /* typedef sqlite3_uint64 u64; */ @@ -11224,1868 +12107,3087 @@ static void *idxMalloc(int *pRc, int nByte){ } /* -** Initialize an IdxHash hash table. +** Initialize an IdxHash hash table. +*/ +static void idxHashInit(IdxHash *pHash){ + memset(pHash, 0, sizeof(IdxHash)); +} + +/* +** Reset an IdxHash hash table. +*/ +static void idxHashClear(IdxHash *pHash){ + int i; + for(i=0; iaHash[i]; pEntry; pEntry=pNext){ + pNext = pEntry->pHashNext; + sqlite3_free(pEntry->zVal2); + sqlite3_free(pEntry); + } + } + memset(pHash, 0, sizeof(IdxHash)); +} + +/* +** Return the index of the hash bucket that the string specified by the +** arguments to this function belongs. +*/ +static int idxHashString(const char *z, int n){ + unsigned int ret = 0; + int i; + for(i=0; i=0 ); + for(pEntry=pHash->aHash[iHash]; pEntry; pEntry=pEntry->pHashNext){ + if( STRLEN(pEntry->zKey)==nKey && 0==memcmp(pEntry->zKey, zKey, nKey) ){ + return 1; + } + } + pEntry = idxMalloc(pRc, sizeof(IdxHashEntry) + nKey+1 + nVal+1); + if( pEntry ){ + pEntry->zKey = (char*)&pEntry[1]; + memcpy(pEntry->zKey, zKey, nKey); + if( zVal ){ + pEntry->zVal = &pEntry->zKey[nKey+1]; + memcpy(pEntry->zVal, zVal, nVal); + } + pEntry->pHashNext = pHash->aHash[iHash]; + pHash->aHash[iHash] = pEntry; + + pEntry->pNext = pHash->pFirst; + pHash->pFirst = pEntry; + } + return 0; +} + +/* +** If zKey/nKey is present in the hash table, return a pointer to the +** hash-entry object. +*/ +static IdxHashEntry *idxHashFind(IdxHash *pHash, const char *zKey, int nKey){ + int iHash; + IdxHashEntry *pEntry; + if( nKey<0 ) nKey = STRLEN(zKey); + iHash = idxHashString(zKey, nKey); + assert( iHash>=0 ); + for(pEntry=pHash->aHash[iHash]; pEntry; pEntry=pEntry->pHashNext){ + if( STRLEN(pEntry->zKey)==nKey && 0==memcmp(pEntry->zKey, zKey, nKey) ){ + return pEntry; + } + } + return 0; +} + +/* +** If the hash table contains an entry with a key equal to the string +** passed as the final two arguments to this function, return a pointer +** to the payload string. Otherwise, if zKey/nKey is not present in the +** hash table, return NULL. +*/ +static const char *idxHashSearch(IdxHash *pHash, const char *zKey, int nKey){ + IdxHashEntry *pEntry = idxHashFind(pHash, zKey, nKey); + if( pEntry ) return pEntry->zVal; + return 0; +} + +/* +** Allocate and return a new IdxConstraint object. Set the IdxConstraint.zColl +** variable to point to a copy of nul-terminated string zColl. +*/ +static IdxConstraint *idxNewConstraint(int *pRc, const char *zColl){ + IdxConstraint *pNew; + int nColl = STRLEN(zColl); + + assert( *pRc==SQLITE_OK ); + pNew = (IdxConstraint*)idxMalloc(pRc, sizeof(IdxConstraint) * nColl + 1); + if( pNew ){ + pNew->zColl = (char*)&pNew[1]; + memcpy(pNew->zColl, zColl, nColl+1); + } + return pNew; +} + +/* +** An error associated with database handle db has just occurred. Pass +** the error message to callback function xOut. +*/ +static void idxDatabaseError( + sqlite3 *db, /* Database handle */ + char **pzErrmsg /* Write error here */ +){ + *pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); +} + +/* +** Prepare an SQL statement. +*/ +static int idxPrepareStmt( + sqlite3 *db, /* Database handle to compile against */ + sqlite3_stmt **ppStmt, /* OUT: Compiled SQL statement */ + char **pzErrmsg, /* OUT: sqlite3_malloc()ed error message */ + const char *zSql /* SQL statement to compile */ +){ + int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); + if( rc!=SQLITE_OK ){ + *ppStmt = 0; + idxDatabaseError(db, pzErrmsg); + } + return rc; +} + +/* +** Prepare an SQL statement using the results of a printf() formatting. +*/ +static int idxPrintfPrepareStmt( + sqlite3 *db, /* Database handle to compile against */ + sqlite3_stmt **ppStmt, /* OUT: Compiled SQL statement */ + char **pzErrmsg, /* OUT: sqlite3_malloc()ed error message */ + const char *zFmt, /* printf() format of SQL statement */ + ... /* Trailing printf() arguments */ +){ + va_list ap; + int rc; + char *zSql; + va_start(ap, zFmt); + zSql = sqlite3_vmprintf(zFmt, ap); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = idxPrepareStmt(db, ppStmt, pzErrmsg, zSql); + sqlite3_free(zSql); + } + va_end(ap); + return rc; +} + + +/************************************************************************* +** Beginning of virtual table implementation. +*/ +typedef struct ExpertVtab ExpertVtab; +struct ExpertVtab { + sqlite3_vtab base; + IdxTable *pTab; + sqlite3expert *pExpert; +}; + +typedef struct ExpertCsr ExpertCsr; +struct ExpertCsr { + sqlite3_vtab_cursor base; + sqlite3_stmt *pData; +}; + +static char *expertDequote(const char *zIn){ + int n = STRLEN(zIn); + char *zRet = sqlite3_malloc(n); + + assert( zIn[0]=='\'' ); + assert( zIn[n-1]=='\'' ); + + if( zRet ){ + int iOut = 0; + int iIn = 0; + for(iIn=1; iIn<(n-1); iIn++){ + if( zIn[iIn]=='\'' ){ + assert( zIn[iIn+1]=='\'' ); + iIn++; + } + zRet[iOut++] = zIn[iIn]; + } + zRet[iOut] = '\0'; + } + + return zRet; +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the r-tree virtual table. +** +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... +*/ +static int expertConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + sqlite3expert *pExpert = (sqlite3expert*)pAux; + ExpertVtab *p = 0; + int rc; + + if( argc!=4 ){ + *pzErr = sqlite3_mprintf("internal error!"); + rc = SQLITE_ERROR; + }else{ + char *zCreateTable = expertDequote(argv[3]); + if( zCreateTable ){ + rc = sqlite3_declare_vtab(db, zCreateTable); + if( rc==SQLITE_OK ){ + p = idxMalloc(&rc, sizeof(ExpertVtab)); + } + if( rc==SQLITE_OK ){ + p->pExpert = pExpert; + p->pTab = pExpert->pTable; + assert( sqlite3_stricmp(p->pTab->zName, argv[2])==0 ); + } + sqlite3_free(zCreateTable); + }else{ + rc = SQLITE_NOMEM; + } + } + + *ppVtab = (sqlite3_vtab*)p; + return rc; +} + +static int expertDisconnect(sqlite3_vtab *pVtab){ + ExpertVtab *p = (ExpertVtab*)pVtab; + sqlite3_free(p); + return SQLITE_OK; +} + +static int expertBestIndex(sqlite3_vtab *pVtab, sqlite3_index_info *pIdxInfo){ + ExpertVtab *p = (ExpertVtab*)pVtab; + int rc = SQLITE_OK; + int n = 0; + IdxScan *pScan; + const int opmask = + SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | + SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | + SQLITE_INDEX_CONSTRAINT_LE; + + pScan = idxMalloc(&rc, sizeof(IdxScan)); + if( pScan ){ + int i; + + /* Link the new scan object into the list */ + pScan->pTab = p->pTab; + pScan->pNextScan = p->pExpert->pScan; + p->pExpert->pScan = pScan; + + /* Add the constraints to the IdxScan object */ + for(i=0; inConstraint; i++){ + struct sqlite3_index_constraint *pCons = &pIdxInfo->aConstraint[i]; + if( pCons->usable + && pCons->iColumn>=0 + && p->pTab->aCol[pCons->iColumn].iPk==0 + && (pCons->op & opmask) + ){ + IdxConstraint *pNew; + const char *zColl = sqlite3_vtab_collation(pIdxInfo, i); + pNew = idxNewConstraint(&rc, zColl); + if( pNew ){ + pNew->iCol = pCons->iColumn; + if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + pNew->pNext = pScan->pEq; + pScan->pEq = pNew; + }else{ + pNew->bRange = 1; + pNew->pNext = pScan->pRange; + pScan->pRange = pNew; + } + } + n++; + pIdxInfo->aConstraintUsage[i].argvIndex = n; + } + } + + /* Add the ORDER BY to the IdxScan object */ + for(i=pIdxInfo->nOrderBy-1; i>=0; i--){ + int iCol = pIdxInfo->aOrderBy[i].iColumn; + if( iCol>=0 ){ + IdxConstraint *pNew = idxNewConstraint(&rc, p->pTab->aCol[iCol].zColl); + if( pNew ){ + pNew->iCol = iCol; + pNew->bDesc = pIdxInfo->aOrderBy[i].desc; + pNew->pNext = pScan->pOrder; + pNew->pLink = pScan->pOrder; + pScan->pOrder = pNew; + n++; + } + } + } + } + + pIdxInfo->estimatedCost = 1000000.0 / (n+1); + return rc; +} + +static int expertUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **azData, + sqlite_int64 *pRowid +){ + (void)pVtab; + (void)nData; + (void)azData; + (void)pRowid; + return SQLITE_OK; +} + +/* +** Virtual table module xOpen method. +*/ +static int expertOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ + int rc = SQLITE_OK; + ExpertCsr *pCsr; + (void)pVTab; + pCsr = idxMalloc(&rc, sizeof(ExpertCsr)); + *ppCursor = (sqlite3_vtab_cursor*)pCsr; + return rc; +} + +/* +** Virtual table module xClose method. +*/ +static int expertClose(sqlite3_vtab_cursor *cur){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + sqlite3_finalize(pCsr->pData); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** Virtual table module xEof method. +** +** Return non-zero if the cursor does not currently point to a valid +** record (i.e if the scan has finished), or zero otherwise. */ -static void idxHashInit(IdxHash *pHash){ - memset(pHash, 0, sizeof(IdxHash)); +static int expertEof(sqlite3_vtab_cursor *cur){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + return pCsr->pData==0; } -/* -** Reset an IdxHash hash table. +/* +** Virtual table module xNext method. */ -static void idxHashClear(IdxHash *pHash){ - int i; - for(i=0; iaHash[i]; pEntry; pEntry=pNext){ - pNext = pEntry->pHashNext; - sqlite3_free(pEntry->zVal2); - sqlite3_free(pEntry); - } +static int expertNext(sqlite3_vtab_cursor *cur){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + int rc = SQLITE_OK; + + assert( pCsr->pData ); + rc = sqlite3_step(pCsr->pData); + if( rc!=SQLITE_ROW ){ + rc = sqlite3_finalize(pCsr->pData); + pCsr->pData = 0; + }else{ + rc = SQLITE_OK; } - memset(pHash, 0, sizeof(IdxHash)); + + return rc; } -/* -** Return the index of the hash bucket that the string specified by the -** arguments to this function belongs. +/* +** Virtual table module xRowid method. */ -static int idxHashString(const char *z, int n){ - unsigned int ret = 0; - int i; - for(i=0; ipData, i); + if( pVal ){ + sqlite3_result_value(ctx, pVal); } - return (int)(ret % IDX_HASH_SIZE); + return SQLITE_OK; } -/* -** If zKey is already present in the hash table, return non-zero and do -** nothing. Otherwise, add an entry with key zKey and payload string zVal to -** the hash table passed as the second argument. +/* +** Virtual table module xFilter method. */ -static int idxHashAdd( - int *pRc, - IdxHash *pHash, - const char *zKey, - const char *zVal +static int expertFilter( + sqlite3_vtab_cursor *cur, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv ){ - int nKey = STRLEN(zKey); - int iHash = idxHashString(zKey, nKey); - int nVal = (zVal ? STRLEN(zVal) : 0); - IdxHashEntry *pEntry; - assert( iHash>=0 ); - for(pEntry=pHash->aHash[iHash]; pEntry; pEntry=pEntry->pHashNext){ - if( STRLEN(pEntry->zKey)==nKey && 0==memcmp(pEntry->zKey, zKey, nKey) ){ - return 1; - } - } - pEntry = idxMalloc(pRc, sizeof(IdxHashEntry) + nKey+1 + nVal+1); - if( pEntry ){ - pEntry->zKey = (char*)&pEntry[1]; - memcpy(pEntry->zKey, zKey, nKey); - if( zVal ){ - pEntry->zVal = &pEntry->zKey[nKey+1]; - memcpy(pEntry->zVal, zVal, nVal); - } - pEntry->pHashNext = pHash->aHash[iHash]; - pHash->aHash[iHash] = pEntry; + ExpertCsr *pCsr = (ExpertCsr*)cur; + ExpertVtab *pVtab = (ExpertVtab*)(cur->pVtab); + sqlite3expert *pExpert = pVtab->pExpert; + int rc; - pEntry->pNext = pHash->pFirst; - pHash->pFirst = pEntry; + (void)idxNum; + (void)idxStr; + (void)argc; + (void)argv; + rc = sqlite3_finalize(pCsr->pData); + pCsr->pData = 0; + if( rc==SQLITE_OK ){ + rc = idxPrintfPrepareStmt(pExpert->db, &pCsr->pData, &pVtab->base.zErrMsg, + "SELECT * FROM main.%Q WHERE sample()", pVtab->pTab->zName + ); } - return 0; -} -/* -** If zKey/nKey is present in the hash table, return a pointer to the -** hash-entry object. -*/ -static IdxHashEntry *idxHashFind(IdxHash *pHash, const char *zKey, int nKey){ - int iHash; - IdxHashEntry *pEntry; - if( nKey<0 ) nKey = STRLEN(zKey); - iHash = idxHashString(zKey, nKey); - assert( iHash>=0 ); - for(pEntry=pHash->aHash[iHash]; pEntry; pEntry=pEntry->pHashNext){ - if( STRLEN(pEntry->zKey)==nKey && 0==memcmp(pEntry->zKey, zKey, nKey) ){ - return pEntry; - } + if( rc==SQLITE_OK ){ + rc = expertNext(cur); } - return 0; + return rc; } +static int idxRegisterVtab(sqlite3expert *p){ + static sqlite3_module expertModule = { + 2, /* iVersion */ + expertConnect, /* xCreate - create a table */ + expertConnect, /* xConnect - connect to an existing table */ + expertBestIndex, /* xBestIndex - Determine search strategy */ + expertDisconnect, /* xDisconnect - Disconnect from a table */ + expertDisconnect, /* xDestroy - Drop a table */ + expertOpen, /* xOpen - open a cursor */ + expertClose, /* xClose - close a cursor */ + expertFilter, /* xFilter - configure scan constraints */ + expertNext, /* xNext - advance a cursor */ + expertEof, /* xEof */ + expertColumn, /* xColumn - read data */ + expertRowid, /* xRowid - read data */ + expertUpdate, /* xUpdate - write data */ + 0, /* xBegin - begin transaction */ + 0, /* xSync - sync transaction */ + 0, /* xCommit - commit transaction */ + 0, /* xRollback - rollback transaction */ + 0, /* xFindFunction - function overloading */ + 0, /* xRename - rename the table */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0, /* xShadowName */ + 0, /* xIntegrity */ + }; + + return sqlite3_create_module(p->dbv, "expert", &expertModule, (void*)p); +} /* -** If the hash table contains an entry with a key equal to the string -** passed as the final two arguments to this function, return a pointer -** to the payload string. Otherwise, if zKey/nKey is not present in the -** hash table, return NULL. +** End of virtual table implementation. +*************************************************************************/ +/* +** Finalize SQL statement pStmt. If (*pRc) is SQLITE_OK when this function +** is called, set it to the return value of sqlite3_finalize() before +** returning. Otherwise, discard the sqlite3_finalize() return value. */ -static const char *idxHashSearch(IdxHash *pHash, const char *zKey, int nKey){ - IdxHashEntry *pEntry = idxHashFind(pHash, zKey, nKey); - if( pEntry ) return pEntry->zVal; - return 0; +static void idxFinalize(int *pRc, sqlite3_stmt *pStmt){ + int rc = sqlite3_finalize(pStmt); + if( *pRc==SQLITE_OK ) *pRc = rc; } /* -** Allocate and return a new IdxConstraint object. Set the IdxConstraint.zColl -** variable to point to a copy of nul-terminated string zColl. +** Attempt to allocate an IdxTable structure corresponding to table zTab +** in the main database of connection db. If successful, set (*ppOut) to +** point to the new object and return SQLITE_OK. Otherwise, return an +** SQLite error code and set (*ppOut) to NULL. In this case *pzErrmsg may be +** set to point to an error string. +** +** It is the responsibility of the caller to eventually free either the +** IdxTable object or error message using sqlite3_free(). */ -static IdxConstraint *idxNewConstraint(int *pRc, const char *zColl){ - IdxConstraint *pNew; - int nColl = STRLEN(zColl); +static int idxGetTableInfo( + sqlite3 *db, /* Database connection to read details from */ + const char *zTab, /* Table name */ + IdxTable **ppOut, /* OUT: New object (if successful) */ + char **pzErrmsg /* OUT: Error message (if not) */ +){ + sqlite3_stmt *p1 = 0; + int nCol = 0; + int nTab; + int nByte; + IdxTable *pNew = 0; + int rc, rc2; + char *pCsr = 0; + int nPk = 0; + + *ppOut = 0; + if( zTab==0 ) return SQLITE_ERROR; + nTab = STRLEN(zTab); + nByte = sizeof(IdxTable) + nTab + 1; + rc = idxPrintfPrepareStmt(db, &p1, pzErrmsg, "PRAGMA table_xinfo=%Q", zTab); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){ + const char *zCol = (const char*)sqlite3_column_text(p1, 1); + const char *zColSeq = 0; + if( zCol==0 ){ + rc = SQLITE_ERROR; + break; + } + nByte += 1 + STRLEN(zCol); + rc = sqlite3_table_column_metadata( + db, "main", zTab, zCol, 0, &zColSeq, 0, 0, 0 + ); + if( zColSeq==0 ) zColSeq = "binary"; + nByte += 1 + STRLEN(zColSeq); + nCol++; + nPk += (sqlite3_column_int(p1, 5)>0); + } + rc2 = sqlite3_reset(p1); + if( rc==SQLITE_OK ) rc = rc2; + + nByte += sizeof(IdxColumn) * nCol; + if( rc==SQLITE_OK ){ + pNew = idxMalloc(&rc, nByte); + } + if( rc==SQLITE_OK ){ + pNew->aCol = (IdxColumn*)&pNew[1]; + pNew->nCol = nCol; + pCsr = (char*)&pNew->aCol[nCol]; + } + + nCol = 0; + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){ + const char *zCol = (const char*)sqlite3_column_text(p1, 1); + const char *zColSeq = 0; + int nCopy; + if( zCol==0 ) continue; + nCopy = STRLEN(zCol) + 1; + pNew->aCol[nCol].zName = pCsr; + pNew->aCol[nCol].iPk = (sqlite3_column_int(p1, 5)==1 && nPk==1); + memcpy(pCsr, zCol, nCopy); + pCsr += nCopy; - assert( *pRc==SQLITE_OK ); - pNew = (IdxConstraint*)idxMalloc(pRc, sizeof(IdxConstraint) * nColl + 1); - if( pNew ){ - pNew->zColl = (char*)&pNew[1]; - memcpy(pNew->zColl, zColl, nColl+1); - } - return pNew; -} + rc = sqlite3_table_column_metadata( + db, "main", zTab, zCol, 0, &zColSeq, 0, 0, 0 + ); + if( rc==SQLITE_OK ){ + if( zColSeq==0 ) zColSeq = "binary"; + nCopy = STRLEN(zColSeq) + 1; + pNew->aCol[nCol].zColl = pCsr; + memcpy(pCsr, zColSeq, nCopy); + pCsr += nCopy; + } -/* -** An error associated with database handle db has just occurred. Pass -** the error message to callback function xOut. -*/ -static void idxDatabaseError( - sqlite3 *db, /* Database handle */ - char **pzErrmsg /* Write error here */ -){ - *pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); -} + nCol++; + } + idxFinalize(&rc, p1); -/* -** Prepare an SQL statement. -*/ -static int idxPrepareStmt( - sqlite3 *db, /* Database handle to compile against */ - sqlite3_stmt **ppStmt, /* OUT: Compiled SQL statement */ - char **pzErrmsg, /* OUT: sqlite3_malloc()ed error message */ - const char *zSql /* SQL statement to compile */ -){ - int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); if( rc!=SQLITE_OK ){ - *ppStmt = 0; - idxDatabaseError(db, pzErrmsg); + sqlite3_free(pNew); + pNew = 0; + }else if( ALWAYS(pNew!=0) ){ + pNew->zName = pCsr; + if( ALWAYS(pNew->zName!=0) ) memcpy(pNew->zName, zTab, nTab+1); } + + *ppOut = pNew; return rc; } /* -** Prepare an SQL statement using the results of a printf() formatting. +** This function is a no-op if *pRc is set to anything other than +** SQLITE_OK when it is called. +** +** If *pRc is initially set to SQLITE_OK, then the text specified by +** the printf() style arguments is appended to zIn and the result returned +** in a buffer allocated by sqlite3_malloc(). sqlite3_free() is called on +** zIn before returning. */ -static int idxPrintfPrepareStmt( - sqlite3 *db, /* Database handle to compile against */ - sqlite3_stmt **ppStmt, /* OUT: Compiled SQL statement */ - char **pzErrmsg, /* OUT: sqlite3_malloc()ed error message */ - const char *zFmt, /* printf() format of SQL statement */ - ... /* Trailing printf() arguments */ -){ +static char *idxAppendText(int *pRc, char *zIn, const char *zFmt, ...){ va_list ap; - int rc; - char *zSql; + char *zAppend = 0; + char *zRet = 0; + int nIn = zIn ? STRLEN(zIn) : 0; + int nAppend = 0; va_start(ap, zFmt); - zSql = sqlite3_vmprintf(zFmt, ap); - if( zSql==0 ){ - rc = SQLITE_NOMEM; - }else{ - rc = idxPrepareStmt(db, ppStmt, pzErrmsg, zSql); - sqlite3_free(zSql); + if( *pRc==SQLITE_OK ){ + zAppend = sqlite3_vmprintf(zFmt, ap); + if( zAppend ){ + nAppend = STRLEN(zAppend); + zRet = (char*)sqlite3_malloc(nIn + nAppend + 1); + } + if( zAppend && zRet ){ + if( nIn ) memcpy(zRet, zIn, nIn); + memcpy(&zRet[nIn], zAppend, nAppend+1); + }else{ + sqlite3_free(zRet); + zRet = 0; + *pRc = SQLITE_NOMEM; + } + sqlite3_free(zAppend); + sqlite3_free(zIn); } va_end(ap); - return rc; + return zRet; } - -/************************************************************************* -** Beginning of virtual table implementation. +/* +** Return true if zId must be quoted in order to use it as an SQL +** identifier, or false otherwise. */ -typedef struct ExpertVtab ExpertVtab; -struct ExpertVtab { - sqlite3_vtab base; - IdxTable *pTab; - sqlite3expert *pExpert; -}; +static int idxIdentifierRequiresQuotes(const char *zId){ + int i; + int nId = STRLEN(zId); + + if( sqlite3_keyword_check(zId, nId) ) return 1; -typedef struct ExpertCsr ExpertCsr; -struct ExpertCsr { - sqlite3_vtab_cursor base; - sqlite3_stmt *pData; -}; + for(i=0; zId[i]; i++){ + if( !(zId[i]=='_') + && !(zId[i]>='0' && zId[i]<='9') + && !(zId[i]>='a' && zId[i]<='z') + && !(zId[i]>='A' && zId[i]<='Z') + ){ + return 1; + } + } + return 0; +} -static char *expertDequote(const char *zIn){ - int n = STRLEN(zIn); - char *zRet = sqlite3_malloc(n); +/* +** This function appends an index column definition suitable for constraint +** pCons to the string passed as zIn and returns the result. +*/ +static char *idxAppendColDefn( + int *pRc, /* IN/OUT: Error code */ + char *zIn, /* Column defn accumulated so far */ + IdxTable *pTab, /* Table index will be created on */ + IdxConstraint *pCons +){ + char *zRet = zIn; + IdxColumn *p = &pTab->aCol[pCons->iCol]; + if( zRet ) zRet = idxAppendText(pRc, zRet, ", "); - assert( zIn[0]=='\'' ); - assert( zIn[n-1]=='\'' ); + if( idxIdentifierRequiresQuotes(p->zName) ){ + zRet = idxAppendText(pRc, zRet, "%Q", p->zName); + }else{ + zRet = idxAppendText(pRc, zRet, "%s", p->zName); + } - if( zRet ){ - int iOut = 0; - int iIn = 0; - for(iIn=1; iIn<(n-1); iIn++){ - if( zIn[iIn]=='\'' ){ - assert( zIn[iIn+1]=='\'' ); - iIn++; - } - zRet[iOut++] = zIn[iIn]; + if( sqlite3_stricmp(p->zColl, pCons->zColl) ){ + if( idxIdentifierRequiresQuotes(pCons->zColl) ){ + zRet = idxAppendText(pRc, zRet, " COLLATE %Q", pCons->zColl); + }else{ + zRet = idxAppendText(pRc, zRet, " COLLATE %s", pCons->zColl); } - zRet[iOut] = '\0'; } + if( pCons->bDesc ){ + zRet = idxAppendText(pRc, zRet, " DESC"); + } return zRet; } -/* -** This function is the implementation of both the xConnect and xCreate -** methods of the r-tree virtual table. +/* +** Search database dbm for an index compatible with the one idxCreateFromCons() +** would create from arguments pScan, pEq and pTail. If no error occurs and +** such an index is found, return non-zero. Or, if no such index is found, +** return zero. ** -** argv[0] -> module name -** argv[1] -> database name -** argv[2] -> table name -** argv[...] -> column names... +** If an error occurs, set *pRc to an SQLite error code and return zero. */ -static int expertConnect( - sqlite3 *db, - void *pAux, - int argc, const char *const*argv, - sqlite3_vtab **ppVtab, - char **pzErr +static int idxFindCompatible( + int *pRc, /* OUT: Error code */ + sqlite3* dbm, /* Database to search */ + IdxScan *pScan, /* Scan for table to search for index on */ + IdxConstraint *pEq, /* List of == constraints */ + IdxConstraint *pTail /* List of range constraints */ ){ - sqlite3expert *pExpert = (sqlite3expert*)pAux; - ExpertVtab *p = 0; + const char *zTbl = pScan->pTab->zName; + sqlite3_stmt *pIdxList = 0; + IdxConstraint *pIter; + int nEq = 0; /* Number of elements in pEq */ int rc; - if( argc!=4 ){ - *pzErr = sqlite3_mprintf("internal error!"); - rc = SQLITE_ERROR; - }else{ - char *zCreateTable = expertDequote(argv[3]); - if( zCreateTable ){ - rc = sqlite3_declare_vtab(db, zCreateTable); - if( rc==SQLITE_OK ){ - p = idxMalloc(&rc, sizeof(ExpertVtab)); - } - if( rc==SQLITE_OK ){ - p->pExpert = pExpert; - p->pTab = pExpert->pTable; - assert( sqlite3_stricmp(p->pTab->zName, argv[2])==0 ); + /* Count the elements in list pEq */ + for(pIter=pEq; pIter; pIter=pIter->pLink) nEq++; + + rc = idxPrintfPrepareStmt(dbm, &pIdxList, 0, "PRAGMA index_list=%Q", zTbl); + while( rc==SQLITE_OK && sqlite3_step(pIdxList)==SQLITE_ROW ){ + int bMatch = 1; + IdxConstraint *pT = pTail; + sqlite3_stmt *pInfo = 0; + const char *zIdx = (const char*)sqlite3_column_text(pIdxList, 1); + if( zIdx==0 ) continue; + + /* Zero the IdxConstraint.bFlag values in the pEq list */ + for(pIter=pEq; pIter; pIter=pIter->pLink) pIter->bFlag = 0; + + rc = idxPrintfPrepareStmt(dbm, &pInfo, 0, "PRAGMA index_xInfo=%Q", zIdx); + while( rc==SQLITE_OK && sqlite3_step(pInfo)==SQLITE_ROW ){ + int iIdx = sqlite3_column_int(pInfo, 0); + int iCol = sqlite3_column_int(pInfo, 1); + const char *zColl = (const char*)sqlite3_column_text(pInfo, 4); + + if( iIdxpLink){ + if( pIter->bFlag ) continue; + if( pIter->iCol!=iCol ) continue; + if( sqlite3_stricmp(pIter->zColl, zColl) ) continue; + pIter->bFlag = 1; + break; + } + if( pIter==0 ){ + bMatch = 0; + break; + } + }else{ + if( pT ){ + if( pT->iCol!=iCol || sqlite3_stricmp(pT->zColl, zColl) ){ + bMatch = 0; + break; + } + pT = pT->pLink; + } } - sqlite3_free(zCreateTable); - }else{ - rc = SQLITE_NOMEM; + } + idxFinalize(&rc, pInfo); + + if( rc==SQLITE_OK && bMatch ){ + sqlite3_finalize(pIdxList); + return 1; } } + idxFinalize(&rc, pIdxList); - *ppVtab = (sqlite3_vtab*)p; - return rc; + *pRc = rc; + return 0; } -static int expertDisconnect(sqlite3_vtab *pVtab){ - ExpertVtab *p = (ExpertVtab*)pVtab; - sqlite3_free(p); - return SQLITE_OK; +/* Callback for sqlite3_exec() with query with leading count(*) column. + * The first argument is expected to be an int*, referent to be incremented + * if that leading column is not exactly '0'. + */ +static int countNonzeros(void* pCount, int nc, + char* azResults[], char* azColumns[]){ + (void)azColumns; /* Suppress unused parameter warning */ + if( nc>0 && (azResults[0][0]!='0' || azResults[0][1]!=0) ){ + *((int *)pCount) += 1; + } + return 0; } -static int expertBestIndex(sqlite3_vtab *pVtab, sqlite3_index_info *pIdxInfo){ - ExpertVtab *p = (ExpertVtab*)pVtab; +static int idxCreateFromCons( + sqlite3expert *p, + IdxScan *pScan, + IdxConstraint *pEq, + IdxConstraint *pTail +){ + sqlite3 *dbm = p->dbm; int rc = SQLITE_OK; - int n = 0; - IdxScan *pScan; - const int opmask = - SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | - SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | - SQLITE_INDEX_CONSTRAINT_LE; - - pScan = idxMalloc(&rc, sizeof(IdxScan)); - if( pScan ){ - int i; + if( (pEq || pTail) && 0==idxFindCompatible(&rc, dbm, pScan, pEq, pTail) ){ + IdxTable *pTab = pScan->pTab; + char *zCols = 0; + char *zIdx = 0; + IdxConstraint *pCons; + unsigned int h = 0; + const char *zFmt; - /* Link the new scan object into the list */ - pScan->pTab = p->pTab; - pScan->pNextScan = p->pExpert->pScan; - p->pExpert->pScan = pScan; + for(pCons=pEq; pCons; pCons=pCons->pLink){ + zCols = idxAppendColDefn(&rc, zCols, pTab, pCons); + } + for(pCons=pTail; pCons; pCons=pCons->pLink){ + zCols = idxAppendColDefn(&rc, zCols, pTab, pCons); + } - /* Add the constraints to the IdxScan object */ - for(i=0; inConstraint; i++){ - struct sqlite3_index_constraint *pCons = &pIdxInfo->aConstraint[i]; - if( pCons->usable - && pCons->iColumn>=0 - && p->pTab->aCol[pCons->iColumn].iPk==0 - && (pCons->op & opmask) - ){ - IdxConstraint *pNew; - const char *zColl = sqlite3_vtab_collation(pIdxInfo, i); - pNew = idxNewConstraint(&rc, zColl); - if( pNew ){ - pNew->iCol = pCons->iColumn; - if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ ){ - pNew->pNext = pScan->pEq; - pScan->pEq = pNew; + if( rc==SQLITE_OK ){ + /* Hash the list of columns to come up with a name for the index */ + const char *zTable = pScan->pTab->zName; + int quoteTable = idxIdentifierRequiresQuotes(zTable); + char *zName = 0; /* Index name */ + int collisions = 0; + do{ + int i; + char *zFind; + for(i=0; zCols[i]; i++){ + h += ((h<<3) + zCols[i]); + } + sqlite3_free(zName); + zName = sqlite3_mprintf("%s_idx_%08x", zTable, h); + if( zName==0 ) break; + /* Is is unique among table, view and index names? */ + zFmt = "SELECT count(*) FROM sqlite_schema WHERE name=%Q" + " AND type in ('index','table','view')"; + zFind = sqlite3_mprintf(zFmt, zName); + i = 0; + rc = sqlite3_exec(dbm, zFind, countNonzeros, &i, 0); + assert(rc==SQLITE_OK); + sqlite3_free(zFind); + if( i==0 ){ + collisions = 0; + break; + } + ++collisions; + }while( collisions<50 && zName!=0 ); + if( collisions ){ + /* This return means "Gave up trying to find a unique index name." */ + rc = SQLITE_BUSY_TIMEOUT; + }else if( zName==0 ){ + rc = SQLITE_NOMEM; + }else{ + if( quoteTable ){ + zFmt = "CREATE INDEX \"%w\" ON \"%w\"(%s)"; + }else{ + zFmt = "CREATE INDEX %s ON %s(%s)"; + } + zIdx = sqlite3_mprintf(zFmt, zName, zTable, zCols); + if( !zIdx ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_exec(dbm, zIdx, 0, 0, p->pzErrmsg); + if( rc!=SQLITE_OK ){ + rc = SQLITE_BUSY_TIMEOUT; }else{ - pNew->bRange = 1; - pNew->pNext = pScan->pRange; - pScan->pRange = pNew; + idxHashAdd(&rc, &p->hIdx, zName, zIdx); } } - n++; - pIdxInfo->aConstraintUsage[i].argvIndex = n; + sqlite3_free(zName); + sqlite3_free(zIdx); } } - /* Add the ORDER BY to the IdxScan object */ - for(i=pIdxInfo->nOrderBy-1; i>=0; i--){ - int iCol = pIdxInfo->aOrderBy[i].iColumn; - if( iCol>=0 ){ - IdxConstraint *pNew = idxNewConstraint(&rc, p->pTab->aCol[iCol].zColl); - if( pNew ){ - pNew->iCol = iCol; - pNew->bDesc = pIdxInfo->aOrderBy[i].desc; - pNew->pNext = pScan->pOrder; - pNew->pLink = pScan->pOrder; - pScan->pOrder = pNew; - n++; - } - } - } + sqlite3_free(zCols); } - - pIdxInfo->estimatedCost = 1000000.0 / (n+1); return rc; } -static int expertUpdate( - sqlite3_vtab *pVtab, - int nData, - sqlite3_value **azData, - sqlite_int64 *pRowid -){ - (void)pVtab; - (void)nData; - (void)azData; - (void)pRowid; - return SQLITE_OK; -} - -/* -** Virtual table module xOpen method. +/* +** Return true if list pList (linked by IdxConstraint.pLink) contains +** a constraint compatible with *p. Otherwise return false. */ -static int expertOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ - int rc = SQLITE_OK; - ExpertCsr *pCsr; - (void)pVTab; - pCsr = idxMalloc(&rc, sizeof(ExpertCsr)); - *ppCursor = (sqlite3_vtab_cursor*)pCsr; - return rc; +static int idxFindConstraint(IdxConstraint *pList, IdxConstraint *p){ + IdxConstraint *pCmp; + for(pCmp=pList; pCmp; pCmp=pCmp->pLink){ + if( p->iCol==pCmp->iCol ) return 1; + } + return 0; } -/* -** Virtual table module xClose method. -*/ -static int expertClose(sqlite3_vtab_cursor *cur){ - ExpertCsr *pCsr = (ExpertCsr*)cur; - sqlite3_finalize(pCsr->pData); - sqlite3_free(pCsr); - return SQLITE_OK; -} +static int idxCreateFromWhere( + sqlite3expert *p, + IdxScan *pScan, /* Create indexes for this scan */ + IdxConstraint *pTail /* range/ORDER BY constraints for inclusion */ +){ + IdxConstraint *p1 = 0; + IdxConstraint *pCon; + int rc; -/* -** Virtual table module xEof method. -** -** Return non-zero if the cursor does not currently point to a valid -** record (i.e if the scan has finished), or zero otherwise. -*/ -static int expertEof(sqlite3_vtab_cursor *cur){ - ExpertCsr *pCsr = (ExpertCsr*)cur; - return pCsr->pData==0; + /* Gather up all the == constraints. */ + for(pCon=pScan->pEq; pCon; pCon=pCon->pNext){ + if( !idxFindConstraint(p1, pCon) && !idxFindConstraint(pTail, pCon) ){ + pCon->pLink = p1; + p1 = pCon; + } + } + + /* Create an index using the == constraints collected above. And the + ** range constraint/ORDER BY terms passed in by the caller, if any. */ + rc = idxCreateFromCons(p, pScan, p1, pTail); + + /* If no range/ORDER BY passed by the caller, create a version of the + ** index for each range constraint. */ + if( pTail==0 ){ + for(pCon=pScan->pRange; rc==SQLITE_OK && pCon; pCon=pCon->pNext){ + assert( pCon->pLink==0 ); + if( !idxFindConstraint(p1, pCon) && !idxFindConstraint(pTail, pCon) ){ + rc = idxCreateFromCons(p, pScan, p1, pCon); + } + } + } + + return rc; } -/* -** Virtual table module xNext method. +/* +** Create candidate indexes in database [dbm] based on the data in +** linked-list pScan. */ -static int expertNext(sqlite3_vtab_cursor *cur){ - ExpertCsr *pCsr = (ExpertCsr*)cur; +static int idxCreateCandidates(sqlite3expert *p){ int rc = SQLITE_OK; + IdxScan *pIter; - assert( pCsr->pData ); - rc = sqlite3_step(pCsr->pData); - if( rc!=SQLITE_ROW ){ - rc = sqlite3_finalize(pCsr->pData); - pCsr->pData = 0; - }else{ - rc = SQLITE_OK; + for(pIter=p->pScan; pIter && rc==SQLITE_OK; pIter=pIter->pNextScan){ + rc = idxCreateFromWhere(p, pIter, 0); + if( rc==SQLITE_OK && pIter->pOrder ){ + rc = idxCreateFromWhere(p, pIter, pIter->pOrder); + } } return rc; } -/* -** Virtual table module xRowid method. +/* +** Free all elements of the linked list starting at pConstraint. */ -static int expertRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ - (void)cur; - *pRowid = 0; - return SQLITE_OK; +static void idxConstraintFree(IdxConstraint *pConstraint){ + IdxConstraint *pNext; + IdxConstraint *p; + + for(p=pConstraint; p; p=pNext){ + pNext = p->pNext; + sqlite3_free(p); + } } -/* -** Virtual table module xColumn method. +/* +** Free all elements of the linked list starting from pScan up until pLast +** (pLast is not freed). */ -static int expertColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ - ExpertCsr *pCsr = (ExpertCsr*)cur; - sqlite3_value *pVal; - pVal = sqlite3_column_value(pCsr->pData, i); - if( pVal ){ - sqlite3_result_value(ctx, pVal); +static void idxScanFree(IdxScan *pScan, IdxScan *pLast){ + IdxScan *p; + IdxScan *pNext; + for(p=pScan; p!=pLast; p=pNext){ + pNext = p->pNextScan; + idxConstraintFree(p->pOrder); + idxConstraintFree(p->pEq); + idxConstraintFree(p->pRange); + sqlite3_free(p); } - return SQLITE_OK; } -/* -** Virtual table module xFilter method. +/* +** Free all elements of the linked list starting from pStatement up +** until pLast (pLast is not freed). */ -static int expertFilter( - sqlite3_vtab_cursor *cur, - int idxNum, const char *idxStr, - int argc, sqlite3_value **argv -){ - ExpertCsr *pCsr = (ExpertCsr*)cur; - ExpertVtab *pVtab = (ExpertVtab*)(cur->pVtab); - sqlite3expert *pExpert = pVtab->pExpert; - int rc; - - (void)idxNum; - (void)idxStr; - (void)argc; - (void)argv; - rc = sqlite3_finalize(pCsr->pData); - pCsr->pData = 0; - if( rc==SQLITE_OK ){ - rc = idxPrintfPrepareStmt(pExpert->db, &pCsr->pData, &pVtab->base.zErrMsg, - "SELECT * FROM main.%Q WHERE sample()", pVtab->pTab->zName - ); +static void idxStatementFree(IdxStatement *pStatement, IdxStatement *pLast){ + IdxStatement *p; + IdxStatement *pNext; + for(p=pStatement; p!=pLast; p=pNext){ + pNext = p->pNext; + sqlite3_free(p->zEQP); + sqlite3_free(p->zIdx); + sqlite3_free(p); } +} - if( rc==SQLITE_OK ){ - rc = expertNext(cur); +/* +** Free the linked list of IdxTable objects starting at pTab. +*/ +static void idxTableFree(IdxTable *pTab){ + IdxTable *pIter; + IdxTable *pNext; + for(pIter=pTab; pIter; pIter=pNext){ + pNext = pIter->pNext; + sqlite3_free(pIter); } - return rc; } -static int idxRegisterVtab(sqlite3expert *p){ - static sqlite3_module expertModule = { - 2, /* iVersion */ - expertConnect, /* xCreate - create a table */ - expertConnect, /* xConnect - connect to an existing table */ - expertBestIndex, /* xBestIndex - Determine search strategy */ - expertDisconnect, /* xDisconnect - Disconnect from a table */ - expertDisconnect, /* xDestroy - Drop a table */ - expertOpen, /* xOpen - open a cursor */ - expertClose, /* xClose - close a cursor */ - expertFilter, /* xFilter - configure scan constraints */ - expertNext, /* xNext - advance a cursor */ - expertEof, /* xEof */ - expertColumn, /* xColumn - read data */ - expertRowid, /* xRowid - read data */ - expertUpdate, /* xUpdate - write data */ - 0, /* xBegin - begin transaction */ - 0, /* xSync - sync transaction */ - 0, /* xCommit - commit transaction */ - 0, /* xRollback - rollback transaction */ - 0, /* xFindFunction - function overloading */ - 0, /* xRename - rename the table */ - 0, /* xSavepoint */ - 0, /* xRelease */ - 0, /* xRollbackTo */ - 0, /* xShadowName */ - }; - - return sqlite3_create_module(p->dbv, "expert", &expertModule, (void*)p); -} -/* -** End of virtual table implementation. -*************************************************************************/ /* -** Finalize SQL statement pStmt. If (*pRc) is SQLITE_OK when this function -** is called, set it to the return value of sqlite3_finalize() before -** returning. Otherwise, discard the sqlite3_finalize() return value. +** Free the linked list of IdxWrite objects starting at pTab. */ -static void idxFinalize(int *pRc, sqlite3_stmt *pStmt){ - int rc = sqlite3_finalize(pStmt); - if( *pRc==SQLITE_OK ) *pRc = rc; +static void idxWriteFree(IdxWrite *pTab){ + IdxWrite *pIter; + IdxWrite *pNext; + for(pIter=pTab; pIter; pIter=pNext){ + pNext = pIter->pNext; + sqlite3_free(pIter); + } } + + /* -** Attempt to allocate an IdxTable structure corresponding to table zTab -** in the main database of connection db. If successful, set (*ppOut) to -** point to the new object and return SQLITE_OK. Otherwise, return an -** SQLite error code and set (*ppOut) to NULL. In this case *pzErrmsg may be -** set to point to an error string. -** -** It is the responsibility of the caller to eventually free either the -** IdxTable object or error message using sqlite3_free(). +** This function is called after candidate indexes have been created. It +** runs all the queries to see which indexes they prefer, and populates +** IdxStatement.zIdx and IdxStatement.zEQP with the results. */ -static int idxGetTableInfo( - sqlite3 *db, /* Database connection to read details from */ - const char *zTab, /* Table name */ - IdxTable **ppOut, /* OUT: New object (if successful) */ - char **pzErrmsg /* OUT: Error message (if not) */ +static int idxFindIndexes( + sqlite3expert *p, + char **pzErr /* OUT: Error message (sqlite3_malloc) */ ){ - sqlite3_stmt *p1 = 0; - int nCol = 0; - int nTab; - int nByte; - IdxTable *pNew = 0; - int rc, rc2; - char *pCsr = 0; - int nPk = 0; + IdxStatement *pStmt; + sqlite3 *dbm = p->dbm; + int rc = SQLITE_OK; - *ppOut = 0; - if( zTab==0 ) return SQLITE_ERROR; - nTab = STRLEN(zTab); - nByte = sizeof(IdxTable) + nTab + 1; - rc = idxPrintfPrepareStmt(db, &p1, pzErrmsg, "PRAGMA table_xinfo=%Q", zTab); - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){ - const char *zCol = (const char*)sqlite3_column_text(p1, 1); - const char *zColSeq = 0; - if( zCol==0 ){ - rc = SQLITE_ERROR; - break; + IdxHash hIdx; + idxHashInit(&hIdx); + + for(pStmt=p->pStatement; rc==SQLITE_OK && pStmt; pStmt=pStmt->pNext){ + IdxHashEntry *pEntry; + sqlite3_stmt *pExplain = 0; + idxHashClear(&hIdx); + rc = idxPrintfPrepareStmt(dbm, &pExplain, pzErr, + "EXPLAIN QUERY PLAN %s", pStmt->zSql + ); + while( rc==SQLITE_OK && sqlite3_step(pExplain)==SQLITE_ROW ){ + /* int iId = sqlite3_column_int(pExplain, 0); */ + /* int iParent = sqlite3_column_int(pExplain, 1); */ + /* int iNotUsed = sqlite3_column_int(pExplain, 2); */ + const char *zDetail = (const char*)sqlite3_column_text(pExplain, 3); + int nDetail; + int i; + + if( !zDetail ) continue; + nDetail = STRLEN(zDetail); + + for(i=0; ihIdx, zIdx, nIdx); + if( zSql ){ + idxHashAdd(&rc, &hIdx, zSql, 0); + if( rc ) goto find_indexes_out; + } + break; + } + } + + if( zDetail[0]!='-' ){ + pStmt->zEQP = idxAppendText(&rc, pStmt->zEQP, "%s\n", zDetail); + } + } + + for(pEntry=hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ + pStmt->zIdx = idxAppendText(&rc, pStmt->zIdx, "%s;\n", pEntry->zKey); + } + + idxFinalize(&rc, pExplain); + } + + find_indexes_out: + idxHashClear(&hIdx); + return rc; +} + +static int idxAuthCallback( + void *pCtx, + int eOp, + const char *z3, + const char *z4, + const char *zDb, + const char *zTrigger +){ + int rc = SQLITE_OK; + (void)z4; + (void)zTrigger; + if( eOp==SQLITE_INSERT || eOp==SQLITE_UPDATE || eOp==SQLITE_DELETE ){ + if( sqlite3_stricmp(zDb, "main")==0 ){ + sqlite3expert *p = (sqlite3expert*)pCtx; + IdxTable *pTab; + for(pTab=p->pTable; pTab; pTab=pTab->pNext){ + if( 0==sqlite3_stricmp(z3, pTab->zName) ) break; + } + if( pTab ){ + IdxWrite *pWrite; + for(pWrite=p->pWrite; pWrite; pWrite=pWrite->pNext){ + if( pWrite->pTab==pTab && pWrite->eOp==eOp ) break; + } + if( pWrite==0 ){ + pWrite = idxMalloc(&rc, sizeof(IdxWrite)); + if( rc==SQLITE_OK ){ + pWrite->pTab = pTab; + pWrite->eOp = eOp; + pWrite->pNext = p->pWrite; + p->pWrite = pWrite; + } + } + } } - nByte += 1 + STRLEN(zCol); - rc = sqlite3_table_column_metadata( - db, "main", zTab, zCol, 0, &zColSeq, 0, 0, 0 - ); - if( zColSeq==0 ) zColSeq = "binary"; - nByte += 1 + STRLEN(zColSeq); - nCol++; - nPk += (sqlite3_column_int(p1, 5)>0); } - rc2 = sqlite3_reset(p1); - if( rc==SQLITE_OK ) rc = rc2; + return rc; +} - nByte += sizeof(IdxColumn) * nCol; - if( rc==SQLITE_OK ){ - pNew = idxMalloc(&rc, nByte); +static int idxProcessOneTrigger( + sqlite3expert *p, + IdxWrite *pWrite, + char **pzErr +){ + static const char *zInt = UNIQUE_TABLE_NAME; + static const char *zDrop = "DROP TABLE " UNIQUE_TABLE_NAME; + IdxTable *pTab = pWrite->pTab; + const char *zTab = pTab->zName; + const char *zSql = + "SELECT 'CREATE TEMP' || substr(sql, 7) FROM sqlite_schema " + "WHERE tbl_name = %Q AND type IN ('table', 'trigger') " + "ORDER BY type;"; + sqlite3_stmt *pSelect = 0; + int rc = SQLITE_OK; + char *zWrite = 0; + + /* Create the table and its triggers in the temp schema */ + rc = idxPrintfPrepareStmt(p->db, &pSelect, pzErr, zSql, zTab, zTab); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSelect) ){ + const char *zCreate = (const char*)sqlite3_column_text(pSelect, 0); + if( zCreate==0 ) continue; + rc = sqlite3_exec(p->dbv, zCreate, 0, 0, pzErr); } + idxFinalize(&rc, pSelect); + + /* Rename the table in the temp schema to zInt */ if( rc==SQLITE_OK ){ - pNew->aCol = (IdxColumn*)&pNew[1]; - pNew->nCol = nCol; - pCsr = (char*)&pNew->aCol[nCol]; + char *z = sqlite3_mprintf("ALTER TABLE temp.%Q RENAME TO %Q", zTab, zInt); + if( z==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_exec(p->dbv, z, 0, 0, pzErr); + sqlite3_free(z); + } } - nCol = 0; - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){ - const char *zCol = (const char*)sqlite3_column_text(p1, 1); - const char *zColSeq = 0; - int nCopy; - if( zCol==0 ) continue; - nCopy = STRLEN(zCol) + 1; - pNew->aCol[nCol].zName = pCsr; - pNew->aCol[nCol].iPk = (sqlite3_column_int(p1, 5)==1 && nPk==1); - memcpy(pCsr, zCol, nCopy); - pCsr += nCopy; - - rc = sqlite3_table_column_metadata( - db, "main", zTab, zCol, 0, &zColSeq, 0, 0, 0 - ); - if( rc==SQLITE_OK ){ - if( zColSeq==0 ) zColSeq = "binary"; - nCopy = STRLEN(zColSeq) + 1; - pNew->aCol[nCol].zColl = pCsr; - memcpy(pCsr, zColSeq, nCopy); - pCsr += nCopy; + switch( pWrite->eOp ){ + case SQLITE_INSERT: { + int i; + zWrite = idxAppendText(&rc, zWrite, "INSERT INTO %Q VALUES(", zInt); + for(i=0; inCol; i++){ + zWrite = idxAppendText(&rc, zWrite, "%s?", i==0 ? "" : ", "); + } + zWrite = idxAppendText(&rc, zWrite, ")"); + break; + } + case SQLITE_UPDATE: { + int i; + zWrite = idxAppendText(&rc, zWrite, "UPDATE %Q SET ", zInt); + for(i=0; inCol; i++){ + zWrite = idxAppendText(&rc, zWrite, "%s%Q=?", i==0 ? "" : ", ", + pTab->aCol[i].zName + ); + } + break; + } + default: { + assert( pWrite->eOp==SQLITE_DELETE ); + if( rc==SQLITE_OK ){ + zWrite = sqlite3_mprintf("DELETE FROM %Q", zInt); + if( zWrite==0 ) rc = SQLITE_NOMEM; + } } + } - nCol++; + if( rc==SQLITE_OK ){ + sqlite3_stmt *pX = 0; + rc = sqlite3_prepare_v2(p->dbv, zWrite, -1, &pX, 0); + idxFinalize(&rc, pX); + if( rc!=SQLITE_OK ){ + idxDatabaseError(p->dbv, pzErr); + } } - idxFinalize(&rc, p1); + sqlite3_free(zWrite); - if( rc!=SQLITE_OK ){ - sqlite3_free(pNew); - pNew = 0; - }else if( ALWAYS(pNew!=0) ){ - pNew->zName = pCsr; - if( ALWAYS(pNew->zName!=0) ) memcpy(pNew->zName, zTab, nTab+1); + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(p->dbv, zDrop, 0, 0, pzErr); } - *ppOut = pNew; return rc; } -/* -** This function is a no-op if *pRc is set to anything other than -** SQLITE_OK when it is called. -** -** If *pRc is initially set to SQLITE_OK, then the text specified by -** the printf() style arguments is appended to zIn and the result returned -** in a buffer allocated by sqlite3_malloc(). sqlite3_free() is called on -** zIn before returning. -*/ -static char *idxAppendText(int *pRc, char *zIn, const char *zFmt, ...){ - va_list ap; - char *zAppend = 0; - char *zRet = 0; - int nIn = zIn ? STRLEN(zIn) : 0; - int nAppend = 0; - va_start(ap, zFmt); - if( *pRc==SQLITE_OK ){ - zAppend = sqlite3_vmprintf(zFmt, ap); - if( zAppend ){ - nAppend = STRLEN(zAppend); - zRet = (char*)sqlite3_malloc(nIn + nAppend + 1); - } - if( zAppend && zRet ){ - if( nIn ) memcpy(zRet, zIn, nIn); - memcpy(&zRet[nIn], zAppend, nAppend+1); - }else{ - sqlite3_free(zRet); - zRet = 0; - *pRc = SQLITE_NOMEM; +static int idxProcessTriggers(sqlite3expert *p, char **pzErr){ + int rc = SQLITE_OK; + IdxWrite *pEnd = 0; + IdxWrite *pFirst = p->pWrite; + + while( rc==SQLITE_OK && pFirst!=pEnd ){ + IdxWrite *pIter; + for(pIter=pFirst; rc==SQLITE_OK && pIter!=pEnd; pIter=pIter->pNext){ + rc = idxProcessOneTrigger(p, pIter, pzErr); } - sqlite3_free(zAppend); - sqlite3_free(zIn); + pEnd = pFirst; + pFirst = p->pWrite; } - va_end(ap); - return zRet; + + return rc; } -/* -** Return true if zId must be quoted in order to use it as an SQL -** identifier, or false otherwise. -*/ -static int idxIdentifierRequiresQuotes(const char *zId){ - int i; - int nId = STRLEN(zId); - - if( sqlite3_keyword_check(zId, nId) ) return 1; - for(i=0; zId[i]; i++){ - if( !(zId[i]=='_') - && !(zId[i]>='0' && zId[i]<='9') - && !(zId[i]>='a' && zId[i]<='z') - && !(zId[i]>='A' && zId[i]<='Z') - ){ - return 1; +static int idxCreateVtabSchema(sqlite3expert *p, char **pzErrmsg){ + int rc = idxRegisterVtab(p); + sqlite3_stmt *pSchema = 0; + + /* For each table in the main db schema: + ** + ** 1) Add an entry to the p->pTable list, and + ** 2) Create the equivalent virtual table in dbv. + */ + rc = idxPrepareStmt(p->db, &pSchema, pzErrmsg, + "SELECT type, name, sql, 1 FROM sqlite_schema " + "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' " + " UNION ALL " + "SELECT type, name, sql, 2 FROM sqlite_schema " + "WHERE type = 'trigger'" + " AND tbl_name IN(SELECT name FROM sqlite_schema WHERE type = 'view') " + "ORDER BY 4, 1" + ); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSchema) ){ + const char *zType = (const char*)sqlite3_column_text(pSchema, 0); + const char *zName = (const char*)sqlite3_column_text(pSchema, 1); + const char *zSql = (const char*)sqlite3_column_text(pSchema, 2); + + if( zType==0 || zName==0 ) continue; + if( zType[0]=='v' || zType[1]=='r' ){ + if( zSql ) rc = sqlite3_exec(p->dbv, zSql, 0, 0, pzErrmsg); + }else{ + IdxTable *pTab; + rc = idxGetTableInfo(p->db, zName, &pTab, pzErrmsg); + if( rc==SQLITE_OK ){ + int i; + char *zInner = 0; + char *zOuter = 0; + pTab->pNext = p->pTable; + p->pTable = pTab; + + /* The statement the vtab will pass to sqlite3_declare_vtab() */ + zInner = idxAppendText(&rc, 0, "CREATE TABLE x("); + for(i=0; inCol; i++){ + zInner = idxAppendText(&rc, zInner, "%s%Q COLLATE %s", + (i==0 ? "" : ", "), pTab->aCol[i].zName, pTab->aCol[i].zColl + ); + } + zInner = idxAppendText(&rc, zInner, ")"); + + /* The CVT statement to create the vtab */ + zOuter = idxAppendText(&rc, 0, + "CREATE VIRTUAL TABLE %Q USING expert(%Q)", zName, zInner + ); + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(p->dbv, zOuter, 0, 0, pzErrmsg); + } + sqlite3_free(zInner); + sqlite3_free(zOuter); + } } } - return 0; + idxFinalize(&rc, pSchema); + return rc; } -/* -** This function appends an index column definition suitable for constraint -** pCons to the string passed as zIn and returns the result. -*/ -static char *idxAppendColDefn( - int *pRc, /* IN/OUT: Error code */ - char *zIn, /* Column defn accumulated so far */ - IdxTable *pTab, /* Table index will be created on */ - IdxConstraint *pCons +struct IdxSampleCtx { + int iTarget; + double target; /* Target nRet/nRow value */ + double nRow; /* Number of rows seen */ + double nRet; /* Number of rows returned */ +}; + +static void idxSampleFunc( + sqlite3_context *pCtx, + int argc, + sqlite3_value **argv ){ - char *zRet = zIn; - IdxColumn *p = &pTab->aCol[pCons->iCol]; - if( zRet ) zRet = idxAppendText(pRc, zRet, ", "); + struct IdxSampleCtx *p = (struct IdxSampleCtx*)sqlite3_user_data(pCtx); + int bRet; - if( idxIdentifierRequiresQuotes(p->zName) ){ - zRet = idxAppendText(pRc, zRet, "%Q", p->zName); + (void)argv; + assert( argc==0 ); + if( p->nRow==0.0 ){ + bRet = 1; }else{ - zRet = idxAppendText(pRc, zRet, "%s", p->zName); - } - - if( sqlite3_stricmp(p->zColl, pCons->zColl) ){ - if( idxIdentifierRequiresQuotes(pCons->zColl) ){ - zRet = idxAppendText(pRc, zRet, " COLLATE %Q", pCons->zColl); - }else{ - zRet = idxAppendText(pRc, zRet, " COLLATE %s", pCons->zColl); + bRet = (p->nRet / p->nRow) <= p->target; + if( bRet==0 ){ + unsigned short rnd; + sqlite3_randomness(2, (void*)&rnd); + bRet = ((int)rnd % 100) <= p->iTarget; } } - if( pCons->bDesc ){ - zRet = idxAppendText(pRc, zRet, " DESC"); - } - return zRet; + sqlite3_result_int(pCtx, bRet); + p->nRow += 1.0; + p->nRet += (double)bRet; } +struct IdxRemCtx { + int nSlot; + struct IdxRemSlot { + int eType; /* SQLITE_NULL, INTEGER, REAL, TEXT, BLOB */ + i64 iVal; /* SQLITE_INTEGER value */ + double rVal; /* SQLITE_FLOAT value */ + int nByte; /* Bytes of space allocated at z */ + int n; /* Size of buffer z */ + char *z; /* SQLITE_TEXT/BLOB value */ + } aSlot[1]; +}; + /* -** Search database dbm for an index compatible with the one idxCreateFromCons() -** would create from arguments pScan, pEq and pTail. If no error occurs and -** such an index is found, return non-zero. Or, if no such index is found, -** return zero. -** -** If an error occurs, set *pRc to an SQLite error code and return zero. +** Implementation of scalar function rem(). */ -static int idxFindCompatible( - int *pRc, /* OUT: Error code */ - sqlite3* dbm, /* Database to search */ - IdxScan *pScan, /* Scan for table to search for index on */ - IdxConstraint *pEq, /* List of == constraints */ - IdxConstraint *pTail /* List of range constraints */ +static void idxRemFunc( + sqlite3_context *pCtx, + int argc, + sqlite3_value **argv ){ - const char *zTbl = pScan->pTab->zName; - sqlite3_stmt *pIdxList = 0; - IdxConstraint *pIter; - int nEq = 0; /* Number of elements in pEq */ - int rc; + struct IdxRemCtx *p = (struct IdxRemCtx*)sqlite3_user_data(pCtx); + struct IdxRemSlot *pSlot; + int iSlot; + assert( argc==2 ); - /* Count the elements in list pEq */ - for(pIter=pEq; pIter; pIter=pIter->pLink) nEq++; + iSlot = sqlite3_value_int(argv[0]); + assert( iSlot<=p->nSlot ); + pSlot = &p->aSlot[iSlot]; - rc = idxPrintfPrepareStmt(dbm, &pIdxList, 0, "PRAGMA index_list=%Q", zTbl); - while( rc==SQLITE_OK && sqlite3_step(pIdxList)==SQLITE_ROW ){ - int bMatch = 1; - IdxConstraint *pT = pTail; - sqlite3_stmt *pInfo = 0; - const char *zIdx = (const char*)sqlite3_column_text(pIdxList, 1); - if( zIdx==0 ) continue; + switch( pSlot->eType ){ + case SQLITE_NULL: + /* no-op */ + break; - /* Zero the IdxConstraint.bFlag values in the pEq list */ - for(pIter=pEq; pIter; pIter=pIter->pLink) pIter->bFlag = 0; + case SQLITE_INTEGER: + sqlite3_result_int64(pCtx, pSlot->iVal); + break; - rc = idxPrintfPrepareStmt(dbm, &pInfo, 0, "PRAGMA index_xInfo=%Q", zIdx); - while( rc==SQLITE_OK && sqlite3_step(pInfo)==SQLITE_ROW ){ - int iIdx = sqlite3_column_int(pInfo, 0); - int iCol = sqlite3_column_int(pInfo, 1); - const char *zColl = (const char*)sqlite3_column_text(pInfo, 4); + case SQLITE_FLOAT: + sqlite3_result_double(pCtx, pSlot->rVal); + break; - if( iIdxpLink){ - if( pIter->bFlag ) continue; - if( pIter->iCol!=iCol ) continue; - if( sqlite3_stricmp(pIter->zColl, zColl) ) continue; - pIter->bFlag = 1; - break; - } - if( pIter==0 ){ - bMatch = 0; - break; - } - }else{ - if( pT ){ - if( pT->iCol!=iCol || sqlite3_stricmp(pT->zColl, zColl) ){ - bMatch = 0; - break; - } - pT = pT->pLink; - } - } - } - idxFinalize(&rc, pInfo); + case SQLITE_BLOB: + sqlite3_result_blob(pCtx, pSlot->z, pSlot->n, SQLITE_TRANSIENT); + break; - if( rc==SQLITE_OK && bMatch ){ - sqlite3_finalize(pIdxList); - return 1; - } + case SQLITE_TEXT: + sqlite3_result_text(pCtx, pSlot->z, pSlot->n, SQLITE_TRANSIENT); + break; } - idxFinalize(&rc, pIdxList); - - *pRc = rc; - return 0; -} -/* Callback for sqlite3_exec() with query with leading count(*) column. - * The first argument is expected to be an int*, referent to be incremented - * if that leading column is not exactly '0'. - */ -static int countNonzeros(void* pCount, int nc, - char* azResults[], char* azColumns[]){ - (void)azColumns; /* Suppress unused parameter warning */ - if( nc>0 && (azResults[0][0]!='0' || azResults[0][1]!=0) ){ - *((int *)pCount) += 1; - } - return 0; -} + pSlot->eType = sqlite3_value_type(argv[1]); + switch( pSlot->eType ){ + case SQLITE_NULL: + /* no-op */ + break; -static int idxCreateFromCons( - sqlite3expert *p, - IdxScan *pScan, - IdxConstraint *pEq, - IdxConstraint *pTail -){ - sqlite3 *dbm = p->dbm; - int rc = SQLITE_OK; - if( (pEq || pTail) && 0==idxFindCompatible(&rc, dbm, pScan, pEq, pTail) ){ - IdxTable *pTab = pScan->pTab; - char *zCols = 0; - char *zIdx = 0; - IdxConstraint *pCons; - unsigned int h = 0; - const char *zFmt; + case SQLITE_INTEGER: + pSlot->iVal = sqlite3_value_int64(argv[1]); + break; - for(pCons=pEq; pCons; pCons=pCons->pLink){ - zCols = idxAppendColDefn(&rc, zCols, pTab, pCons); - } - for(pCons=pTail; pCons; pCons=pCons->pLink){ - zCols = idxAppendColDefn(&rc, zCols, pTab, pCons); - } + case SQLITE_FLOAT: + pSlot->rVal = sqlite3_value_double(argv[1]); + break; - if( rc==SQLITE_OK ){ - /* Hash the list of columns to come up with a name for the index */ - const char *zTable = pScan->pTab->zName; - int quoteTable = idxIdentifierRequiresQuotes(zTable); - char *zName = 0; /* Index name */ - int collisions = 0; - do{ - int i; - char *zFind; - for(i=0; zCols[i]; i++){ - h += ((h<<3) + zCols[i]); - } - sqlite3_free(zName); - zName = sqlite3_mprintf("%s_idx_%08x", zTable, h); - if( zName==0 ) break; - /* Is is unique among table, view and index names? */ - zFmt = "SELECT count(*) FROM sqlite_schema WHERE name=%Q" - " AND type in ('index','table','view')"; - zFind = sqlite3_mprintf(zFmt, zName); - i = 0; - rc = sqlite3_exec(dbm, zFind, countNonzeros, &i, 0); - assert(rc==SQLITE_OK); - sqlite3_free(zFind); - if( i==0 ){ - collisions = 0; - break; - } - ++collisions; - }while( collisions<50 && zName!=0 ); - if( collisions ){ - /* This return means "Gave up trying to find a unique index name." */ - rc = SQLITE_BUSY_TIMEOUT; - }else if( zName==0 ){ - rc = SQLITE_NOMEM; - }else{ - if( quoteTable ){ - zFmt = "CREATE INDEX \"%w\" ON \"%w\"(%s)"; - }else{ - zFmt = "CREATE INDEX %s ON %s(%s)"; - } - zIdx = sqlite3_mprintf(zFmt, zName, zTable, zCols); - if( !zIdx ){ - rc = SQLITE_NOMEM; - }else{ - rc = sqlite3_exec(dbm, zIdx, 0, 0, p->pzErrmsg); - if( rc!=SQLITE_OK ){ - rc = SQLITE_BUSY_TIMEOUT; - }else{ - idxHashAdd(&rc, &p->hIdx, zName, zIdx); - } + case SQLITE_BLOB: + case SQLITE_TEXT: { + int nByte = sqlite3_value_bytes(argv[1]); + const void *pData = 0; + if( nByte>pSlot->nByte ){ + char *zNew = (char*)sqlite3_realloc(pSlot->z, nByte*2); + if( zNew==0 ){ + sqlite3_result_error_nomem(pCtx); + return; } - sqlite3_free(zName); - sqlite3_free(zIdx); + pSlot->nByte = nByte*2; + pSlot->z = zNew; + } + pSlot->n = nByte; + if( pSlot->eType==SQLITE_BLOB ){ + pData = sqlite3_value_blob(argv[1]); + if( pData ) memcpy(pSlot->z, pData, nByte); + }else{ + pData = sqlite3_value_text(argv[1]); + memcpy(pSlot->z, pData, nByte); } + break; } - - sqlite3_free(zCols); } - return rc; } -/* -** Return true if list pList (linked by IdxConstraint.pLink) contains -** a constraint compatible with *p. Otherwise return false. -*/ -static int idxFindConstraint(IdxConstraint *pList, IdxConstraint *p){ - IdxConstraint *pCmp; - for(pCmp=pList; pCmp; pCmp=pCmp->pLink){ - if( p->iCol==pCmp->iCol ) return 1; +static int idxLargestIndex(sqlite3 *db, int *pnMax, char **pzErr){ + int rc = SQLITE_OK; + const char *zMax = + "SELECT max(i.seqno) FROM " + " sqlite_schema AS s, " + " pragma_index_list(s.name) AS l, " + " pragma_index_info(l.name) AS i " + "WHERE s.type = 'table'"; + sqlite3_stmt *pMax = 0; + + *pnMax = 0; + rc = idxPrepareStmt(db, &pMax, pzErr, zMax); + if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){ + *pnMax = sqlite3_column_int(pMax, 0) + 1; } - return 0; + idxFinalize(&rc, pMax); + + return rc; } -static int idxCreateFromWhere( - sqlite3expert *p, - IdxScan *pScan, /* Create indexes for this scan */ - IdxConstraint *pTail /* range/ORDER BY constraints for inclusion */ +static int idxPopulateOneStat1( + sqlite3expert *p, + sqlite3_stmt *pIndexXInfo, + sqlite3_stmt *pWriteStat, + const char *zTab, + const char *zIdx, + char **pzErr ){ - IdxConstraint *p1 = 0; - IdxConstraint *pCon; - int rc; + char *zCols = 0; + char *zOrder = 0; + char *zQuery = 0; + int nCol = 0; + int i; + sqlite3_stmt *pQuery = 0; + int *aStat = 0; + int rc = SQLITE_OK; - /* Gather up all the == constraints. */ - for(pCon=pScan->pEq; pCon; pCon=pCon->pNext){ - if( !idxFindConstraint(p1, pCon) && !idxFindConstraint(pTail, pCon) ){ - pCon->pLink = p1; - p1 = pCon; + assert( p->iSample>0 ); + + /* Formulate the query text */ + sqlite3_bind_text(pIndexXInfo, 1, zIdx, -1, SQLITE_STATIC); + while( SQLITE_OK==rc && SQLITE_ROW==sqlite3_step(pIndexXInfo) ){ + const char *zComma = zCols==0 ? "" : ", "; + const char *zName = (const char*)sqlite3_column_text(pIndexXInfo, 0); + const char *zColl = (const char*)sqlite3_column_text(pIndexXInfo, 1); + zCols = idxAppendText(&rc, zCols, + "%sx.%Q IS rem(%d, x.%Q) COLLATE %s", zComma, zName, nCol, zName, zColl + ); + zOrder = idxAppendText(&rc, zOrder, "%s%d", zComma, ++nCol); + } + sqlite3_reset(pIndexXInfo); + if( rc==SQLITE_OK ){ + if( p->iSample==100 ){ + zQuery = sqlite3_mprintf( + "SELECT %s FROM %Q x ORDER BY %s", zCols, zTab, zOrder + ); + }else{ + zQuery = sqlite3_mprintf( + "SELECT %s FROM temp."UNIQUE_TABLE_NAME" x ORDER BY %s", zCols, zOrder + ); } } + sqlite3_free(zCols); + sqlite3_free(zOrder); - /* Create an index using the == constraints collected above. And the - ** range constraint/ORDER BY terms passed in by the caller, if any. */ - rc = idxCreateFromCons(p, pScan, p1, pTail); + /* Formulate the query text */ + if( rc==SQLITE_OK ){ + sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); + rc = idxPrepareStmt(dbrem, &pQuery, pzErr, zQuery); + } + sqlite3_free(zQuery); - /* If no range/ORDER BY passed by the caller, create a version of the - ** index for each range constraint. */ - if( pTail==0 ){ - for(pCon=pScan->pRange; rc==SQLITE_OK && pCon; pCon=pCon->pNext){ - assert( pCon->pLink==0 ); - if( !idxFindConstraint(p1, pCon) && !idxFindConstraint(pTail, pCon) ){ - rc = idxCreateFromCons(p, pScan, p1, pCon); + if( rc==SQLITE_OK ){ + aStat = (int*)idxMalloc(&rc, sizeof(int)*(nCol+1)); + } + if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pQuery) ){ + IdxHashEntry *pEntry; + char *zStat = 0; + for(i=0; i<=nCol; i++) aStat[i] = 1; + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pQuery) ){ + aStat[0]++; + for(i=0; ihIdx, zIdx, STRLEN(zIdx)); + if( pEntry ){ + assert( pEntry->zVal2==0 ); + pEntry->zVal2 = zStat; + }else{ + sqlite3_free(zStat); + } } + sqlite3_free(aStat); + idxFinalize(&rc, pQuery); + + return rc; +} + +static int idxBuildSampleTable(sqlite3expert *p, const char *zTab){ + int rc; + char *zSql; + + rc = sqlite3_exec(p->dbv,"DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); + if( rc!=SQLITE_OK ) return rc; + + zSql = sqlite3_mprintf( + "CREATE TABLE temp." UNIQUE_TABLE_NAME " AS SELECT * FROM %Q", zTab + ); + if( zSql==0 ) return SQLITE_NOMEM; + rc = sqlite3_exec(p->dbv, zSql, 0, 0, 0); + sqlite3_free(zSql); return rc; } /* -** Create candidate indexes in database [dbm] based on the data in -** linked-list pScan. +** This function is called as part of sqlite3_expert_analyze(). Candidate +** indexes have already been created in database sqlite3expert.dbm, this +** function populates sqlite_stat1 table in the same database. +** +** The stat1 data is generated by querying the */ -static int idxCreateCandidates(sqlite3expert *p){ +static int idxPopulateStat1(sqlite3expert *p, char **pzErr){ int rc = SQLITE_OK; - IdxScan *pIter; + int nMax =0; + struct IdxRemCtx *pCtx = 0; + struct IdxSampleCtx samplectx; + int i; + i64 iPrev = -100000; + sqlite3_stmt *pAllIndex = 0; + sqlite3_stmt *pIndexXInfo = 0; + sqlite3_stmt *pWrite = 0; - for(pIter=p->pScan; pIter && rc==SQLITE_OK; pIter=pIter->pNextScan){ - rc = idxCreateFromWhere(p, pIter, 0); - if( rc==SQLITE_OK && pIter->pOrder ){ - rc = idxCreateFromWhere(p, pIter, pIter->pOrder); + const char *zAllIndex = + "SELECT s.rowid, s.name, l.name FROM " + " sqlite_schema AS s, " + " pragma_index_list(s.name) AS l " + "WHERE s.type = 'table'"; + const char *zIndexXInfo = + "SELECT name, coll FROM pragma_index_xinfo(?) WHERE key"; + const char *zWrite = "INSERT INTO sqlite_stat1 VALUES(?, ?, ?)"; + + /* If iSample==0, no sqlite_stat1 data is required. */ + if( p->iSample==0 ) return SQLITE_OK; + + rc = idxLargestIndex(p->dbm, &nMax, pzErr); + if( nMax<=0 || rc!=SQLITE_OK ) return rc; + + rc = sqlite3_exec(p->dbm, "ANALYZE; PRAGMA writable_schema=1", 0, 0, 0); + + if( rc==SQLITE_OK ){ + int nByte = sizeof(struct IdxRemCtx) + (sizeof(struct IdxRemSlot) * nMax); + pCtx = (struct IdxRemCtx*)idxMalloc(&rc, nByte); + } + + if( rc==SQLITE_OK ){ + sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); + rc = sqlite3_create_function( + dbrem, "rem", 2, SQLITE_UTF8, (void*)pCtx, idxRemFunc, 0, 0 + ); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function( + p->db, "sample", 0, SQLITE_UTF8, (void*)&samplectx, idxSampleFunc, 0, 0 + ); + } + + if( rc==SQLITE_OK ){ + pCtx->nSlot = nMax+1; + rc = idxPrepareStmt(p->dbm, &pAllIndex, pzErr, zAllIndex); + } + if( rc==SQLITE_OK ){ + rc = idxPrepareStmt(p->dbm, &pIndexXInfo, pzErr, zIndexXInfo); + } + if( rc==SQLITE_OK ){ + rc = idxPrepareStmt(p->dbm, &pWrite, pzErr, zWrite); + } + + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pAllIndex) ){ + i64 iRowid = sqlite3_column_int64(pAllIndex, 0); + const char *zTab = (const char*)sqlite3_column_text(pAllIndex, 1); + const char *zIdx = (const char*)sqlite3_column_text(pAllIndex, 2); + if( zTab==0 || zIdx==0 ) continue; + if( p->iSample<100 && iPrev!=iRowid ){ + samplectx.target = (double)p->iSample / 100.0; + samplectx.iTarget = p->iSample; + samplectx.nRow = 0.0; + samplectx.nRet = 0.0; + rc = idxBuildSampleTable(p, zTab); + if( rc!=SQLITE_OK ) break; + } + rc = idxPopulateOneStat1(p, pIndexXInfo, pWrite, zTab, zIdx, pzErr); + iPrev = iRowid; + } + if( rc==SQLITE_OK && p->iSample<100 ){ + rc = sqlite3_exec(p->dbv, + "DROP TABLE IF EXISTS temp." UNIQUE_TABLE_NAME, 0,0,0 + ); + } + + idxFinalize(&rc, pAllIndex); + idxFinalize(&rc, pIndexXInfo); + idxFinalize(&rc, pWrite); + + if( pCtx ){ + for(i=0; inSlot; i++){ + sqlite3_free(pCtx->aSlot[i].z); } + sqlite3_free(pCtx); + } + + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(p->dbm, "ANALYZE sqlite_schema", 0, 0, 0); } + sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); return rc; } /* -** Free all elements of the linked list starting at pConstraint. +** Define and possibly pretend to use a useless collation sequence. +** This pretense allows expert to accept SQL using custom collations. */ -static void idxConstraintFree(IdxConstraint *pConstraint){ - IdxConstraint *pNext; - IdxConstraint *p; - - for(p=pConstraint; p; p=pNext){ - pNext = p->pNext; - sqlite3_free(p); - } +int dummyCompare(void *up1, int up2, const void *up3, int up4, const void *up5){ + (void)up1; + (void)up2; + (void)up3; + (void)up4; + (void)up5; + assert(0); /* VDBE should never be run. */ + return 0; } - -/* -** Free all elements of the linked list starting from pScan up until pLast -** (pLast is not freed). -*/ -static void idxScanFree(IdxScan *pScan, IdxScan *pLast){ - IdxScan *p; - IdxScan *pNext; - for(p=pScan; p!=pLast; p=pNext){ - pNext = p->pNextScan; - idxConstraintFree(p->pOrder); - idxConstraintFree(p->pEq); - idxConstraintFree(p->pRange); - sqlite3_free(p); - } +/* And a callback to register above upon actual need */ +void useDummyCS(void *up1, sqlite3 *db, int etr, const char *zName){ + (void)up1; + sqlite3_create_collation_v2(db, zName, etr, 0, dummyCompare, 0); } +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) \ + && !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS) /* -** Free all elements of the linked list starting from pStatement up -** until pLast (pLast is not freed). +** dummy functions for no-op implementation of UDFs during expert's work */ -static void idxStatementFree(IdxStatement *pStatement, IdxStatement *pLast){ - IdxStatement *p; - IdxStatement *pNext; - for(p=pStatement; p!=pLast; p=pNext){ - pNext = p->pNext; - sqlite3_free(p->zEQP); - sqlite3_free(p->zIdx); - sqlite3_free(p); - } +void dummyUDF(sqlite3_context *up1, int up2, sqlite3_value **up3){ + (void)up1; + (void)up2; + (void)up3; + assert(0); /* VDBE should never be run. */ +} +void dummyUDFvalue(sqlite3_context *up1){ + (void)up1; + assert(0); /* VDBE should never be run. */ } /* -** Free the linked list of IdxTable objects starting at pTab. +** Register UDFs from user database with another. */ -static void idxTableFree(IdxTable *pTab){ - IdxTable *pIter; - IdxTable *pNext; - for(pIter=pTab; pIter; pIter=pNext){ - pNext = pIter->pNext; - sqlite3_free(pIter); +int registerUDFs(sqlite3 *dbSrc, sqlite3 *dbDst){ + sqlite3_stmt *pStmt; + int rc = sqlite3_prepare_v2(dbSrc, + "SELECT name,type,enc,narg,flags " + "FROM pragma_function_list() " + "WHERE builtin==0", -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + while( SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){ + int nargs = sqlite3_column_int(pStmt,3); + int flags = sqlite3_column_int(pStmt,4); + const char *name = (char*)sqlite3_column_text(pStmt,0); + const char *type = (char*)sqlite3_column_text(pStmt,1); + const char *enc = (char*)sqlite3_column_text(pStmt,2); + if( name==0 || type==0 || enc==0 ){ + /* no-op. Only happens on OOM */ + }else{ + int ienc = SQLITE_UTF8; + int rcf = SQLITE_ERROR; + if( strcmp(enc,"utf16le")==0 ) ienc = SQLITE_UTF16LE; + else if( strcmp(enc,"utf16be")==0 ) ienc = SQLITE_UTF16BE; + ienc |= (flags & (SQLITE_DETERMINISTIC|SQLITE_DIRECTONLY)); + if( strcmp(type,"w")==0 ){ + rcf = sqlite3_create_window_function(dbDst,name,nargs,ienc,0, + dummyUDF,dummyUDFvalue,0,0,0); + }else if( strcmp(type,"a")==0 ){ + rcf = sqlite3_create_function(dbDst,name,nargs,ienc,0, + 0,dummyUDF,dummyUDFvalue); + }else if( strcmp(type,"s")==0 ){ + rcf = sqlite3_create_function(dbDst,name,nargs,ienc,0, + dummyUDF,0,0); + } + if( rcf!=SQLITE_OK ){ + rc = rcf; + break; + } + } + } + sqlite3_finalize(pStmt); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; } + return rc; } +#endif /* -** Free the linked list of IdxWrite objects starting at pTab. +** Allocate a new sqlite3expert object. */ -static void idxWriteFree(IdxWrite *pTab){ - IdxWrite *pIter; - IdxWrite *pNext; - for(pIter=pTab; pIter; pIter=pNext){ - pNext = pIter->pNext; - sqlite3_free(pIter); - } -} +sqlite3expert *sqlite3_expert_new(sqlite3 *db, char **pzErrmsg){ + int rc = SQLITE_OK; + sqlite3expert *pNew; + pNew = (sqlite3expert*)idxMalloc(&rc, sizeof(sqlite3expert)); + /* Open two in-memory databases to work with. The "vtab database" (dbv) + ** will contain a virtual table corresponding to each real table in + ** the user database schema, and a copy of each view. It is used to + ** collect information regarding the WHERE, ORDER BY and other clauses + ** of the user's query. + */ + if( rc==SQLITE_OK ){ + pNew->db = db; + pNew->iSample = 100; + rc = sqlite3_open(":memory:", &pNew->dbv); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_open(":memory:", &pNew->dbm); + if( rc==SQLITE_OK ){ + sqlite3_db_config(pNew->dbm, SQLITE_DBCONFIG_TRIGGER_EQP, 1, (int*)0); + } + } -/* -** This function is called after candidate indexes have been created. It -** runs all the queries to see which indexes they prefer, and populates -** IdxStatement.zIdx and IdxStatement.zEQP with the results. -*/ -static int idxFindIndexes( - sqlite3expert *p, - char **pzErr /* OUT: Error message (sqlite3_malloc) */ -){ - IdxStatement *pStmt; - sqlite3 *dbm = p->dbm; - int rc = SQLITE_OK; + /* Allow custom collations to be dealt with through prepare. */ + if( rc==SQLITE_OK ) rc = sqlite3_collation_needed(pNew->dbm,0,useDummyCS); + if( rc==SQLITE_OK ) rc = sqlite3_collation_needed(pNew->dbv,0,useDummyCS); - IdxHash hIdx; - idxHashInit(&hIdx); +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) \ + && !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS) + /* Register UDFs from database [db] with [dbm] and [dbv]. */ + if( rc==SQLITE_OK ){ + rc = registerUDFs(pNew->db, pNew->dbm); + } + if( rc==SQLITE_OK ){ + rc = registerUDFs(pNew->db, pNew->dbv); + } +#endif - for(pStmt=p->pStatement; rc==SQLITE_OK && pStmt; pStmt=pStmt->pNext){ - IdxHashEntry *pEntry; - sqlite3_stmt *pExplain = 0; - idxHashClear(&hIdx); - rc = idxPrintfPrepareStmt(dbm, &pExplain, pzErr, - "EXPLAIN QUERY PLAN %s", pStmt->zSql + /* Copy the entire schema of database [db] into [dbm]. */ + if( rc==SQLITE_OK ){ + sqlite3_stmt *pSql = 0; + rc = idxPrintfPrepareStmt(pNew->db, &pSql, pzErrmsg, + "SELECT sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%%'" + " AND sql NOT LIKE 'CREATE VIRTUAL %%' ORDER BY rowid" ); - while( rc==SQLITE_OK && sqlite3_step(pExplain)==SQLITE_ROW ){ - /* int iId = sqlite3_column_int(pExplain, 0); */ - /* int iParent = sqlite3_column_int(pExplain, 1); */ - /* int iNotUsed = sqlite3_column_int(pExplain, 2); */ - const char *zDetail = (const char*)sqlite3_column_text(pExplain, 3); - int nDetail; - int i; + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ + const char *zSql = (const char*)sqlite3_column_text(pSql, 0); + if( zSql ) rc = sqlite3_exec(pNew->dbm, zSql, 0, 0, pzErrmsg); + } + idxFinalize(&rc, pSql); + } - if( !zDetail ) continue; - nDetail = STRLEN(zDetail); + /* Create the vtab schema */ + if( rc==SQLITE_OK ){ + rc = idxCreateVtabSchema(pNew, pzErrmsg); + } - for(i=0; ihIdx, zIdx, nIdx); - if( zSql ){ - idxHashAdd(&rc, &hIdx, zSql, 0); - if( rc ) goto find_indexes_out; - } - break; - } - } + /* Register the auth callback with dbv */ + if( rc==SQLITE_OK ){ + sqlite3_set_authorizer(pNew->dbv, idxAuthCallback, (void*)pNew); + } - if( zDetail[0]!='-' ){ - pStmt->zEQP = idxAppendText(&rc, pStmt->zEQP, "%s\n", zDetail); - } - } + /* If an error has occurred, free the new object and reutrn NULL. Otherwise, + ** return the new sqlite3expert handle. */ + if( rc!=SQLITE_OK ){ + sqlite3_expert_destroy(pNew); + pNew = 0; + } + return pNew; +} - for(pEntry=hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ - pStmt->zIdx = idxAppendText(&rc, pStmt->zIdx, "%s;\n", pEntry->zKey); +/* +** Configure an sqlite3expert object. +*/ +int sqlite3_expert_config(sqlite3expert *p, int op, ...){ + int rc = SQLITE_OK; + va_list ap; + va_start(ap, op); + switch( op ){ + case EXPERT_CONFIG_SAMPLE: { + int iVal = va_arg(ap, int); + if( iVal<0 ) iVal = 0; + if( iVal>100 ) iVal = 100; + p->iSample = iVal; + break; } - - idxFinalize(&rc, pExplain); + default: + rc = SQLITE_NOTFOUND; + break; } - find_indexes_out: - idxHashClear(&hIdx); + va_end(ap); return rc; } -static int idxAuthCallback( - void *pCtx, - int eOp, - const char *z3, - const char *z4, - const char *zDb, - const char *zTrigger +/* +** Add an SQL statement to the analysis. +*/ +int sqlite3_expert_sql( + sqlite3expert *p, /* From sqlite3_expert_new() */ + const char *zSql, /* SQL statement to add */ + char **pzErr /* OUT: Error message (if any) */ ){ + IdxScan *pScanOrig = p->pScan; + IdxStatement *pStmtOrig = p->pStatement; int rc = SQLITE_OK; - (void)z4; - (void)zTrigger; - if( eOp==SQLITE_INSERT || eOp==SQLITE_UPDATE || eOp==SQLITE_DELETE ){ - if( sqlite3_stricmp(zDb, "main")==0 ){ - sqlite3expert *p = (sqlite3expert*)pCtx; - IdxTable *pTab; - for(pTab=p->pTable; pTab; pTab=pTab->pNext){ - if( 0==sqlite3_stricmp(z3, pTab->zName) ) break; - } - if( pTab ){ - IdxWrite *pWrite; - for(pWrite=p->pWrite; pWrite; pWrite=pWrite->pNext){ - if( pWrite->pTab==pTab && pWrite->eOp==eOp ) break; - } - if( pWrite==0 ){ - pWrite = idxMalloc(&rc, sizeof(IdxWrite)); - if( rc==SQLITE_OK ){ - pWrite->pTab = pTab; - pWrite->eOp = eOp; - pWrite->pNext = p->pWrite; - p->pWrite = pWrite; - } + const char *zStmt = zSql; + + if( p->bRun ) return SQLITE_MISUSE; + + while( rc==SQLITE_OK && zStmt && zStmt[0] ){ + sqlite3_stmt *pStmt = 0; + /* Ensure that the provided statement compiles against user's DB. */ + rc = idxPrepareStmt(p->db, &pStmt, pzErr, zStmt); + if( rc!=SQLITE_OK ) break; + sqlite3_finalize(pStmt); + rc = sqlite3_prepare_v2(p->dbv, zStmt, -1, &pStmt, &zStmt); + if( rc==SQLITE_OK ){ + if( pStmt ){ + IdxStatement *pNew; + const char *z = sqlite3_sql(pStmt); + int n = STRLEN(z); + pNew = (IdxStatement*)idxMalloc(&rc, sizeof(IdxStatement) + n+1); + if( rc==SQLITE_OK ){ + pNew->zSql = (char*)&pNew[1]; + memcpy(pNew->zSql, z, n+1); + pNew->pNext = p->pStatement; + if( p->pStatement ) pNew->iId = p->pStatement->iId+1; + p->pStatement = pNew; } + sqlite3_finalize(pStmt); } + }else{ + idxDatabaseError(p->dbv, pzErr); } } + + if( rc!=SQLITE_OK ){ + idxScanFree(p->pScan, pScanOrig); + idxStatementFree(p->pStatement, pStmtOrig); + p->pScan = pScanOrig; + p->pStatement = pStmtOrig; + } + return rc; } -static int idxProcessOneTrigger( - sqlite3expert *p, - IdxWrite *pWrite, - char **pzErr -){ - static const char *zInt = UNIQUE_TABLE_NAME; - static const char *zDrop = "DROP TABLE " UNIQUE_TABLE_NAME; - IdxTable *pTab = pWrite->pTab; - const char *zTab = pTab->zName; - const char *zSql = - "SELECT 'CREATE TEMP' || substr(sql, 7) FROM sqlite_schema " - "WHERE tbl_name = %Q AND type IN ('table', 'trigger') " - "ORDER BY type;"; - sqlite3_stmt *pSelect = 0; - int rc = SQLITE_OK; - char *zWrite = 0; +int sqlite3_expert_analyze(sqlite3expert *p, char **pzErr){ + int rc; + IdxHashEntry *pEntry; - /* Create the table and its triggers in the temp schema */ - rc = idxPrintfPrepareStmt(p->db, &pSelect, pzErr, zSql, zTab, zTab); - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSelect) ){ - const char *zCreate = (const char*)sqlite3_column_text(pSelect, 0); - if( zCreate==0 ) continue; - rc = sqlite3_exec(p->dbv, zCreate, 0, 0, pzErr); + /* Do trigger processing to collect any extra IdxScan structures */ + rc = idxProcessTriggers(p, pzErr); + + /* Create candidate indexes within the in-memory database file */ + if( rc==SQLITE_OK ){ + rc = idxCreateCandidates(p); + }else if ( rc==SQLITE_BUSY_TIMEOUT ){ + if( pzErr ) + *pzErr = sqlite3_mprintf("Cannot find a unique index name to propose."); + return rc; } - idxFinalize(&rc, pSelect); - /* Rename the table in the temp schema to zInt */ + /* Generate the stat1 data */ if( rc==SQLITE_OK ){ - char *z = sqlite3_mprintf("ALTER TABLE temp.%Q RENAME TO %Q", zTab, zInt); - if( z==0 ){ - rc = SQLITE_NOMEM; - }else{ - rc = sqlite3_exec(p->dbv, z, 0, 0, pzErr); - sqlite3_free(z); - } + rc = idxPopulateStat1(p, pzErr); } - switch( pWrite->eOp ){ - case SQLITE_INSERT: { - int i; - zWrite = idxAppendText(&rc, zWrite, "INSERT INTO %Q VALUES(", zInt); - for(i=0; inCol; i++){ - zWrite = idxAppendText(&rc, zWrite, "%s?", i==0 ? "" : ", "); - } - zWrite = idxAppendText(&rc, zWrite, ")"); - break; - } - case SQLITE_UPDATE: { - int i; - zWrite = idxAppendText(&rc, zWrite, "UPDATE %Q SET ", zInt); - for(i=0; inCol; i++){ - zWrite = idxAppendText(&rc, zWrite, "%s%Q=?", i==0 ? "" : ", ", - pTab->aCol[i].zName - ); - } - break; - } - default: { - assert( pWrite->eOp==SQLITE_DELETE ); - if( rc==SQLITE_OK ){ - zWrite = sqlite3_mprintf("DELETE FROM %Q", zInt); - if( zWrite==0 ) rc = SQLITE_NOMEM; - } - } + /* Formulate the EXPERT_REPORT_CANDIDATES text */ + for(pEntry=p->hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ + p->zCandidates = idxAppendText(&rc, p->zCandidates, + "%s;%s%s\n", pEntry->zVal, + pEntry->zVal2 ? " -- stat1: " : "", pEntry->zVal2 + ); } + /* Figure out which of the candidate indexes are preferred by the query + ** planner and report the results to the user. */ if( rc==SQLITE_OK ){ - sqlite3_stmt *pX = 0; - rc = sqlite3_prepare_v2(p->dbv, zWrite, -1, &pX, 0); - idxFinalize(&rc, pX); - if( rc!=SQLITE_OK ){ - idxDatabaseError(p->dbv, pzErr); - } + rc = idxFindIndexes(p, pzErr); } - sqlite3_free(zWrite); if( rc==SQLITE_OK ){ - rc = sqlite3_exec(p->dbv, zDrop, 0, 0, pzErr); + p->bRun = 1; } - return rc; } -static int idxProcessTriggers(sqlite3expert *p, char **pzErr){ - int rc = SQLITE_OK; - IdxWrite *pEnd = 0; - IdxWrite *pFirst = p->pWrite; +/* +** Return the total number of statements that have been added to this +** sqlite3expert using sqlite3_expert_sql(). +*/ +int sqlite3_expert_count(sqlite3expert *p){ + int nRet = 0; + if( p->pStatement ) nRet = p->pStatement->iId+1; + return nRet; +} - while( rc==SQLITE_OK && pFirst!=pEnd ){ - IdxWrite *pIter; - for(pIter=pFirst; rc==SQLITE_OK && pIter!=pEnd; pIter=pIter->pNext){ - rc = idxProcessOneTrigger(p, pIter, pzErr); - } - pEnd = pFirst; - pFirst = p->pWrite; +/* +** Return a component of the report. +*/ +const char *sqlite3_expert_report(sqlite3expert *p, int iStmt, int eReport){ + const char *zRet = 0; + IdxStatement *pStmt; + + if( p->bRun==0 ) return 0; + for(pStmt=p->pStatement; pStmt && pStmt->iId!=iStmt; pStmt=pStmt->pNext); + switch( eReport ){ + case EXPERT_REPORT_SQL: + if( pStmt ) zRet = pStmt->zSql; + break; + case EXPERT_REPORT_INDEXES: + if( pStmt ) zRet = pStmt->zIdx; + break; + case EXPERT_REPORT_PLAN: + if( pStmt ) zRet = pStmt->zEQP; + break; + case EXPERT_REPORT_CANDIDATES: + zRet = p->zCandidates; + break; } + return zRet; +} - return rc; +/* +** Free an sqlite3expert object. +*/ +void sqlite3_expert_destroy(sqlite3expert *p){ + if( p ){ + sqlite3_close(p->dbm); + sqlite3_close(p->dbv); + idxScanFree(p->pScan, 0); + idxStatementFree(p->pStatement, 0); + idxTableFree(p->pTable); + idxWriteFree(p->pWrite); + idxHashClear(&p->hIdx); + sqlite3_free(p->zCandidates); + sqlite3_free(p); + } } +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ -static int idxCreateVtabSchema(sqlite3expert *p, char **pzErrmsg){ - int rc = idxRegisterVtab(p); - sqlite3_stmt *pSchema = 0; +/************************* End ../ext/expert/sqlite3expert.c ********************/ - /* For each table in the main db schema: - ** - ** 1) Add an entry to the p->pTable list, and - ** 2) Create the equivalent virtual table in dbv. - */ - rc = idxPrepareStmt(p->db, &pSchema, pzErrmsg, - "SELECT type, name, sql, 1 FROM sqlite_schema " - "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' " - " UNION ALL " - "SELECT type, name, sql, 2 FROM sqlite_schema " - "WHERE type = 'trigger'" - " AND tbl_name IN(SELECT name FROM sqlite_schema WHERE type = 'view') " - "ORDER BY 4, 1" - ); - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSchema) ){ - const char *zType = (const char*)sqlite3_column_text(pSchema, 0); - const char *zName = (const char*)sqlite3_column_text(pSchema, 1); - const char *zSql = (const char*)sqlite3_column_text(pSchema, 2); +/************************* Begin ../ext/intck/sqlite3intck.h ******************/ +/* +** 2024-02-08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ - if( zType==0 || zName==0 ) continue; - if( zType[0]=='v' || zType[1]=='r' ){ - if( zSql ) rc = sqlite3_exec(p->dbv, zSql, 0, 0, pzErrmsg); - }else{ - IdxTable *pTab; - rc = idxGetTableInfo(p->db, zName, &pTab, pzErrmsg); - if( rc==SQLITE_OK ){ - int i; - char *zInner = 0; - char *zOuter = 0; - pTab->pNext = p->pTable; - p->pTable = pTab; +/* +** Incremental Integrity-Check Extension +** ------------------------------------- +** +** This module contains code to check whether or not an SQLite database +** is well-formed or corrupt. This is the same task as performed by SQLite's +** built-in "PRAGMA integrity_check" command. This module differs from +** "PRAGMA integrity_check" in that: +** +** + It is less thorough - this module does not detect certain types +** of corruption that are detected by the PRAGMA command. However, +** it does detect all kinds of corruption that are likely to cause +** errors in SQLite applications. +** +** + It is slower. Sometimes up to three times slower. +** +** + It allows integrity-check operations to be split into multiple +** transactions, so that the database does not need to be read-locked +** for the duration of the integrity-check. +** +** One way to use the API to run integrity-check on the "main" database +** of handle db is: +** +** int rc = SQLITE_OK; +** sqlite3_intck *p = 0; +** +** sqlite3_intck_open(db, "main", &p); +** while( SQLITE_OK==sqlite3_intck_step(p) ){ +** const char *zMsg = sqlite3_intck_message(p); +** if( zMsg ) printf("corruption: %s\n", zMsg); +** } +** rc = sqlite3_intck_error(p, &zErr); +** if( rc!=SQLITE_OK ){ +** printf("error occured (rc=%d), (errmsg=%s)\n", rc, zErr); +** } +** sqlite3_intck_close(p); +** +** Usually, the sqlite3_intck object opens a read transaction within the +** first call to sqlite3_intck_step() and holds it open until the +** integrity-check is complete. However, if sqlite3_intck_unlock() is +** called, the read transaction is ended and a new read transaction opened +** by the subsequent call to sqlite3_intck_step(). +*/ - /* The statement the vtab will pass to sqlite3_declare_vtab() */ - zInner = idxAppendText(&rc, 0, "CREATE TABLE x("); - for(i=0; inCol; i++){ - zInner = idxAppendText(&rc, zInner, "%s%Q COLLATE %s", - (i==0 ? "" : ", "), pTab->aCol[i].zName, pTab->aCol[i].zColl - ); - } - zInner = idxAppendText(&rc, zInner, ")"); +#ifndef _SQLITE_INTCK_H +#define _SQLITE_INTCK_H - /* The CVT statement to create the vtab */ - zOuter = idxAppendText(&rc, 0, - "CREATE VIRTUAL TABLE %Q USING expert(%Q)", zName, zInner - ); - if( rc==SQLITE_OK ){ - rc = sqlite3_exec(p->dbv, zOuter, 0, 0, pzErrmsg); - } - sqlite3_free(zInner); - sqlite3_free(zOuter); - } - } - } - idxFinalize(&rc, pSchema); - return rc; -} +/* #include "sqlite3.h" */ + +#ifdef __cplusplus +extern "C" { +#endif -struct IdxSampleCtx { - int iTarget; - double target; /* Target nRet/nRow value */ - double nRow; /* Number of rows seen */ - double nRet; /* Number of rows returned */ -}; +/* +** An ongoing incremental integrity-check operation is represented by an +** opaque pointer of the following type. +*/ +typedef struct sqlite3_intck sqlite3_intck; -static void idxSampleFunc( - sqlite3_context *pCtx, - int argc, - sqlite3_value **argv -){ - struct IdxSampleCtx *p = (struct IdxSampleCtx*)sqlite3_user_data(pCtx); - int bRet; +/* +** Open a new incremental integrity-check object. If successful, populate +** output variable (*ppOut) with the new object handle and return SQLITE_OK. +** Or, if an error occurs, set (*ppOut) to NULL and return an SQLite error +** code (e.g. SQLITE_NOMEM). +** +** The integrity-check will be conducted on database zDb (which must be "main", +** "temp", or the name of an attached database) of database handle db. Once +** this function has been called successfully, the caller should not use +** database handle db until the integrity-check object has been destroyed +** using sqlite3_intck_close(). +*/ +int sqlite3_intck_open( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Database name ("main", "temp" etc.) */ + sqlite3_intck **ppOut /* OUT: New sqlite3_intck handle */ +); - (void)argv; - assert( argc==0 ); - if( p->nRow==0.0 ){ - bRet = 1; - }else{ - bRet = (p->nRet / p->nRow) <= p->target; - if( bRet==0 ){ - unsigned short rnd; - sqlite3_randomness(2, (void*)&rnd); - bRet = ((int)rnd % 100) <= p->iTarget; - } - } +/* +** Close and release all resources associated with a handle opened by an +** earlier call to sqlite3_intck_open(). The results of using an +** integrity-check handle after it has been passed to this function are +** undefined. +*/ +void sqlite3_intck_close(sqlite3_intck *pCk); - sqlite3_result_int(pCtx, bRet); - p->nRow += 1.0; - p->nRet += (double)bRet; -} +/* +** Do the next step of the integrity-check operation specified by the handle +** passed as the only argument. This function returns SQLITE_DONE if the +** integrity-check operation is finished, or an SQLite error code if +** an error occurs, or SQLITE_OK if no error occurs but the integrity-check +** is not finished. It is not considered an error if database corruption +** is encountered. +** +** Following a successful call to sqlite3_intck_step() (one that returns +** SQLITE_OK), sqlite3_intck_message() returns a non-NULL value if +** corruption was detected in the db. +** +** If an error occurs and a value other than SQLITE_OK or SQLITE_DONE is +** returned, then the integrity-check handle is placed in an error state. +** In this state all subsequent calls to sqlite3_intck_step() or +** sqlite3_intck_unlock() will immediately return the same error. The +** sqlite3_intck_error() method may be used to obtain an English language +** error message in this case. +*/ +int sqlite3_intck_step(sqlite3_intck *pCk); -struct IdxRemCtx { - int nSlot; - struct IdxRemSlot { - int eType; /* SQLITE_NULL, INTEGER, REAL, TEXT, BLOB */ - i64 iVal; /* SQLITE_INTEGER value */ - double rVal; /* SQLITE_FLOAT value */ - int nByte; /* Bytes of space allocated at z */ - int n; /* Size of buffer z */ - char *z; /* SQLITE_TEXT/BLOB value */ - } aSlot[1]; -}; +/* +** If the previous call to sqlite3_intck_step() encountered corruption +** within the database, then this function returns a pointer to a buffer +** containing a nul-terminated string describing the corruption in +** English. If the previous call to sqlite3_intck_step() did not encounter +** corruption, or if there was no previous call, this function returns +** NULL. +*/ +const char *sqlite3_intck_message(sqlite3_intck *pCk); /* -** Implementation of scalar function rem(). +** Close any read-transaction opened by an earlier call to +** sqlite3_intck_step(). Any subsequent call to sqlite3_intck_step() will +** open a new transaction. Return SQLITE_OK if successful, or an SQLite error +** code otherwise. +** +** If an error occurs, then the integrity-check handle is placed in an error +** state. In this state all subsequent calls to sqlite3_intck_step() or +** sqlite3_intck_unlock() will immediately return the same error. The +** sqlite3_intck_error() method may be used to obtain an English language +** error message in this case. */ -static void idxRemFunc( - sqlite3_context *pCtx, - int argc, - sqlite3_value **argv -){ - struct IdxRemCtx *p = (struct IdxRemCtx*)sqlite3_user_data(pCtx); - struct IdxRemSlot *pSlot; - int iSlot; - assert( argc==2 ); +int sqlite3_intck_unlock(sqlite3_intck *pCk); - iSlot = sqlite3_value_int(argv[0]); - assert( iSlot<=p->nSlot ); - pSlot = &p->aSlot[iSlot]; +/* +** If an error has occurred in an earlier call to sqlite3_intck_step() +** or sqlite3_intck_unlock(), then this method returns the associated +** SQLite error code. Additionally, if pzErr is not NULL, then (*pzErr) +** may be set to point to a nul-terminated string containing an English +** language error message. Or, if no error message is available, to +** NULL. +** +** If no error has occurred within sqlite3_intck_step() or +** sqlite_intck_unlock() calls on the handle passed as the first argument, +** then SQLITE_OK is returned and (*pzErr) set to NULL. +*/ +int sqlite3_intck_error(sqlite3_intck *pCk, const char **pzErr); - switch( pSlot->eType ){ - case SQLITE_NULL: - /* no-op */ - break; +/* +** This API is used for testing only. It returns the full-text of an SQL +** statement used to test object zObj, which may be a table or index. +** The returned buffer is valid until the next call to either this function +** or sqlite3_intck_close() on the same sqlite3_intck handle. +*/ +const char *sqlite3_intck_test_sql(sqlite3_intck *pCk, const char *zObj); - case SQLITE_INTEGER: - sqlite3_result_int64(pCtx, pSlot->iVal); - break; - case SQLITE_FLOAT: - sqlite3_result_double(pCtx, pSlot->rVal); - break; +#ifdef __cplusplus +} /* end of the 'extern "C"' block */ +#endif - case SQLITE_BLOB: - sqlite3_result_blob(pCtx, pSlot->z, pSlot->n, SQLITE_TRANSIENT); - break; +#endif /* ifndef _SQLITE_INTCK_H */ - case SQLITE_TEXT: - sqlite3_result_text(pCtx, pSlot->z, pSlot->n, SQLITE_TRANSIENT); - break; - } +/************************* End ../ext/intck/sqlite3intck.h ********************/ +/************************* Begin ../ext/intck/sqlite3intck.c ******************/ +/* +** 2024-02-08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ - pSlot->eType = sqlite3_value_type(argv[1]); - switch( pSlot->eType ){ - case SQLITE_NULL: - /* no-op */ - break; +/* #include "sqlite3intck.h" */ +#include +#include - case SQLITE_INTEGER: - pSlot->iVal = sqlite3_value_int64(argv[1]); - break; +#include +#include - case SQLITE_FLOAT: - pSlot->rVal = sqlite3_value_double(argv[1]); - break; +/* +** nKeyVal: +** The number of values that make up the 'key' for the current pCheck +** statement. +** +** rc: +** Error code returned by most recent sqlite3_intck_step() or +** sqlite3_intck_unlock() call. This is set to SQLITE_DONE when +** the integrity-check operation is finished. +** +** zErr: +** If the object has entered the error state, this is the error message. +** Is freed using sqlite3_free() when the object is deleted. +** +** zTestSql: +** The value returned by the most recent call to sqlite3_intck_testsql(). +** Each call to testsql() frees the previous zTestSql value (using +** sqlite3_free()) and replaces it with the new value it will return. +*/ +struct sqlite3_intck { + sqlite3 *db; + const char *zDb; /* Copy of zDb parameter to _open() */ + char *zObj; /* Current object. Or NULL. */ - case SQLITE_BLOB: - case SQLITE_TEXT: { - int nByte = sqlite3_value_bytes(argv[1]); - const void *pData = 0; - if( nByte>pSlot->nByte ){ - char *zNew = (char*)sqlite3_realloc(pSlot->z, nByte*2); - if( zNew==0 ){ - sqlite3_result_error_nomem(pCtx); - return; - } - pSlot->nByte = nByte*2; - pSlot->z = zNew; - } - pSlot->n = nByte; - if( pSlot->eType==SQLITE_BLOB ){ - pData = sqlite3_value_blob(argv[1]); - if( pData ) memcpy(pSlot->z, pData, nByte); - }else{ - pData = sqlite3_value_text(argv[1]); - memcpy(pSlot->z, pData, nByte); - } - break; + sqlite3_stmt *pCheck; /* Current check statement */ + char *zKey; + int nKeyVal; + + char *zMessage; + int bCorruptSchema; + + int rc; /* Error code */ + char *zErr; /* Error message */ + char *zTestSql; /* Returned by sqlite3_intck_test_sql() */ +}; + + +/* +** Some error has occurred while using database p->db. Save the error message +** and error code currently held by the database handle in p->rc and p->zErr. +*/ +static void intckSaveErrmsg(sqlite3_intck *p){ + p->rc = sqlite3_errcode(p->db); + sqlite3_free(p->zErr); + p->zErr = sqlite3_mprintf("%s", sqlite3_errmsg(p->db)); +} + +/* +** If the handle passed as the first argument is already in the error state, +** then this function is a no-op (returns NULL immediately). Otherwise, if an +** error occurs within this function, it leaves an error in said handle. +** +** Otherwise, this function attempts to prepare SQL statement zSql and +** return the resulting statement handle to the user. +*/ +static sqlite3_stmt *intckPrepare(sqlite3_intck *p, const char *zSql){ + sqlite3_stmt *pRet = 0; + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_prepare_v2(p->db, zSql, -1, &pRet, 0); + if( p->rc!=SQLITE_OK ){ + intckSaveErrmsg(p); + assert( pRet==0 ); } } + return pRet; } -static int idxLargestIndex(sqlite3 *db, int *pnMax, char **pzErr){ - int rc = SQLITE_OK; - const char *zMax = - "SELECT max(i.seqno) FROM " - " sqlite_schema AS s, " - " pragma_index_list(s.name) AS l, " - " pragma_index_info(l.name) AS i " - "WHERE s.type = 'table'"; - sqlite3_stmt *pMax = 0; - - *pnMax = 0; - rc = idxPrepareStmt(db, &pMax, pzErr, zMax); - if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){ - *pnMax = sqlite3_column_int(pMax, 0) + 1; +/* +** If the handle passed as the first argument is already in the error state, +** then this function is a no-op (returns NULL immediately). Otherwise, if an +** error occurs within this function, it leaves an error in said handle. +** +** Otherwise, this function treats argument zFmt as a printf() style format +** string. It formats it according to the trailing arguments and then +** attempts to prepare the results and return the resulting prepared +** statement. +*/ +static sqlite3_stmt *intckPrepareFmt(sqlite3_intck *p, const char *zFmt, ...){ + sqlite3_stmt *pRet = 0; + va_list ap; + char *zSql = 0; + va_start(ap, zFmt); + zSql = sqlite3_vmprintf(zFmt, ap); + if( p->rc==SQLITE_OK && zSql==0 ){ + p->rc = SQLITE_NOMEM; } - idxFinalize(&rc, pMax); - - return rc; + pRet = intckPrepare(p, zSql); + sqlite3_free(zSql); + va_end(ap); + return pRet; } -static int idxPopulateOneStat1( - sqlite3expert *p, - sqlite3_stmt *pIndexXInfo, - sqlite3_stmt *pWriteStat, - const char *zTab, - const char *zIdx, - char **pzErr -){ - char *zCols = 0; - char *zOrder = 0; - char *zQuery = 0; - int nCol = 0; - int i; - sqlite3_stmt *pQuery = 0; - int *aStat = 0; - int rc = SQLITE_OK; +/* +** Finalize SQL statement pStmt. If an error occurs and the handle passed +** as the first argument does not already contain an error, store the +** error in the handle. +*/ +static void intckFinalize(sqlite3_intck *p, sqlite3_stmt *pStmt){ + int rc = sqlite3_finalize(pStmt); + if( p->rc==SQLITE_OK && rc!=SQLITE_OK ){ + intckSaveErrmsg(p); + } +} - assert( p->iSample>0 ); +/* +** If there is already an error in handle p, return it. Otherwise, call +** sqlite3_step() on the statement handle and return that value. +*/ +static int intckStep(sqlite3_intck *p, sqlite3_stmt *pStmt){ + if( p->rc ) return p->rc; + return sqlite3_step(pStmt); +} - /* Formulate the query text */ - sqlite3_bind_text(pIndexXInfo, 1, zIdx, -1, SQLITE_STATIC); - while( SQLITE_OK==rc && SQLITE_ROW==sqlite3_step(pIndexXInfo) ){ - const char *zComma = zCols==0 ? "" : ", "; - const char *zName = (const char*)sqlite3_column_text(pIndexXInfo, 0); - const char *zColl = (const char*)sqlite3_column_text(pIndexXInfo, 1); - zCols = idxAppendText(&rc, zCols, - "%sx.%Q IS rem(%d, x.%Q) COLLATE %s", zComma, zName, nCol, zName, zColl - ); - zOrder = idxAppendText(&rc, zOrder, "%s%d", zComma, ++nCol); - } - sqlite3_reset(pIndexXInfo); - if( rc==SQLITE_OK ){ - if( p->iSample==100 ){ - zQuery = sqlite3_mprintf( - "SELECT %s FROM %Q x ORDER BY %s", zCols, zTab, zOrder - ); - }else{ - zQuery = sqlite3_mprintf( - "SELECT %s FROM temp."UNIQUE_TABLE_NAME" x ORDER BY %s", zCols, zOrder - ); - } - } - sqlite3_free(zCols); - sqlite3_free(zOrder); +/* +** Execute SQL statement zSql. There is no way to obtain any results +** returned by the statement. This function uses the sqlite3_intck error +** code convention. +*/ +static void intckExec(sqlite3_intck *p, const char *zSql){ + sqlite3_stmt *pStmt = 0; + pStmt = intckPrepare(p, zSql); + intckStep(p, pStmt); + intckFinalize(p, pStmt); +} - /* Formulate the query text */ - if( rc==SQLITE_OK ){ - sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); - rc = idxPrepareStmt(dbrem, &pQuery, pzErr, zQuery); +/* +** A wrapper around sqlite3_mprintf() that uses the sqlite3_intck error +** code convention. +*/ +static char *intckMprintf(sqlite3_intck *p, const char *zFmt, ...){ + va_list ap; + char *zRet = 0; + va_start(ap, zFmt); + zRet = sqlite3_vmprintf(zFmt, ap); + if( p->rc==SQLITE_OK ){ + if( zRet==0 ){ + p->rc = SQLITE_NOMEM; + } + }else{ + sqlite3_free(zRet); + zRet = 0; } - sqlite3_free(zQuery); + return zRet; +} - if( rc==SQLITE_OK ){ - aStat = (int*)idxMalloc(&rc, sizeof(int)*(nCol+1)); +/* +** This is used by sqlite3_intck_unlock() to save the vector key value +** required to restart the current pCheck query as a nul-terminated string +** in p->zKey. +*/ +static void intckSaveKey(sqlite3_intck *p){ + int ii; + char *zSql = 0; + sqlite3_stmt *pStmt = 0; + sqlite3_stmt *pXinfo = 0; + const char *zDir = 0; + + assert( p->pCheck ); + assert( p->zKey==0 ); + + pXinfo = intckPrepareFmt(p, + "SELECT group_concat(desc, '') FROM %Q.sqlite_schema s, " + "pragma_index_xinfo(%Q, %Q) " + "WHERE s.type='index' AND s.name=%Q", + p->zDb, p->zObj, p->zDb, p->zObj + ); + if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXinfo) ){ + zDir = (const char*)sqlite3_column_text(pXinfo, 0); } - if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pQuery) ){ - IdxHashEntry *pEntry; - char *zStat = 0; - for(i=0; i<=nCol; i++) aStat[i] = 1; - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pQuery) ){ - aStat[0]++; - for(i=0; inKeyVal; ii++){ + zSql = intckMprintf(p, "%z%squote(?)", zSql, zSep); + zSep = " || ', ' || "; + } + zSql = intckMprintf(p, "%z || ')'", zSql); + }else{ + + /* Object is an index. */ + assert( p->nKeyVal>1 ); + for(ii=p->nKeyVal; ii>0; ii--){ + int bLastIsDesc = zDir[ii-1]=='1'; + int bLastIsNull = sqlite3_column_type(p->pCheck, ii)==SQLITE_NULL; + const char *zLast = sqlite3_column_name(p->pCheck, ii); + char *zLhs = 0; + char *zRhs = 0; + char *zWhere = 0; + + if( bLastIsNull ){ + if( bLastIsDesc ) continue; + zWhere = intckMprintf(p, "'%s IS NOT NULL'", zLast); + }else{ + const char *zOp = bLastIsDesc ? "<" : ">"; + zWhere = intckMprintf(p, "'%s %s ' || quote(?%d)", zLast, zOp, ii); + } + + if( ii>1 ){ + const char *zLhsSep = ""; + const char *zRhsSep = ""; + int jj; + for(jj=0; jjpCheck,jj+1); + zLhs = intckMprintf(p, "%z%s%s", zLhs, zLhsSep, zAlias); + zRhs = intckMprintf(p, "%z%squote(?%d)", zRhs, zRhsSep, jj+1); + zLhsSep = ","; + zRhsSep = " || ',' || "; + } + + zWhere = intckMprintf(p, + "'(%z) IS (' || %z || ') AND ' || %z", + zLhs, zRhs, zWhere); } - } + zWhere = intckMprintf(p, "'WHERE ' || %z", zWhere); - if( rc==SQLITE_OK ){ - sqlite3_bind_text(pWriteStat, 1, zTab, -1, SQLITE_STATIC); - sqlite3_bind_text(pWriteStat, 2, zIdx, -1, SQLITE_STATIC); - sqlite3_bind_text(pWriteStat, 3, zStat, -1, SQLITE_STATIC); - sqlite3_step(pWriteStat); - rc = sqlite3_reset(pWriteStat); + zSql = intckMprintf(p, "%z%s(quote( %z ) )", + zSql, + (zSql==0 ? "VALUES" : ",\n "), + zWhere + ); } + zSql = intckMprintf(p, + "WITH wc(q) AS (\n%z\n)" + "SELECT 'VALUES' || group_concat('(' || q || ')', ',\n ') FROM wc" + , zSql + ); + } - pEntry = idxHashFind(&p->hIdx, zIdx, STRLEN(zIdx)); - if( pEntry ){ - assert( pEntry->zVal2==0 ); - pEntry->zVal2 = zStat; - }else{ - sqlite3_free(zStat); + pStmt = intckPrepare(p, zSql); + if( p->rc==SQLITE_OK ){ + for(ii=0; iinKeyVal; ii++){ + sqlite3_bind_value(pStmt, ii+1, sqlite3_column_value(p->pCheck, ii+1)); + } + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + p->zKey = intckMprintf(p,"%s",(const char*)sqlite3_column_text(pStmt, 0)); } + intckFinalize(p, pStmt); } - sqlite3_free(aStat); - idxFinalize(&rc, pQuery); - return rc; + sqlite3_free(zSql); + intckFinalize(p, pXinfo); } -static int idxBuildSampleTable(sqlite3expert *p, const char *zTab){ - int rc; - char *zSql; +/* +** Find the next database object (table or index) to check. If successful, +** set sqlite3_intck.zObj to point to a nul-terminated buffer containing +** the object's name before returning. +*/ +static void intckFindObject(sqlite3_intck *p){ + sqlite3_stmt *pStmt = 0; + char *zPrev = p->zObj; + p->zObj = 0; + + assert( p->rc==SQLITE_OK ); + assert( p->pCheck==0 ); + + pStmt = intckPrepareFmt(p, + "WITH tables(table_name) AS (" + " SELECT name" + " FROM %Q.sqlite_schema WHERE (type='table' OR type='index') AND rootpage" + " UNION ALL " + " SELECT 'sqlite_schema'" + ")" + "SELECT table_name FROM tables " + "WHERE ?1 IS NULL OR table_name%s?1 " + "ORDER BY 1" + , p->zDb, (p->zKey ? ">=" : ">") + ); - rc = sqlite3_exec(p->dbv,"DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); - if( rc!=SQLITE_OK ) return rc; + if( p->rc==SQLITE_OK ){ + sqlite3_bind_text(pStmt, 1, zPrev, -1, SQLITE_TRANSIENT); + if( sqlite3_step(pStmt)==SQLITE_ROW ){ + p->zObj = intckMprintf(p,"%s",(const char*)sqlite3_column_text(pStmt, 0)); + } + } + intckFinalize(p, pStmt); - zSql = sqlite3_mprintf( - "CREATE TABLE temp." UNIQUE_TABLE_NAME " AS SELECT * FROM %Q", zTab - ); - if( zSql==0 ) return SQLITE_NOMEM; - rc = sqlite3_exec(p->dbv, zSql, 0, 0, 0); - sqlite3_free(zSql); + /* If this is a new object, ensure the previous key value is cleared. */ + if( sqlite3_stricmp(p->zObj, zPrev) ){ + sqlite3_free(p->zKey); + p->zKey = 0; + } - return rc; + sqlite3_free(zPrev); } /* -** This function is called as part of sqlite3_expert_analyze(). Candidate -** indexes have already been created in database sqlite3expert.dbm, this -** function populates sqlite_stat1 table in the same database. +** Return the size in bytes of the first token in nul-terminated buffer z. +** For the purposes of this call, a token is either: ** -** The stat1 data is generated by querying the +** * a quoted SQL string, +* * a contiguous series of ascii alphabet characters, or +* * any other single byte. */ -static int idxPopulateStat1(sqlite3expert *p, char **pzErr){ - int rc = SQLITE_OK; - int nMax =0; - struct IdxRemCtx *pCtx = 0; - struct IdxSampleCtx samplectx; - int i; - i64 iPrev = -100000; - sqlite3_stmt *pAllIndex = 0; - sqlite3_stmt *pIndexXInfo = 0; - sqlite3_stmt *pWrite = 0; +static int intckGetToken(const char *z){ + char c = z[0]; + int iRet = 1; + if( c=='\'' || c=='"' || c=='`' ){ + while( 1 ){ + if( z[iRet]==c ){ + iRet++; + if( z[iRet]!=c ) break; + } + iRet++; + } + } + else if( c=='[' ){ + while( z[iRet++]!=']' && z[iRet] ); + } + else if( (c>='A' && c<='Z') || (c>='a' && c<='z') ){ + while( (z[iRet]>='A' && z[iRet]<='Z') || (z[iRet]>='a' && z[iRet]<='z') ){ + iRet++; + } + } - const char *zAllIndex = - "SELECT s.rowid, s.name, l.name FROM " - " sqlite_schema AS s, " - " pragma_index_list(s.name) AS l " - "WHERE s.type = 'table'"; - const char *zIndexXInfo = - "SELECT name, coll FROM pragma_index_xinfo(?) WHERE key"; - const char *zWrite = "INSERT INTO sqlite_stat1 VALUES(?, ?, ?)"; + return iRet; +} - /* If iSample==0, no sqlite_stat1 data is required. */ - if( p->iSample==0 ) return SQLITE_OK; +/* +** Return true if argument c is an ascii whitespace character. +*/ +static int intckIsSpace(char c){ + return (c==' ' || c=='\t' || c=='\n' || c=='\r'); +} - rc = idxLargestIndex(p->dbm, &nMax, pzErr); - if( nMax<=0 || rc!=SQLITE_OK ) return rc; +/* +** Argument z points to the text of a CREATE INDEX statement. This function +** identifies the part of the text that contains either the index WHERE +** clause (if iCol<0) or the iCol'th column of the index. +** +** If (iCol<0), the identified fragment does not include the "WHERE" keyword, +** only the expression that follows it. If (iCol>=0) then the identified +** fragment does not include any trailing sort-order keywords - "ASC" or +** "DESC". +** +** If the CREATE INDEX statement does not contain the requested field or +** clause, NULL is returned and (*pnByte) is set to 0. Otherwise, a pointer to +** the identified fragment is returned and output parameter (*pnByte) set +** to its size in bytes. +*/ +static const char *intckParseCreateIndex(const char *z, int iCol, int *pnByte){ + int iOff = 0; + int iThisCol = 0; + int iStart = 0; + int nOpen = 0; - rc = sqlite3_exec(p->dbm, "ANALYZE; PRAGMA writable_schema=1", 0, 0, 0); + const char *zRet = 0; + int nRet = 0; - if( rc==SQLITE_OK ){ - int nByte = sizeof(struct IdxRemCtx) + (sizeof(struct IdxRemSlot) * nMax); - pCtx = (struct IdxRemCtx*)idxMalloc(&rc, nByte); - } + int iEndOfCol = 0; + + /* Skip forward until the first "(" token */ + while( z[iOff]!='(' ){ + iOff += intckGetToken(&z[iOff]); + if( z[iOff]=='\0' ) return 0; + } + assert( z[iOff]=='(' ); + + nOpen = 1; + iOff++; + iStart = iOff; + while( z[iOff] ){ + const char *zToken = &z[iOff]; + int nToken = 0; + + /* Check if this is the end of the current column - either a "," or ")" + ** when nOpen==1. */ + if( nOpen==1 ){ + if( z[iOff]==',' || z[iOff]==')' ){ + if( iCol==iThisCol ){ + int iEnd = iEndOfCol ? iEndOfCol : iOff; + nRet = (iEnd - iStart); + zRet = &z[iStart]; + break; + } + iStart = iOff+1; + while( intckIsSpace(z[iStart]) ) iStart++; + iThisCol++; + } + if( z[iOff]==')' ) break; + } + if( z[iOff]=='(' ) nOpen++; + if( z[iOff]==')' ) nOpen--; + nToken = intckGetToken(zToken); - if( rc==SQLITE_OK ){ - sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); - rc = sqlite3_create_function( - dbrem, "rem", 2, SQLITE_UTF8, (void*)pCtx, idxRemFunc, 0, 0 - ); + if( (nToken==3 && 0==sqlite3_strnicmp(zToken, "ASC", nToken)) + || (nToken==4 && 0==sqlite3_strnicmp(zToken, "DESC", nToken)) + ){ + iEndOfCol = iOff; + }else if( 0==intckIsSpace(zToken[0]) ){ + iEndOfCol = 0; + } + + iOff += nToken; } - if( rc==SQLITE_OK ){ - rc = sqlite3_create_function( - p->db, "sample", 0, SQLITE_UTF8, (void*)&samplectx, idxSampleFunc, 0, 0 - ); + + /* iStart is now the byte offset of 1 byte passed the final ')' in the + ** CREATE INDEX statement. Try to find a WHERE clause to return. */ + while( zRet==0 && z[iOff] ){ + int n = intckGetToken(&z[iOff]); + if( n==5 && 0==sqlite3_strnicmp(&z[iOff], "where", 5) ){ + zRet = &z[iOff+5]; + nRet = (int)strlen(zRet); + } + iOff += n; } - if( rc==SQLITE_OK ){ - pCtx->nSlot = nMax+1; - rc = idxPrepareStmt(p->dbm, &pAllIndex, pzErr, zAllIndex); + /* Trim any whitespace from the start and end of the returned string. */ + if( zRet ){ + while( intckIsSpace(zRet[0]) ){ + nRet--; + zRet++; + } + while( nRet>0 && intckIsSpace(zRet[nRet-1]) ) nRet--; } - if( rc==SQLITE_OK ){ - rc = idxPrepareStmt(p->dbm, &pIndexXInfo, pzErr, zIndexXInfo); + + *pnByte = nRet; + return zRet; +} + +/* +** User-defined SQL function wrapper for intckParseCreateIndex(): +** +** SELECT parse_create_index(, ); +*/ +static void intckParseCreateIndexFunc( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + const char *zSql = (const char*)sqlite3_value_text(apVal[0]); + int idx = sqlite3_value_int(apVal[1]); + const char *zRes = 0; + int nRes = 0; + + assert( nVal==2 ); + if( zSql ){ + zRes = intckParseCreateIndex(zSql, idx, &nRes); } - if( rc==SQLITE_OK ){ - rc = idxPrepareStmt(p->dbm, &pWrite, pzErr, zWrite); + sqlite3_result_text(pCtx, zRes, nRes, SQLITE_TRANSIENT); +} + +/* +** Return true if sqlite3_intck.db has automatic indexes enabled, false +** otherwise. +*/ +static int intckGetAutoIndex(sqlite3_intck *p){ + int bRet = 0; + sqlite3_stmt *pStmt = 0; + pStmt = intckPrepare(p, "PRAGMA automatic_index"); + if( SQLITE_ROW==intckStep(p, pStmt) ){ + bRet = sqlite3_column_int(pStmt, 0); } + intckFinalize(p, pStmt); + return bRet; +} - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pAllIndex) ){ - i64 iRowid = sqlite3_column_int64(pAllIndex, 0); - const char *zTab = (const char*)sqlite3_column_text(pAllIndex, 1); - const char *zIdx = (const char*)sqlite3_column_text(pAllIndex, 2); - if( zTab==0 || zIdx==0 ) continue; - if( p->iSample<100 && iPrev!=iRowid ){ - samplectx.target = (double)p->iSample / 100.0; - samplectx.iTarget = p->iSample; - samplectx.nRow = 0.0; - samplectx.nRet = 0.0; - rc = idxBuildSampleTable(p, zTab); - if( rc!=SQLITE_OK ) break; - } - rc = idxPopulateOneStat1(p, pIndexXInfo, pWrite, zTab, zIdx, pzErr); - iPrev = iRowid; +/* +** Return true if zObj is an index, or false otherwise. +*/ +static int intckIsIndex(sqlite3_intck *p, const char *zObj){ + int bRet = 0; + sqlite3_stmt *pStmt = 0; + pStmt = intckPrepareFmt(p, + "SELECT 1 FROM %Q.sqlite_schema WHERE name=%Q AND type='index'", + p->zDb, zObj + ); + if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + bRet = 1; } - if( rc==SQLITE_OK && p->iSample<100 ){ - rc = sqlite3_exec(p->dbv, - "DROP TABLE IF EXISTS temp." UNIQUE_TABLE_NAME, 0,0,0 + intckFinalize(p, pStmt); + return bRet; +} + +/* +** Return a pointer to a nul-terminated buffer containing the SQL statement +** used to check database object zObj (a table or index) for corruption. +** If parameter zPrev is not NULL, then it must be a string containing the +** vector key required to restart the check where it left off last time. +** If pnKeyVal is not NULL, then (*pnKeyVal) is set to the number of +** columns in the vector key value for the specified object. +** +** This function uses the sqlite3_intck error code convention. +*/ +static char *intckCheckObjectSql( + sqlite3_intck *p, /* Integrity check object */ + const char *zObj, /* Object (table or index) to scan */ + const char *zPrev, /* Restart key vector, if any */ + int *pnKeyVal /* OUT: Number of key-values for this scan */ +){ + char *zRet = 0; + sqlite3_stmt *pStmt = 0; + int bAutoIndex = 0; + int bIsIndex = 0; + + const char *zCommon = + /* Relation without_rowid also contains just one row. Column "b" is + ** set to true if the table being examined is a WITHOUT ROWID table, + ** or false otherwise. */ + ", without_rowid(b) AS (" + " SELECT EXISTS (" + " SELECT 1 FROM tabname, pragma_index_list(tab, db) AS l" + " WHERE origin='pk' " + " AND NOT EXISTS (SELECT 1 FROM sqlite_schema WHERE name=l.name)" + " )" + ")" + "" + /* Table idx_cols contains 1 row for each column in each index on the + ** table being checked. Columns are: + ** + ** idx_name: Name of the index. + ** idx_ispk: True if this index is the PK of a WITHOUT ROWID table. + ** col_name: Name of indexed column, or NULL for index on expression. + ** col_expr: Indexed expression, including COLLATE clause. + ** col_alias: Alias used for column in 'intck_wrapper' table. + */ + ", idx_cols(idx_name, idx_ispk, col_name, col_expr, col_alias) AS (" + " SELECT l.name, (l.origin=='pk' AND w.b), i.name, COALESCE((" + " SELECT parse_create_index(sql, i.seqno) FROM " + " sqlite_schema WHERE name = l.name" + " ), format('\"%w\"', i.name) || ' COLLATE ' || quote(i.coll))," + " 'c' || row_number() OVER ()" + " FROM " + " tabname t," + " without_rowid w," + " pragma_index_list(t.tab, t.db) l," + " pragma_index_xinfo(l.name) i" + " WHERE i.key" + " UNION ALL" + " SELECT '', 1, '_rowid_', '_rowid_', 'r1' FROM without_rowid WHERE b=0" + ")" + "" + "" + /* + ** For a PK declared as "PRIMARY KEY(a, b) ... WITHOUT ROWID", where + ** the intck_wrapper aliases of "a" and "b" are "c1" and "c2": + ** + ** o_pk: "o.c1, o.c2" + ** i_pk: "i.'a', i.'b'" + ** ... + ** n_pk: 2 + */ + ", tabpk(db, tab, idx, o_pk, i_pk, q_pk, eq_pk, ps_pk, pk_pk, n_pk) AS (" + " WITH pkfields(f, a) AS (" + " SELECT i.col_name, i.col_alias FROM idx_cols i WHERE i.idx_ispk" + " )" + " SELECT t.db, t.tab, t.idx, " + " group_concat(a, ', '), " + " group_concat('i.'||quote(f), ', '), " + " group_concat('quote(o.'||a||')', ' || '','' || '), " + " format('(%s)==(%s)'," + " group_concat('o.'||a, ', '), " + " group_concat(format('\"%w\"', f), ', ')" + " )," + " group_concat('%s', ',')," + " group_concat('quote('||a||')', ', '), " + " count(*)" + " FROM tabname t, pkfields" + ")" + "" + ", idx(name, match_expr, partial, partial_alias, idx_ps, idx_idx) AS (" + " SELECT idx_name," + " format('(%s,%s) IS (%s,%s)', " + " group_concat(i.col_expr, ', '), i_pk," + " group_concat('o.'||i.col_alias, ', '), o_pk" + " ), " + " parse_create_index(" + " (SELECT sql FROM sqlite_schema WHERE name=idx_name), -1" + " )," + " 'cond' || row_number() OVER ()" + " , group_concat('%s', ',')" + " , group_concat('quote('||i.col_alias||')', ', ')" + " FROM tabpk t, " + " without_rowid w," + " idx_cols i" + " WHERE i.idx_ispk==0 " + " GROUP BY idx_name" + ")" + "" + ", wrapper_with(s) AS (" + " SELECT 'intck_wrapper AS (\n SELECT\n ' || (" + " WITH f(a, b) AS (" + " SELECT col_expr, col_alias FROM idx_cols" + " UNION ALL " + " SELECT partial, partial_alias FROM idx WHERE partial IS NOT NULL" + " )" + " SELECT group_concat(format('%s AS %s', a, b), ',\n ') FROM f" + " )" + " || format('\n FROM %Q.%Q ', t.db, t.tab)" + /* If the object being checked is a table, append "NOT INDEXED". + ** Otherwise, append "INDEXED BY ", and then, if the index + ** is a partial index " WHERE ". */ + " || CASE WHEN t.idx IS NULL THEN " + " 'NOT INDEXED'" + " ELSE" + " format('INDEXED BY %Q%s', t.idx, ' WHERE '||i.partial)" + " END" + " || '\n)'" + " FROM tabname t LEFT JOIN idx i ON (i.name=t.idx)" + ")" + "" + ; + + bAutoIndex = intckGetAutoIndex(p); + if( bAutoIndex ) intckExec(p, "PRAGMA automatic_index = 0"); + + bIsIndex = intckIsIndex(p, zObj); + if( bIsIndex ){ + pStmt = intckPrepareFmt(p, + /* Table idxname contains a single row. The first column, "db", contains + ** the name of the db containing the table (e.g. "main") and the second, + ** "tab", the name of the table itself. */ + "WITH tabname(db, tab, idx) AS (" + " SELECT %Q, (SELECT tbl_name FROM %Q.sqlite_schema WHERE name=%Q), %Q " + ")" + "" + ", whereclause(w_c) AS (%s)" + "" + "%s" /* zCommon */ + "" + ", case_statement(c) AS (" + " SELECT " + " 'CASE WHEN (' || group_concat(col_alias, ', ') || ', 1) IS (\n' " + " || ' SELECT ' || group_concat(col_expr, ', ') || ', 1 FROM '" + " || format('%%Q.%%Q NOT INDEXED WHERE %%s\n', t.db, t.tab, p.eq_pk)" + " || ' )\n THEN NULL\n '" + " || 'ELSE format(''surplus entry ('" + " || group_concat('%%s', ',') || ',' || p.ps_pk" + " || ') in index ' || t.idx || ''', ' " + " || group_concat('quote('||i.col_alias||')', ', ') || ', ' || p.pk_pk" + " || ')'" + " || '\n END AS error_message'" + " FROM tabname t, tabpk p, idx_cols i WHERE i.idx_name=t.idx" + ")" + "" + ", thiskey(k, n) AS (" + " SELECT group_concat(i.col_alias, ', ') || ', ' || p.o_pk, " + " count(*) + p.n_pk " + " FROM tabpk p, idx_cols i WHERE i.idx_name=p.idx" + ")" + "" + ", main_select(m, n) AS (" + " SELECT format(" + " 'WITH %%s\n' ||" + " ', idx_checker AS (\n' ||" + " ' SELECT %%s,\n' ||" + " ' %%s\n' || " + " ' FROM intck_wrapper AS o\n' ||" + " ')\n'," + " ww.s, c, t.k" + " ), t.n" + " FROM case_statement, wrapper_with ww, thiskey t" + ")" + + "SELECT m || " + " group_concat('SELECT * FROM idx_checker ' || w_c, ' UNION ALL '), n" + " FROM " + "main_select, whereclause " + , p->zDb, p->zDb, zObj, zObj + , zPrev ? zPrev : "VALUES('')", zCommon + ); + }else{ + pStmt = intckPrepareFmt(p, + /* Table tabname contains a single row. The first column, "db", contains + ** the name of the db containing the table (e.g. "main") and the second, + ** "tab", the name of the table itself. */ + "WITH tabname(db, tab, idx, prev) AS (SELECT %Q, %Q, NULL, %Q)" + "" + "%s" /* zCommon */ + + /* expr(e) contains one row for each index on table zObj. Value e + ** is set to an expression that evaluates to NULL if the required + ** entry is present in the index, or an error message otherwise. */ + ", expr(e, p) AS (" + " SELECT format('CASE WHEN EXISTS \n" + " (SELECT 1 FROM %%Q.%%Q AS i INDEXED BY %%Q WHERE %%s%%s)\n" + " THEN NULL\n" + " ELSE format(''entry (%%s,%%s) missing from index %%s'', %%s, %%s)\n" + " END\n'" + " , t.db, t.tab, i.name, i.match_expr, ' AND (' || partial || ')'," + " i.idx_ps, t.ps_pk, i.name, i.idx_idx, t.pk_pk)," + " CASE WHEN partial IS NULL THEN NULL ELSE i.partial_alias END" + " FROM tabpk t, idx i" + ")" + + ", numbered(ii, cond, e) AS (" + " SELECT 0, 'n.ii=0', 'NULL'" + " UNION ALL " + " SELECT row_number() OVER ()," + " '(n.ii='||row_number() OVER ()||COALESCE(' AND '||p||')', ')'), e" + " FROM expr" + ")" + + ", counter_with(w) AS (" + " SELECT 'WITH intck_counter(ii) AS (\n ' || " + " group_concat('SELECT '||ii, ' UNION ALL\n ') " + " || '\n)' FROM numbered" + ")" + "" + ", case_statement(c) AS (" + " SELECT 'CASE ' || " + " group_concat(format('\n WHEN %%s THEN (%%s)', cond, e), '') ||" + " '\nEND AS error_message'" + " FROM numbered" + ")" + "" + + /* This table contains a single row consisting of a single value - + ** the text of an SQL expression that may be used by the main SQL + ** statement to output an SQL literal that can be used to resume + ** the scan if it is suspended. e.g. for a rowid table, an expression + ** like: + ** + ** format('(%d,%d)', _rowid_, n.ii) + */ + ", thiskey(k, n) AS (" + " SELECT o_pk || ', ii', n_pk+1 FROM tabpk" + ")" + "" + ", whereclause(w_c) AS (" + " SELECT CASE WHEN prev!='' THEN " + " '\nWHERE (' || o_pk ||', n.ii) > ' || prev" + " ELSE ''" + " END" + " FROM tabpk, tabname" + ")" + "" + ", main_select(m, n) AS (" + " SELECT format(" + " '%%s, %%s\nSELECT %%s,\n%%s\nFROM intck_wrapper AS o" + ", intck_counter AS n%%s\nORDER BY %%s', " + " w, ww.s, c, thiskey.k, whereclause.w_c, t.o_pk" + " ), thiskey.n" + " FROM case_statement, tabpk t, counter_with, " + " wrapper_with ww, thiskey, whereclause" + ")" + + "SELECT m, n FROM main_select", + p->zDb, zObj, zPrev, zCommon ); } - idxFinalize(&rc, pAllIndex); - idxFinalize(&rc, pIndexXInfo); - idxFinalize(&rc, pWrite); - - if( pCtx ){ - for(i=0; inSlot; i++){ - sqlite3_free(pCtx->aSlot[i].z); + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + zRet = intckMprintf(p, "%s", (const char*)sqlite3_column_text(pStmt, 0)); + if( pnKeyVal ){ + *pnKeyVal = sqlite3_column_int(pStmt, 1); } - sqlite3_free(pCtx); } + intckFinalize(p, pStmt); - if( rc==SQLITE_OK ){ - rc = sqlite3_exec(p->dbm, "ANALYZE sqlite_schema", 0, 0, 0); - } - - sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); - return rc; + if( bAutoIndex ) intckExec(p, "PRAGMA automatic_index = 1"); + return zRet; } /* -** Allocate a new sqlite3expert object. +** Open a new integrity-check object. */ -sqlite3expert *sqlite3_expert_new(sqlite3 *db, char **pzErrmsg){ +int sqlite3_intck_open( + sqlite3 *db, /* Database handle to operate on */ + const char *zDbArg, /* "main", "temp" etc. */ + sqlite3_intck **ppOut /* OUT: New integrity-check handle */ +){ + sqlite3_intck *pNew = 0; int rc = SQLITE_OK; - sqlite3expert *pNew; - - pNew = (sqlite3expert*)idxMalloc(&rc, sizeof(sqlite3expert)); + const char *zDb = zDbArg ? zDbArg : "main"; + int nDb = (int)strlen(zDb); - /* Open two in-memory databases to work with. The "vtab database" (dbv) - ** will contain a virtual table corresponding to each real table in - ** the user database schema, and a copy of each view. It is used to - ** collect information regarding the WHERE, ORDER BY and other clauses - ** of the user's query. - */ - if( rc==SQLITE_OK ){ + pNew = (sqlite3_intck*)sqlite3_malloc(sizeof(*pNew) + nDb + 1); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pNew, 0, sizeof(*pNew)); pNew->db = db; - pNew->iSample = 100; - rc = sqlite3_open(":memory:", &pNew->dbv); - } - if( rc==SQLITE_OK ){ - rc = sqlite3_open(":memory:", &pNew->dbm); - if( rc==SQLITE_OK ){ - sqlite3_db_config(pNew->dbm, SQLITE_DBCONFIG_TRIGGER_EQP, 1, (int*)0); - } - } - - - /* Copy the entire schema of database [db] into [dbm]. */ - if( rc==SQLITE_OK ){ - sqlite3_stmt *pSql = 0; - rc = idxPrintfPrepareStmt(pNew->db, &pSql, pzErrmsg, - "SELECT sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%%'" - " AND sql NOT LIKE 'CREATE VIRTUAL %%'" + pNew->zDb = (const char*)&pNew[1]; + memcpy(&pNew[1], zDb, nDb+1); + rc = sqlite3_create_function(db, "parse_create_index", + 2, SQLITE_UTF8, 0, intckParseCreateIndexFunc, 0, 0 ); - while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ - const char *zSql = (const char*)sqlite3_column_text(pSql, 0); - if( zSql ) rc = sqlite3_exec(pNew->dbm, zSql, 0, 0, pzErrmsg); + if( rc!=SQLITE_OK ){ + sqlite3_intck_close(pNew); + pNew = 0; } - idxFinalize(&rc, pSql); - } - - /* Create the vtab schema */ - if( rc==SQLITE_OK ){ - rc = idxCreateVtabSchema(pNew, pzErrmsg); - } - - /* Register the auth callback with dbv */ - if( rc==SQLITE_OK ){ - sqlite3_set_authorizer(pNew->dbv, idxAuthCallback, (void*)pNew); } - /* If an error has occurred, free the new object and reutrn NULL. Otherwise, - ** return the new sqlite3expert handle. */ - if( rc!=SQLITE_OK ){ - sqlite3_expert_destroy(pNew); - pNew = 0; - } - return pNew; + *ppOut = pNew; + return rc; } /* -** Configure an sqlite3expert object. +** Free the integrity-check object. */ -int sqlite3_expert_config(sqlite3expert *p, int op, ...){ - int rc = SQLITE_OK; - va_list ap; - va_start(ap, op); - switch( op ){ - case EXPERT_CONFIG_SAMPLE: { - int iVal = va_arg(ap, int); - if( iVal<0 ) iVal = 0; - if( iVal>100 ) iVal = 100; - p->iSample = iVal; - break; - } - default: - rc = SQLITE_NOTFOUND; - break; +void sqlite3_intck_close(sqlite3_intck *p){ + if( p ){ + sqlite3_finalize(p->pCheck); + sqlite3_create_function( + p->db, "parse_create_index", 1, SQLITE_UTF8, 0, 0, 0, 0 + ); + sqlite3_free(p->zObj); + sqlite3_free(p->zKey); + sqlite3_free(p->zTestSql); + sqlite3_free(p->zErr); + sqlite3_free(p->zMessage); + sqlite3_free(p); } - - va_end(ap); - return rc; } /* -** Add an SQL statement to the analysis. +** Step the integrity-check object. */ -int sqlite3_expert_sql( - sqlite3expert *p, /* From sqlite3_expert_new() */ - const char *zSql, /* SQL statement to add */ - char **pzErr /* OUT: Error message (if any) */ -){ - IdxScan *pScanOrig = p->pScan; - IdxStatement *pStmtOrig = p->pStatement; - int rc = SQLITE_OK; - const char *zStmt = zSql; +int sqlite3_intck_step(sqlite3_intck *p){ + if( p->rc==SQLITE_OK ){ - if( p->bRun ) return SQLITE_MISUSE; + if( p->zMessage ){ + sqlite3_free(p->zMessage); + p->zMessage = 0; + } - while( rc==SQLITE_OK && zStmt && zStmt[0] ){ - sqlite3_stmt *pStmt = 0; - rc = sqlite3_prepare_v2(p->dbv, zStmt, -1, &pStmt, &zStmt); - if( rc==SQLITE_OK ){ - if( pStmt ){ - IdxStatement *pNew; - const char *z = sqlite3_sql(pStmt); - int n = STRLEN(z); - pNew = (IdxStatement*)idxMalloc(&rc, sizeof(IdxStatement) + n+1); - if( rc==SQLITE_OK ){ - pNew->zSql = (char*)&pNew[1]; - memcpy(pNew->zSql, z, n+1); - pNew->pNext = p->pStatement; - if( p->pStatement ) pNew->iId = p->pStatement->iId+1; - p->pStatement = pNew; + if( p->bCorruptSchema ){ + p->rc = SQLITE_DONE; + }else + if( p->pCheck==0 ){ + intckFindObject(p); + if( p->rc==SQLITE_OK ){ + if( p->zObj ){ + char *zSql = 0; + zSql = intckCheckObjectSql(p, p->zObj, p->zKey, &p->nKeyVal); + p->pCheck = intckPrepare(p, zSql); + sqlite3_free(zSql); + sqlite3_free(p->zKey); + p->zKey = 0; + }else{ + p->rc = SQLITE_DONE; } - sqlite3_finalize(pStmt); + }else if( p->rc==SQLITE_CORRUPT ){ + p->rc = SQLITE_OK; + p->zMessage = intckMprintf(p, "%s", + "corruption found while reading database schema" + ); + p->bCorruptSchema = 1; } - }else{ - idxDatabaseError(p->dbv, pzErr); } - } - if( rc!=SQLITE_OK ){ - idxScanFree(p->pScan, pScanOrig); - idxStatementFree(p->pStatement, pStmtOrig); - p->pScan = pScanOrig; - p->pStatement = pStmtOrig; + if( p->pCheck ){ + assert( p->rc==SQLITE_OK ); + if( sqlite3_step(p->pCheck)==SQLITE_ROW ){ + /* Normal case, do nothing. */ + }else{ + intckFinalize(p, p->pCheck); + p->pCheck = 0; + p->nKeyVal = 0; + if( p->rc==SQLITE_CORRUPT ){ + p->rc = SQLITE_OK; + p->zMessage = intckMprintf(p, + "corruption found while scanning database object %s", p->zObj + ); + } + } + } } - return rc; + return p->rc; } -int sqlite3_expert_analyze(sqlite3expert *p, char **pzErr){ - int rc; - IdxHashEntry *pEntry; - - /* Do trigger processing to collect any extra IdxScan structures */ - rc = idxProcessTriggers(p, pzErr); - - /* Create candidate indexes within the in-memory database file */ - if( rc==SQLITE_OK ){ - rc = idxCreateCandidates(p); - }else if ( rc==SQLITE_BUSY_TIMEOUT ){ - if( pzErr ) - *pzErr = sqlite3_mprintf("Cannot find a unique index name to propose."); - return rc; - } - - /* Generate the stat1 data */ - if( rc==SQLITE_OK ){ - rc = idxPopulateStat1(p, pzErr); - } - - /* Formulate the EXPERT_REPORT_CANDIDATES text */ - for(pEntry=p->hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ - p->zCandidates = idxAppendText(&rc, p->zCandidates, - "%s;%s%s\n", pEntry->zVal, - pEntry->zVal2 ? " -- stat1: " : "", pEntry->zVal2 - ); - } - - /* Figure out which of the candidate indexes are preferred by the query - ** planner and report the results to the user. */ - if( rc==SQLITE_OK ){ - rc = idxFindIndexes(p, pzErr); +/* +** Return a message describing the corruption encountered by the most recent +** call to sqlite3_intck_step(), or NULL if no corruption was encountered. +*/ +const char *sqlite3_intck_message(sqlite3_intck *p){ + assert( p->pCheck==0 || p->zMessage==0 ); + if( p->zMessage ){ + return p->zMessage; } - - if( rc==SQLITE_OK ){ - p->bRun = 1; + if( p->pCheck ){ + return (const char*)sqlite3_column_text(p->pCheck, 0); } - return rc; + return 0; } /* -** Return the total number of statements that have been added to this -** sqlite3expert using sqlite3_expert_sql(). +** Return the error code and message. */ -int sqlite3_expert_count(sqlite3expert *p){ - int nRet = 0; - if( p->pStatement ) nRet = p->pStatement->iId+1; - return nRet; +int sqlite3_intck_error(sqlite3_intck *p, const char **pzErr){ + if( pzErr ) *pzErr = p->zErr; + return (p->rc==SQLITE_DONE ? SQLITE_OK : p->rc); } /* -** Return a component of the report. +** Close any read transaction the integrity-check object is holding open +** on the database. */ -const char *sqlite3_expert_report(sqlite3expert *p, int iStmt, int eReport){ - const char *zRet = 0; - IdxStatement *pStmt; - - if( p->bRun==0 ) return 0; - for(pStmt=p->pStatement; pStmt && pStmt->iId!=iStmt; pStmt=pStmt->pNext); - switch( eReport ){ - case EXPERT_REPORT_SQL: - if( pStmt ) zRet = pStmt->zSql; - break; - case EXPERT_REPORT_INDEXES: - if( pStmt ) zRet = pStmt->zIdx; - break; - case EXPERT_REPORT_PLAN: - if( pStmt ) zRet = pStmt->zEQP; - break; - case EXPERT_REPORT_CANDIDATES: - zRet = p->zCandidates; - break; +int sqlite3_intck_unlock(sqlite3_intck *p){ + if( p->rc==SQLITE_OK && p->pCheck ){ + assert( p->zKey==0 && p->nKeyVal>0 ); + intckSaveKey(p); + intckFinalize(p, p->pCheck); + p->pCheck = 0; } - return zRet; + return p->rc; } /* -** Free an sqlite3expert object. +** Return the SQL statement used to check object zObj. Or, if zObj is +** NULL, the current SQL statement. */ -void sqlite3_expert_destroy(sqlite3expert *p){ - if( p ){ - sqlite3_close(p->dbm); - sqlite3_close(p->dbv); - idxScanFree(p->pScan, 0); - idxStatementFree(p->pStatement, 0); - idxTableFree(p->pTable); - idxWriteFree(p->pWrite); - idxHashClear(&p->hIdx); - sqlite3_free(p->zCandidates); - sqlite3_free(p); +const char *sqlite3_intck_test_sql(sqlite3_intck *p, const char *zObj){ + sqlite3_free(p->zTestSql); + if( zObj ){ + p->zTestSql = intckCheckObjectSql(p, zObj, 0, 0); + }else{ + if( p->zObj ){ + p->zTestSql = intckCheckObjectSql(p, p->zObj, p->zKey, 0); + }else{ + sqlite3_free(p->zTestSql); + p->zTestSql = 0; + } } + return p->zTestSql; } -#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ - -/************************* End ../ext/expert/sqlite3expert.c ********************/ +/************************* End ../ext/intck/sqlite3intck.c ********************/ #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) #define SQLITE_SHELL_HAVE_RECOVER 1 @@ -13437,6 +15539,15 @@ int sqlite3_recover_finish(sqlite3_recover*); typedef struct DbdataTable DbdataTable; typedef struct DbdataCursor DbdataCursor; +typedef struct DbdataBuffer DbdataBuffer; + +/* +** Buffer type. +*/ +struct DbdataBuffer { + u8 *aBuf; + sqlite3_int64 nBuf; +}; /* Cursor object */ struct DbdataCursor { @@ -13453,7 +15564,7 @@ struct DbdataCursor { sqlite3_int64 iRowid; /* Only for the sqlite_dbdata table */ - u8 *pRec; /* Buffer containing current record */ + DbdataBuffer rec; sqlite3_int64 nRec; /* Size of pRec[] in bytes */ sqlite3_int64 nHdr; /* Size of header in bytes */ int iField; /* Current field number */ @@ -13498,6 +15609,31 @@ struct DbdataTable { " schema TEXT HIDDEN" \ ")" +/* +** Ensure the buffer passed as the first argument is at least nMin bytes +** in size. If an error occurs while attempting to resize the buffer, +** SQLITE_NOMEM is returned. Otherwise, SQLITE_OK. +*/ +static int dbdataBufferSize(DbdataBuffer *pBuf, sqlite3_int64 nMin){ + if( nMin>pBuf->nBuf ){ + sqlite3_int64 nNew = nMin+16384; + u8 *aNew = (u8*)sqlite3_realloc64(pBuf->aBuf, nNew); + + if( aNew==0 ) return SQLITE_NOMEM; + pBuf->aBuf = aNew; + pBuf->nBuf = nNew; + } + return SQLITE_OK; +} + +/* +** Release the allocation managed by buffer pBuf. +*/ +static void dbdataBufferFree(DbdataBuffer *pBuf){ + sqlite3_free(pBuf->aBuf); + memset(pBuf, 0, sizeof(*pBuf)); +} + /* ** Connect to an sqlite_dbdata (pAux==0) or sqlite_dbptr (pAux!=0) virtual ** table. @@ -13638,9 +15774,9 @@ static void dbdataResetCursor(DbdataCursor *pCsr){ pCsr->iField = 0; pCsr->bOnePage = 0; sqlite3_free(pCsr->aPage); - sqlite3_free(pCsr->pRec); - pCsr->pRec = 0; + dbdataBufferFree(&pCsr->rec); pCsr->aPage = 0; + pCsr->nRec = 0; } /* @@ -13782,67 +15918,88 @@ static void dbdataValue( u8 *pData, sqlite3_int64 nData ){ - if( eType>=0 && dbdataValueBytes(eType)<=nData ){ - switch( eType ){ - case 0: - case 10: - case 11: - sqlite3_result_null(pCtx); - break; - - case 8: - sqlite3_result_int(pCtx, 0); - break; - case 9: - sqlite3_result_int(pCtx, 1); - break; - - case 1: case 2: case 3: case 4: case 5: case 6: case 7: { - sqlite3_uint64 v = (signed char)pData[0]; - pData++; - switch( eType ){ - case 7: - case 6: v = (v<<16) + (pData[0]<<8) + pData[1]; pData += 2; - case 5: v = (v<<16) + (pData[0]<<8) + pData[1]; pData += 2; - case 4: v = (v<<8) + pData[0]; pData++; - case 3: v = (v<<8) + pData[0]; pData++; - case 2: v = (v<<8) + pData[0]; pData++; - } - - if( eType==7 ){ - double r; - memcpy(&r, &v, sizeof(r)); - sqlite3_result_double(pCtx, r); - }else{ - sqlite3_result_int64(pCtx, (sqlite3_int64)v); + if( eType>=0 ){ + if( dbdataValueBytes(eType)<=nData ){ + switch( eType ){ + case 0: + case 10: + case 11: + sqlite3_result_null(pCtx); + break; + + case 8: + sqlite3_result_int(pCtx, 0); + break; + case 9: + sqlite3_result_int(pCtx, 1); + break; + + case 1: case 2: case 3: case 4: case 5: case 6: case 7: { + sqlite3_uint64 v = (signed char)pData[0]; + pData++; + switch( eType ){ + case 7: + case 6: v = (v<<16) + (pData[0]<<8) + pData[1]; pData += 2; + case 5: v = (v<<16) + (pData[0]<<8) + pData[1]; pData += 2; + case 4: v = (v<<8) + pData[0]; pData++; + case 3: v = (v<<8) + pData[0]; pData++; + case 2: v = (v<<8) + pData[0]; pData++; + } + + if( eType==7 ){ + double r; + memcpy(&r, &v, sizeof(r)); + sqlite3_result_double(pCtx, r); + }else{ + sqlite3_result_int64(pCtx, (sqlite3_int64)v); + } + break; } - break; - } - - default: { - int n = ((eType-12) / 2); - if( eType % 2 ){ - switch( enc ){ -#ifndef SQLITE_OMIT_UTF16 - case SQLITE_UTF16BE: - sqlite3_result_text16be(pCtx, (void*)pData, n, SQLITE_TRANSIENT); - break; - case SQLITE_UTF16LE: - sqlite3_result_text16le(pCtx, (void*)pData, n, SQLITE_TRANSIENT); - break; -#endif - default: - sqlite3_result_text(pCtx, (char*)pData, n, SQLITE_TRANSIENT); - break; + + default: { + int n = ((eType-12) / 2); + if( eType % 2 ){ + switch( enc ){ + #ifndef SQLITE_OMIT_UTF16 + case SQLITE_UTF16BE: + sqlite3_result_text16be(pCtx, (void*)pData, n, SQLITE_TRANSIENT); + break; + case SQLITE_UTF16LE: + sqlite3_result_text16le(pCtx, (void*)pData, n, SQLITE_TRANSIENT); + break; + #endif + default: + sqlite3_result_text(pCtx, (char*)pData, n, SQLITE_TRANSIENT); + break; + } + }else{ + sqlite3_result_blob(pCtx, pData, n, SQLITE_TRANSIENT); } - }else{ - sqlite3_result_blob(pCtx, pData, n, SQLITE_TRANSIENT); } } + }else{ + if( eType==7 ){ + sqlite3_result_double(pCtx, 0.0); + }else if( eType<7 ){ + sqlite3_result_int(pCtx, 0); + }else if( eType%2 ){ + sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC); + }else{ + sqlite3_result_blob(pCtx, "", 0, SQLITE_STATIC); + } } } } +/* This macro is a copy of the MX_CELL() macro in the SQLite core. Given +** a page-size, it returns the maximum number of cells that may be present +** on the page. */ +#define DBDATA_MX_CELL(pgsz) ((pgsz-8)/6) + +/* Maximum number of fields that may appear in a single record. This is +** the "hard-limit", according to comments in sqliteLimit.h. */ +#define DBDATA_MX_FIELD 32676 + /* ** Move an sqlite_dbdata or sqlite_dbptr cursor to the next entry. */ @@ -13871,6 +16028,9 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ assert( iOff+3+2<=pCsr->nPage ); pCsr->iCell = pTab->bPtr ? -2 : 0; pCsr->nCell = get_uint16(&pCsr->aPage[iOff+3]); + if( pCsr->nCell>DBDATA_MX_CELL(pCsr->nPage) ){ + pCsr->nCell = DBDATA_MX_CELL(pCsr->nPage); + } } if( pTab->bPtr ){ @@ -13888,7 +16048,8 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ } }else{ /* If there is no record loaded, load it now. */ - if( pCsr->pRec==0 ){ + assert( pCsr->rec.aBuf!=0 || pCsr->nRec==0 ); + if( pCsr->nRec==0 ){ int bHasRowid = 0; int nPointer = 0; sqlite3_int64 nPayload = 0; @@ -13915,22 +16076,24 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ if( pCsr->iCell>=pCsr->nCell ){ bNextPage = 1; }else{ + int iCellPtr = iOff + 8 + nPointer + pCsr->iCell*2; - iOff += 8 + nPointer + pCsr->iCell*2; - if( iOff>pCsr->nPage ){ + if( iCellPtr>pCsr->nPage ){ bNextPage = 1; }else{ - iOff = get_uint16(&pCsr->aPage[iOff]); + iOff = get_uint16(&pCsr->aPage[iCellPtr]); } /* For an interior node cell, skip past the child-page number */ iOff += nPointer; /* Load the "byte of payload including overflow" field */ - if( bNextPage || iOff>pCsr->nPage ){ + if( bNextPage || iOff>pCsr->nPage || iOff<=iCellPtr ){ bNextPage = 1; }else{ iOff += dbdataGetVarintU32(&pCsr->aPage[iOff], &nPayload); + if( nPayload>0x7fffff00 ) nPayload &= 0x3fff; + if( nPayload==0 ) nPayload = 1; } /* If this is a leaf intkey cell, load the rowid */ @@ -13965,13 +16128,12 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ /* Allocate space for payload. And a bit more to catch small buffer ** overruns caused by attempting to read a varint or similar from ** near the end of a corrupt record. */ - pCsr->pRec = (u8*)sqlite3_malloc64(nPayload+DBDATA_PADDING_BYTES); - if( pCsr->pRec==0 ) return SQLITE_NOMEM; - memset(pCsr->pRec, 0, nPayload+DBDATA_PADDING_BYTES); - pCsr->nRec = nPayload; + rc = dbdataBufferSize(&pCsr->rec, nPayload+DBDATA_PADDING_BYTES); + if( rc!=SQLITE_OK ) return rc; + assert( nPayload!=0 ); /* Load the nLocal bytes of payload */ - memcpy(pCsr->pRec, &pCsr->aPage[iOff], nLocal); + memcpy(pCsr->rec.aBuf, &pCsr->aPage[iOff], nLocal); iOff += nLocal; /* Load content from overflow pages */ @@ -13989,19 +16151,22 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ nCopy = U-4; if( nCopy>nRem ) nCopy = nRem; - memcpy(&pCsr->pRec[nPayload-nRem], &aOvfl[4], nCopy); + memcpy(&pCsr->rec.aBuf[nPayload-nRem], &aOvfl[4], nCopy); nRem -= nCopy; pgnoOvfl = get_uint32(aOvfl); sqlite3_free(aOvfl); } + nPayload -= nRem; } + memset(&pCsr->rec.aBuf[nPayload], 0, DBDATA_PADDING_BYTES); + pCsr->nRec = nPayload; - iHdr = dbdataGetVarintU32(pCsr->pRec, &nHdr); + iHdr = dbdataGetVarintU32(pCsr->rec.aBuf, &nHdr); if( nHdr>nPayload ) nHdr = 0; pCsr->nHdr = nHdr; - pCsr->pHdrPtr = &pCsr->pRec[iHdr]; - pCsr->pPtr = &pCsr->pRec[pCsr->nHdr]; + pCsr->pHdrPtr = &pCsr->rec.aBuf[iHdr]; + pCsr->pPtr = &pCsr->rec.aBuf[pCsr->nHdr]; pCsr->iField = (bHasRowid ? -1 : 0); } } @@ -14009,14 +16174,16 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ pCsr->iField++; if( pCsr->iField>0 ){ sqlite3_int64 iType; - if( pCsr->pHdrPtr>&pCsr->pRec[pCsr->nRec] ){ + if( pCsr->pHdrPtr>=&pCsr->rec.aBuf[pCsr->nRec] + || pCsr->iField>=DBDATA_MX_FIELD + ){ bNextPage = 1; }else{ int szField = 0; pCsr->pHdrPtr += dbdataGetVarintU32(pCsr->pHdrPtr, &iType); szField = dbdataValueBytes(iType); - if( (pCsr->nRec - (pCsr->pPtr - pCsr->pRec))pPtr = &pCsr->pRec[pCsr->nRec]; + if( (pCsr->nRec - (pCsr->pPtr - pCsr->rec.aBuf))pPtr = &pCsr->rec.aBuf[pCsr->nRec]; }else{ pCsr->pPtr += szField; } @@ -14026,20 +16193,18 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ if( bNextPage ){ sqlite3_free(pCsr->aPage); - sqlite3_free(pCsr->pRec); pCsr->aPage = 0; - pCsr->pRec = 0; + pCsr->nRec = 0; if( pCsr->bOnePage ) return SQLITE_OK; pCsr->iPgno++; }else{ - if( pCsr->iField<0 || pCsr->pHdrPtr<&pCsr->pRec[pCsr->nHdr] ){ + if( pCsr->iField<0 || pCsr->pHdrPtr<&pCsr->rec.aBuf[pCsr->nHdr] ){ return SQLITE_OK; } /* Advance to the next cell. The next iteration of the loop will load ** the record and so on. */ - sqlite3_free(pCsr->pRec); - pCsr->pRec = 0; + pCsr->nRec = 0; pCsr->iCell++; } } @@ -14229,12 +16394,12 @@ static int dbdataColumn( case DBDATA_COLUMN_VALUE: { if( pCsr->iField<0 ){ sqlite3_result_int64(ctx, pCsr->iIntkey); - }else if( &pCsr->pRec[pCsr->nRec] >= pCsr->pPtr ){ + }else if( &pCsr->rec.aBuf[pCsr->nRec] >= pCsr->pPtr ){ sqlite3_int64 iType; dbdataGetVarintU32(pCsr->pHdrPtr, &iType); dbdataValue( ctx, pCsr->enc, iType, pCsr->pPtr, - &pCsr->pRec[pCsr->nRec] - pCsr->pPtr + &pCsr->rec.aBuf[pCsr->nRec] - pCsr->pPtr ); } break; @@ -14282,7 +16447,8 @@ static int sqlite3DbdataRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; int rc = sqlite3_create_module(db, "sqlite_dbdata", &dbdata_module, 0); @@ -15496,7 +17662,7 @@ static int recoverWriteSchema1(sqlite3_recover *p){ if( bTable && !bVirtual ){ if( SQLITE_ROW==sqlite3_step(pTblname) ){ const char *zTbl = (const char*)sqlite3_column_text(pTblname, 0); - recoverAddTable(p, zTbl, iRoot); + if( zTbl ) recoverAddTable(p, zTbl, iRoot); } recoverReset(p, pTblname); } @@ -17246,6 +19412,7 @@ struct ShellState { u8 eTraceType; /* SHELL_TRACE_* value for type of trace */ u8 bSafeMode; /* True to prohibit unsafe operations */ u8 bSafeModePersist; /* The long-term value of bSafeMode */ + u8 eRestoreState; /* See comments above doAutoDetectRestore() */ ColModeOpts cmOpts; /* Option values affecting columnar mode output */ unsigned statsOn; /* True to display memory stats before each finalize */ unsigned mEqpLines; /* Mask of vertical lines in the EQP output graph */ @@ -17439,7 +19606,7 @@ static const char *modeDescr[] = { static void shellLog(void *pArg, int iErrCode, const char *zMsg){ ShellState *p = (ShellState*)pArg; if( p->pLog==0 ) return; - utf8_printf(p->pLog, "(%d) %s\n", iErrCode, zMsg); + sputf(p->pLog, "(%d) %s\n", iErrCode, zMsg); fflush(p->pLog); } @@ -17454,9 +19621,9 @@ static void shellPutsFunc( int nVal, sqlite3_value **apVal ){ - ShellState *p = (ShellState*)sqlite3_user_data(pCtx); + /* Unused: (ShellState*)sqlite3_user_data(pCtx); */ (void)nVal; - utf8_printf(p->out, "%s\n", sqlite3_value_text(apVal[0])); + oputf("%s\n", sqlite3_value_text(apVal[0])); sqlite3_result_value(pCtx, apVal[0]); } @@ -17475,8 +19642,7 @@ static void failIfSafeMode( va_start(ap, zErrMsg); zMsg = sqlite3_vmprintf(zErrMsg, ap); va_end(ap); - raw_printf(stderr, "line %d: ", p->lineno); - utf8_printf(stderr, "%s\n", zMsg); + eputf("line %d: %s\n", p->lineno, zMsg); exit(1); } } @@ -17644,7 +19810,7 @@ static void outputModePop(ShellState *p){ /* ** Output the given string as a hex-encoded blob (eg. X'1234' ) */ -static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ +static void output_hex_blob(const void *pBlob, int nBlob){ int i; unsigned char *aBlob = (unsigned char*)pBlob; @@ -17661,7 +19827,7 @@ static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ } zStr[i*2] = '\0'; - raw_printf(out,"X'%s'", zStr); + oputf("X'%s'", zStr); sqlite3_free(zStr); } @@ -17691,25 +19857,28 @@ static const char *unused_string( ** ** See also: output_quoted_escaped_string() */ -static void output_quoted_string(FILE *out, const char *z){ +static void output_quoted_string(const char *z){ int i; char c; - setBinaryMode(out, 1); +#ifndef SQLITE_SHELL_FIDDLE + FILE *pfO = setOutputStream(invalidFileStream); + setBinaryMode(pfO, 1); +#endif if( z==0 ) return; for(i=0; (c = z[i])!=0 && c!='\''; i++){} if( c==0 ){ - utf8_printf(out,"'%s'",z); + oputf("'%s'",z); }else{ - raw_printf(out, "'"); + oputz("'"); while( *z ){ for(i=0; (c = z[i])!=0 && c!='\''; i++){} if( c=='\'' ) i++; if( i ){ - utf8_printf(out, "%.*s", i, z); + oputf("%.*s", i, z); z += i; } if( c=='\'' ){ - raw_printf(out, "'"); + oputz("'"); continue; } if( c==0 ){ @@ -17717,9 +19886,13 @@ static void output_quoted_string(FILE *out, const char *z){ } z++; } - raw_printf(out, "'"); + oputz("'"); } - setTextMode(out, 1); +#ifndef SQLITE_SHELL_FIDDLE + setTextMode(pfO, 1); +#else + setTextMode(stdout, 1); +#endif } /* @@ -17731,13 +19904,16 @@ static void output_quoted_string(FILE *out, const char *z){ ** This is like output_quoted_string() but with the addition of the \r\n ** escape mechanism. */ -static void output_quoted_escaped_string(FILE *out, const char *z){ +static void output_quoted_escaped_string(const char *z){ int i; char c; - setBinaryMode(out, 1); +#ifndef SQLITE_SHELL_FIDDLE + FILE *pfO = setOutputStream(invalidFileStream); + setBinaryMode(pfO, 1); +#endif for(i=0; (c = z[i])!=0 && c!='\'' && c!='\n' && c!='\r'; i++){} if( c==0 ){ - utf8_printf(out,"'%s'",z); + oputf("'%s'",z); }else{ const char *zNL = 0; const char *zCR = 0; @@ -17749,23 +19925,23 @@ static void output_quoted_escaped_string(FILE *out, const char *z){ if( z[i]=='\r' ) nCR++; } if( nNL ){ - raw_printf(out, "replace("); + oputz("replace("); zNL = unused_string(z, "\\n", "\\012", zBuf1); } if( nCR ){ - raw_printf(out, "replace("); + oputz("replace("); zCR = unused_string(z, "\\r", "\\015", zBuf2); } - raw_printf(out, "'"); + oputz("'"); while( *z ){ for(i=0; (c = z[i])!=0 && c!='\n' && c!='\r' && c!='\''; i++){} if( c=='\'' ) i++; if( i ){ - utf8_printf(out, "%.*s", i, z); + oputf("%.*s", i, z); z += i; } if( c=='\'' ){ - raw_printf(out, "'"); + oputz("'"); continue; } if( c==0 ){ @@ -17773,93 +19949,139 @@ static void output_quoted_escaped_string(FILE *out, const char *z){ } z++; if( c=='\n' ){ - raw_printf(out, "%s", zNL); + oputz(zNL); continue; } - raw_printf(out, "%s", zCR); + oputz(zCR); } - raw_printf(out, "'"); + oputz("'"); if( nCR ){ - raw_printf(out, ",'%s',char(13))", zCR); + oputf(",'%s',char(13))", zCR); } if( nNL ){ - raw_printf(out, ",'%s',char(10))", zNL); + oputf(",'%s',char(10))", zNL); } } - setTextMode(out, 1); +#ifndef SQLITE_SHELL_FIDDLE + setTextMode(pfO, 1); +#else + setTextMode(stdout, 1); +#endif } +/* +** Find earliest of chars within s specified in zAny. +** With ns == ~0, is like strpbrk(s,zAny) and s must be 0-terminated. +*/ +static const char *anyOfInStr(const char *s, const char *zAny, size_t ns){ + const char *pcFirst = 0; + if( ns == ~(size_t)0 ) ns = strlen(s); + while(*zAny){ + const char *pc = (const char*)memchr(s, *zAny&0xff, ns); + if( pc ){ + pcFirst = pc; + ns = pcFirst - s; + } + ++zAny; + } + return pcFirst; +} /* ** Output the given string as a quoted according to C or TCL quoting rules. */ -static void output_c_string(FILE *out, const char *z){ - unsigned int c; - fputc('"', out); - while( (c = *(z++))!=0 ){ - if( c=='\\' ){ - fputc(c, out); - fputc(c, out); - }else if( c=='"' ){ - fputc('\\', out); - fputc('"', out); - }else if( c=='\t' ){ - fputc('\\', out); - fputc('t', out); - }else if( c=='\n' ){ - fputc('\\', out); - fputc('n', out); - }else if( c=='\r' ){ - fputc('\\', out); - fputc('r', out); +static void output_c_string(const char *z){ + char c; + static const char *zq = "\""; + static long ctrlMask = ~0L; + static const char *zDQBSRO = "\"\\\x7f"; /* double-quote, backslash, rubout */ + char ace[3] = "\\?"; + char cbsSay; + oputz(zq); + while( *z!=0 ){ + const char *pcDQBSRO = anyOfInStr(z, zDQBSRO, ~(size_t)0); + const char *pcPast = zSkipValidUtf8(z, INT_MAX, ctrlMask); + const char *pcEnd = (pcDQBSRO && pcDQBSRO < pcPast)? pcDQBSRO : pcPast; + if( pcEnd > z ) oputb(z, (int)(pcEnd-z)); + if( (c = *pcEnd)==0 ) break; + ++pcEnd; + switch( c ){ + case '\\': case '"': + cbsSay = (char)c; + break; + case '\t': cbsSay = 't'; break; + case '\n': cbsSay = 'n'; break; + case '\r': cbsSay = 'r'; break; + case '\f': cbsSay = 'f'; break; + default: cbsSay = 0; break; + } + if( cbsSay ){ + ace[1] = cbsSay; + oputz(ace); }else if( !isprint(c&0xff) ){ - raw_printf(out, "\\%03o", c&0xff); + oputf("\\%03o", c&0xff); }else{ - fputc(c, out); + ace[1] = (char)c; + oputz(ace+1); } + z = pcEnd; } - fputc('"', out); + oputz(zq); } /* ** Output the given string as a quoted according to JSON quoting rules. */ -static void output_json_string(FILE *out, const char *z, i64 n){ - unsigned int c; +static void output_json_string(const char *z, i64 n){ + char c; + static const char *zq = "\""; + static long ctrlMask = ~0L; + static const char *zDQBS = "\"\\"; + const char *pcLimit; + char ace[3] = "\\?"; + char cbsSay; + if( z==0 ) z = ""; - if( n<0 ) n = strlen(z); - fputc('"', out); - while( n-- ){ + pcLimit = z + ((n<0)? strlen(z) : (size_t)n); + oputz(zq); + while( z < pcLimit ){ + const char *pcDQBS = anyOfInStr(z, zDQBS, pcLimit-z); + const char *pcPast = zSkipValidUtf8(z, (int)(pcLimit-z), ctrlMask); + const char *pcEnd = (pcDQBS && pcDQBS < pcPast)? pcDQBS : pcPast; + if( pcEnd > z ){ + oputb(z, (int)(pcEnd-z)); + z = pcEnd; + } + if( z >= pcLimit ) break; c = *(z++); - if( c=='\\' || c=='"' ){ - fputc('\\', out); - fputc(c, out); + switch( c ){ + case '"': case '\\': + cbsSay = (char)c; + break; + case '\b': cbsSay = 'b'; break; + case '\f': cbsSay = 'f'; break; + case '\n': cbsSay = 'n'; break; + case '\r': cbsSay = 'r'; break; + case '\t': cbsSay = 't'; break; + default: cbsSay = 0; break; + } + if( cbsSay ){ + ace[1] = cbsSay; + oputz(ace); }else if( c<=0x1f ){ - fputc('\\', out); - if( c=='\b' ){ - fputc('b', out); - }else if( c=='\f' ){ - fputc('f', out); - }else if( c=='\n' ){ - fputc('n', out); - }else if( c=='\r' ){ - fputc('r', out); - }else if( c=='\t' ){ - fputc('t', out); - }else{ - raw_printf(out, "u%04x",c); - } + oputf("u%04x", c); }else{ - fputc(c, out); + ace[1] = (char)c; + oputz(ace+1); } } - fputc('"', out); + oputz(zq); } /* ** Output the given string with characters that are special to ** HTML escaped. */ -static void output_html_string(FILE *out, const char *z){ +static void output_html_string(const char *z){ int i; if( z==0 ) z = ""; while( *z ){ @@ -17871,18 +20093,18 @@ static void output_html_string(FILE *out, const char *z){ && z[i]!='\''; i++){} if( i>0 ){ - utf8_printf(out,"%.*s",i,z); + oputf("%.*s",i,z); } if( z[i]=='<' ){ - raw_printf(out,"<"); + oputz("<"); }else if( z[i]=='&' ){ - raw_printf(out,"&"); + oputz("&"); }else if( z[i]=='>' ){ - raw_printf(out,">"); + oputz(">"); }else if( z[i]=='\"' ){ - raw_printf(out,"""); + oputz("""); }else if( z[i]=='\'' ){ - raw_printf(out,"'"); + oputz("'"); }else{ break; } @@ -17920,9 +20142,8 @@ static const char needCsvQuote[] = { ** is only issued if bSep is true. */ static void output_csv(ShellState *p, const char *z, int bSep){ - FILE *out = p->out; if( z==0 ){ - utf8_printf(out,"%s",p->nullValue); + oputf("%s",p->nullValue); }else{ unsigned i; for(i=0; z[i]; i++){ @@ -17934,14 +20155,14 @@ static void output_csv(ShellState *p, const char *z, int bSep){ if( i==0 || strstr(z, p->colSeparator)!=0 ){ char *zQuoted = sqlite3_mprintf("\"%w\"", z); shell_check_oom(zQuoted); - utf8_printf(out, "%s", zQuoted); + oputz(zQuoted); sqlite3_free(zQuoted); }else{ - utf8_printf(out, "%s", z); + oputz(z); } } if( bSep ){ - utf8_printf(p->out, "%s", p->colSeparator); + oputz(p->colSeparator); } } @@ -18049,16 +20270,16 @@ static int shellAuth( az[1] = zA2; az[2] = zA3; az[3] = zA4; - utf8_printf(p->out, "authorizer: %s", azAction[op]); + oputf("authorizer: %s", azAction[op]); for(i=0; i<4; i++){ - raw_printf(p->out, " "); + oputz(" "); if( az[i] ){ - output_c_string(p->out, az[i]); + output_c_string(az[i]); }else{ - raw_printf(p->out, "NULL"); + oputz("NULL"); } } - raw_printf(p->out, "\n"); + oputz("\n"); if( p->bSafeMode ) (void)safeModeAuth(pClientData, op, zA1, zA2, zA3, zA4); return SQLITE_OK; } @@ -18074,7 +20295,7 @@ static int shellAuth( ** sqlite3_complete() returns false, try to terminate the comment before ** printing the result. https://sqlite.org/forum/forumpost/d7be961c5c */ -static void printSchemaLine(FILE *out, const char *z, const char *zTail){ +static void printSchemaLine(const char *z, const char *zTail){ char *zToFree = 0; if( z==0 ) return; if( zTail==0 ) return; @@ -18096,16 +20317,16 @@ static void printSchemaLine(FILE *out, const char *z, const char *zTail){ } } if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){ - utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail); + oputf("CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail); }else{ - utf8_printf(out, "%s%s", z, zTail); + oputf("%s%s", z, zTail); } sqlite3_free(zToFree); } -static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){ +static void printSchemaLineN(char *z, int n, const char *zTail){ char c = z[n]; z[n] = 0; - printSchemaLine(out, z, zTail); + printSchemaLine(z, zTail); z[n] = c; } @@ -18133,7 +20354,7 @@ static void eqp_append(ShellState *p, int iEqpId, int p2, const char *zText){ if( zText==0 ) return; nText = strlen(zText); if( p->autoEQPtest ){ - utf8_printf(p->out, "%d,%d,%s\n", iEqpId, p2, zText); + oputf("%d,%d,%s\n", iEqpId, p2, zText); } pNew = sqlite3_malloc64( sizeof(*pNew) + nText ); shell_check_oom(pNew); @@ -18181,8 +20402,7 @@ static void eqp_render_level(ShellState *p, int iEqpId){ for(pRow = eqp_next_row(p, iEqpId, 0); pRow; pRow = pNext){ pNext = eqp_next_row(p, iEqpId, pRow); z = pRow->zText; - utf8_printf(p->out, "%s%s%s\n", p->sGraph.zPrefix, - pNext ? "|--" : "`--", z); + oputf("%s%s%s\n", p->sGraph.zPrefix, pNext ? "|--" : "`--", z); if( n<(i64)sizeof(p->sGraph.zPrefix)-7 ){ memcpy(&p->sGraph.zPrefix[n], pNext ? "| " : " ", 4); eqp_render_level(p, pRow->iEqpId); @@ -18202,13 +20422,13 @@ static void eqp_render(ShellState *p, i64 nCycle){ eqp_reset(p); return; } - utf8_printf(p->out, "%s\n", pRow->zText+3); + oputf("%s\n", pRow->zText+3); p->sGraph.pRow = pRow->pNext; sqlite3_free(pRow); }else if( nCycle>0 ){ - utf8_printf(p->out, "QUERY PLAN (cycles=%lld [100%%])\n", nCycle); + oputf("QUERY PLAN (cycles=%lld [100%%])\n", nCycle); }else{ - utf8_printf(p->out, "QUERY PLAN\n"); + oputz("QUERY PLAN\n"); } p->sGraph.zPrefix[0] = 0; eqp_render_level(p, 0); @@ -18224,13 +20444,13 @@ static int progress_handler(void *pClientData) { ShellState *p = (ShellState*)pClientData; p->nProgress++; if( p->nProgress>=p->mxProgress && p->mxProgress>0 ){ - raw_printf(p->out, "Progress limit reached (%u)\n", p->nProgress); + oputf("Progress limit reached (%u)\n", p->nProgress); if( p->flgProgress & SHELL_PROGRESS_RESET ) p->nProgress = 0; if( p->flgProgress & SHELL_PROGRESS_ONCE ) p->mxProgress = 0; return 1; } if( (p->flgProgress & SHELL_PROGRESS_QUIET)==0 ){ - raw_printf(p->out, "Progress %u\n", p->nProgress); + oputf("Progress %u\n", p->nProgress); } return 0; } @@ -18239,14 +20459,14 @@ static int progress_handler(void *pClientData) { /* ** Print N dashes */ -static void print_dashes(FILE *out, int N){ +static void print_dashes(int N){ const char zDash[] = "--------------------------------------------------"; const int nDash = sizeof(zDash) - 1; while( N>nDash ){ - fputs(zDash, out); + oputz(zDash); N -= nDash; } - raw_printf(out, "%.*s", N, zDash); + oputf("%.*s", N, zDash); } /* @@ -18259,15 +20479,15 @@ static void print_row_separator( ){ int i; if( nArg>0 ){ - fputs(zSep, p->out); - print_dashes(p->out, p->actualWidth[0]+2); + oputz(zSep); + print_dashes(p->actualWidth[0]+2); for(i=1; iout); - print_dashes(p->out, p->actualWidth[i]+2); + oputz(zSep); + print_dashes(p->actualWidth[i]+2); } - fputs(zSep, p->out); + oputz(zSep); } - fputs("\n", p->out); + oputz("\n"); } /* @@ -18297,10 +20517,10 @@ static int shell_callback( int len = strlen30(azCol[i] ? azCol[i] : ""); if( len>w ) w = len; } - if( p->cnt++>0 ) utf8_printf(p->out, "%s", p->rowSeparator); + if( p->cnt++>0 ) oputz(p->rowSeparator); for(i=0; iout,"%*s = %s%s", w, azCol[i], - azArg[i] ? azArg[i] : p->nullValue, p->rowSeparator); + oputf("%*s = %s%s", w, azCol[i], + azArg[i] ? azArg[i] : p->nullValue, p->rowSeparator); } break; } @@ -18327,12 +20547,12 @@ static int shell_callback( /* If this is the first row seen, print out the headers */ if( p->cnt++==0 ){ for(i=0; iout, aWidth[i], azCol[ aMap[i] ]); - fputs(i==nArg-1 ? "\n" : " ", p->out); + utf8_width_print(aWidth[i], azCol[ aMap[i] ]); + oputz(i==nArg-1 ? "\n" : " "); } for(i=0; iout, aWidth[i]); - fputs(i==nArg-1 ? "\n" : " ", p->out); + print_dashes(aWidth[i]); + oputz(i==nArg-1 ? "\n" : " "); } } @@ -18350,17 +20570,17 @@ static int shell_callback( } if( i==iIndent && p->aiIndent && p->pStmt ){ if( p->iIndentnIndent ){ - utf8_printf(p->out, "%*.s", p->aiIndent[p->iIndent], ""); + oputf("%*.s", p->aiIndent[p->iIndent], ""); } p->iIndent++; } - utf8_width_print(p->out, w, zVal ? zVal : p->nullValue); - fputs(i==nArg-1 ? "\n" : zSep, p->out); + utf8_width_print(w, zVal ? zVal : p->nullValue); + oputz(i==nArg-1 ? "\n" : zSep); } break; } case MODE_Semi: { /* .schema and .fullschema output */ - printSchemaLine(p->out, azArg[0], ";\n"); + printSchemaLine(azArg[0], ";\n"); break; } case MODE_Pretty: { /* .schema and .fullschema with --indent */ @@ -18375,7 +20595,7 @@ static int shell_callback( if( sqlite3_strlike("CREATE VIEW%", azArg[0], 0)==0 || sqlite3_strlike("CREATE TRIG%", azArg[0], 0)==0 ){ - utf8_printf(p->out, "%s;\n", azArg[0]); + oputf("%s;\n", azArg[0]); break; } z = sqlite3_mprintf("%s", azArg[0]); @@ -18408,7 +20628,7 @@ static int shell_callback( }else if( c==')' ){ nParen--; if( nLine>0 && nParen==0 && j>0 ){ - printSchemaLineN(p->out, z, j, "\n"); + printSchemaLineN(z, j, "\n"); j = 0; } } @@ -18417,7 +20637,7 @@ static int shell_callback( && (c=='(' || c=='\n' || (c==',' && !wsToEol(z+i+1))) ){ if( c=='\n' ) j--; - printSchemaLineN(p->out, z, j, "\n "); + printSchemaLineN(z, j, "\n "); j = 0; nLine++; while( IsSpace(z[i+1]) ){ i++; } @@ -18425,64 +20645,59 @@ static int shell_callback( } z[j] = 0; } - printSchemaLine(p->out, z, ";\n"); + printSchemaLine(z, ";\n"); sqlite3_free(z); break; } case MODE_List: { if( p->cnt++==0 && p->showHeader ){ for(i=0; iout,"%s%s",azCol[i], - i==nArg-1 ? p->rowSeparator : p->colSeparator); + oputf("%s%s",azCol[i], i==nArg-1 ? p->rowSeparator : p->colSeparator); } } if( azArg==0 ) break; for(i=0; inullValue; - utf8_printf(p->out, "%s", z); - if( iout, "%s", p->colSeparator); - }else{ - utf8_printf(p->out, "%s", p->rowSeparator); - } + oputz(z); + oputz((icolSeparator : p->rowSeparator); } break; } case MODE_Html: { if( p->cnt++==0 && p->showHeader ){ - raw_printf(p->out,""); + oputz(""); for(i=0; iout,""); - output_html_string(p->out, azCol[i]); - raw_printf(p->out,"\n"); + oputz(""); + output_html_string(azCol[i]); + oputz("\n"); } - raw_printf(p->out,"\n"); + oputz("\n"); } if( azArg==0 ) break; - raw_printf(p->out,""); + oputz(""); for(i=0; iout,""); - output_html_string(p->out, azArg[i] ? azArg[i] : p->nullValue); - raw_printf(p->out,"\n"); + oputz(""); + output_html_string(azArg[i] ? azArg[i] : p->nullValue); + oputz("\n"); } - raw_printf(p->out,"\n"); + oputz("\n"); break; } case MODE_Tcl: { if( p->cnt++==0 && p->showHeader ){ for(i=0; iout,azCol[i] ? azCol[i] : ""); - if(iout, "%s", p->colSeparator); + output_c_string(azCol[i] ? azCol[i] : ""); + if(icolSeparator); } - utf8_printf(p->out, "%s", p->rowSeparator); + oputz(p->rowSeparator); } if( azArg==0 ) break; for(i=0; iout, azArg[i] ? azArg[i] : p->nullValue); - if(iout, "%s", p->colSeparator); + output_c_string(azArg[i] ? azArg[i] : p->nullValue); + if(icolSeparator); } - utf8_printf(p->out, "%s", p->rowSeparator); + oputz(p->rowSeparator); break; } case MODE_Csv: { @@ -18491,57 +20706,57 @@ static int shell_callback( for(i=0; iout, "%s", p->rowSeparator); + oputz(p->rowSeparator); } if( nArg>0 ){ for(i=0; iout, "%s", p->rowSeparator); + oputz(p->rowSeparator); } setTextMode(p->out, 1); break; } case MODE_Insert: { if( azArg==0 ) break; - utf8_printf(p->out,"INSERT INTO %s",p->zDestTable); + oputf("INSERT INTO %s",p->zDestTable); if( p->showHeader ){ - raw_printf(p->out,"("); + oputz("("); for(i=0; i0 ) raw_printf(p->out, ","); + if( i>0 ) oputz(","); if( quoteChar(azCol[i]) ){ char *z = sqlite3_mprintf("\"%w\"", azCol[i]); shell_check_oom(z); - utf8_printf(p->out, "%s", z); + oputz(z); sqlite3_free(z); }else{ - raw_printf(p->out, "%s", azCol[i]); + oputf("%s", azCol[i]); } } - raw_printf(p->out,")"); + oputz(")"); } p->cnt++; for(i=0; iout, i>0 ? "," : " VALUES("); + oputz(i>0 ? "," : " VALUES("); if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ - utf8_printf(p->out,"NULL"); + oputz("NULL"); }else if( aiType && aiType[i]==SQLITE_TEXT ){ if( ShellHasFlag(p, SHFLG_Newlines) ){ - output_quoted_string(p->out, azArg[i]); + output_quoted_string(azArg[i]); }else{ - output_quoted_escaped_string(p->out, azArg[i]); + output_quoted_escaped_string(azArg[i]); } }else if( aiType && aiType[i]==SQLITE_INTEGER ){ - utf8_printf(p->out,"%s", azArg[i]); + oputz(azArg[i]); }else if( aiType && aiType[i]==SQLITE_FLOAT ){ char z[50]; double r = sqlite3_column_double(p->pStmt, i); sqlite3_uint64 ur; memcpy(&ur,&r,sizeof(r)); if( ur==0x7ff0000000000000LL ){ - raw_printf(p->out, "9.0e+999"); + oputz("9.0e+999"); }else if( ur==0xfff0000000000000LL ){ - raw_printf(p->out, "-9.0e+999"); + oputz("-9.0e+999"); }else{ sqlite3_int64 ir = (sqlite3_int64)r; if( r==(double)ir ){ @@ -18549,21 +20764,21 @@ static int shell_callback( }else{ sqlite3_snprintf(50,z,"%!.20g", r); } - raw_printf(p->out, "%s", z); + oputz(z); } }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ const void *pBlob = sqlite3_column_blob(p->pStmt, i); int nBlob = sqlite3_column_bytes(p->pStmt, i); - output_hex_blob(p->out, pBlob, nBlob); + output_hex_blob(pBlob, nBlob); }else if( isNumber(azArg[i], 0) ){ - utf8_printf(p->out,"%s", azArg[i]); + oputz(azArg[i]); }else if( ShellHasFlag(p, SHFLG_Newlines) ){ - output_quoted_string(p->out, azArg[i]); + output_quoted_string(azArg[i]); }else{ - output_quoted_escaped_string(p->out, azArg[i]); + output_quoted_escaped_string(azArg[i]); } } - raw_printf(p->out,");\n"); + oputz(");\n"); break; } case MODE_Json: { @@ -18575,37 +20790,37 @@ static int shell_callback( } p->cnt++; for(i=0; iout, azCol[i], -1); - putc(':', p->out); + output_json_string(azCol[i], -1); + oputz(":"); if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ - fputs("null",p->out); + oputz("null"); }else if( aiType && aiType[i]==SQLITE_FLOAT ){ char z[50]; double r = sqlite3_column_double(p->pStmt, i); sqlite3_uint64 ur; memcpy(&ur,&r,sizeof(r)); if( ur==0x7ff0000000000000LL ){ - raw_printf(p->out, "9.0e+999"); + oputz("9.0e+999"); }else if( ur==0xfff0000000000000LL ){ - raw_printf(p->out, "-9.0e+999"); + oputz("-9.0e+999"); }else{ sqlite3_snprintf(50,z,"%!.20g", r); - raw_printf(p->out, "%s", z); + oputz(z); } }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ const void *pBlob = sqlite3_column_blob(p->pStmt, i); int nBlob = sqlite3_column_bytes(p->pStmt, i); - output_json_string(p->out, pBlob, nBlob); + output_json_string(pBlob, nBlob); }else if( aiType && aiType[i]==SQLITE_TEXT ){ - output_json_string(p->out, azArg[i], -1); + output_json_string(azArg[i], -1); }else{ - utf8_printf(p->out,"%s", azArg[i]); + oputz(azArg[i]); } if( iout); + oputz(","); } } - putc('}', p->out); + oputz("}"); break; } case MODE_Quote: { @@ -18613,7 +20828,7 @@ static int shell_callback( if( p->cnt==0 && p->showHeader ){ for(i=0; i0 ) fputs(p->colSeparator, p->out); - output_quoted_string(p->out, azCol[i]); + output_quoted_string(azCol[i]); } fputs(p->rowSeparator, p->out); } @@ -18621,24 +20836,24 @@ static int shell_callback( for(i=0; i0 ) fputs(p->colSeparator, p->out); if( (azArg[i]==0) || (aiType && aiType[i]==SQLITE_NULL) ){ - utf8_printf(p->out,"NULL"); + oputz("NULL"); }else if( aiType && aiType[i]==SQLITE_TEXT ){ - output_quoted_string(p->out, azArg[i]); + output_quoted_string(azArg[i]); }else if( aiType && aiType[i]==SQLITE_INTEGER ){ - utf8_printf(p->out,"%s", azArg[i]); + oputz(azArg[i]); }else if( aiType && aiType[i]==SQLITE_FLOAT ){ char z[50]; double r = sqlite3_column_double(p->pStmt, i); sqlite3_snprintf(50,z,"%!.20g", r); - raw_printf(p->out, "%s", z); + oputz(z); }else if( aiType && aiType[i]==SQLITE_BLOB && p->pStmt ){ const void *pBlob = sqlite3_column_blob(p->pStmt, i); int nBlob = sqlite3_column_bytes(p->pStmt, i); - output_hex_blob(p->out, pBlob, nBlob); + output_hex_blob(pBlob, nBlob); }else if( isNumber(azArg[i], 0) ){ - utf8_printf(p->out,"%s", azArg[i]); + oputz(azArg[i]); }else{ - output_quoted_string(p->out, azArg[i]); + output_quoted_string(azArg[i]); } } fputs(p->rowSeparator, p->out); @@ -18647,17 +20862,17 @@ static int shell_callback( case MODE_Ascii: { if( p->cnt++==0 && p->showHeader ){ for(i=0; i0 ) utf8_printf(p->out, "%s", p->colSeparator); - utf8_printf(p->out,"%s",azCol[i] ? azCol[i] : ""); + if( i>0 ) oputz(p->colSeparator); + oputz(azCol[i] ? azCol[i] : ""); } - utf8_printf(p->out, "%s", p->rowSeparator); + oputz(p->rowSeparator); } if( azArg==0 ) break; for(i=0; i0 ) utf8_printf(p->out, "%s", p->colSeparator); - utf8_printf(p->out,"%s",azArg[i] ? azArg[i] : p->nullValue); + if( i>0 ) oputz(p->colSeparator); + oputz(azArg[i] ? azArg[i] : p->nullValue); } - utf8_printf(p->out, "%s", p->rowSeparator); + oputz(p->rowSeparator); break; } case MODE_EQP: { @@ -18736,7 +20951,7 @@ static void createSelftestTable(ShellState *p){ "DROP TABLE [_shell$self];" ,0,0,&zErrMsg); if( zErrMsg ){ - utf8_printf(stderr, "SELFTEST initialization failure: %s\n", zErrMsg); + eputf("SELFTEST initialization failure: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_exec(p->db, "RELEASE selftest_init",0,0,0); @@ -18839,8 +21054,8 @@ static int run_table_dump_query( rc = sqlite3_prepare_v2(p->db, zSelect, -1, &pSelect, 0); if( rc!=SQLITE_OK || !pSelect ){ char *zContext = shell_error_context(zSelect, p->db); - utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n%s", rc, - sqlite3_errmsg(p->db), zContext); + oputf("/**** ERROR: (%d) %s *****/\n%s", + rc, sqlite3_errmsg(p->db), zContext); sqlite3_free(zContext); if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++; return rc; @@ -18849,23 +21064,22 @@ static int run_table_dump_query( nResult = sqlite3_column_count(pSelect); while( rc==SQLITE_ROW ){ z = (const char*)sqlite3_column_text(pSelect, 0); - utf8_printf(p->out, "%s", z); + oputf("%s", z); for(i=1; iout, ",%s", sqlite3_column_text(pSelect, i)); + oputf(",%s", sqlite3_column_text(pSelect, i)); } if( z==0 ) z = ""; while( z[0] && (z[0]!='-' || z[1]!='-') ) z++; if( z[0] ){ - raw_printf(p->out, "\n;\n"); + oputz("\n;\n"); }else{ - raw_printf(p->out, ";\n"); + oputz(";\n"); } rc = sqlite3_step(pSelect); } rc = sqlite3_finalize(pSelect); if( rc!=SQLITE_OK ){ - utf8_printf(p->out, "/**** ERROR: (%d) %s *****/\n", rc, - sqlite3_errmsg(p->db)); + oputf("/**** ERROR: (%d) %s *****/\n", rc, sqlite3_errmsg(p->db)); if( (rc&0xff)!=SQLITE_CORRUPT ) p->nErr++; } return rc; @@ -18901,7 +21115,7 @@ static char *save_err_msg( /* ** Attempt to display I/O stats on Linux using /proc/PID/io */ -static void displayLinuxIoStats(FILE *out){ +static void displayLinuxIoStats(void){ FILE *in; char z[200]; sqlite3_snprintf(sizeof(z), z, "/proc/%d/io", getpid()); @@ -18924,7 +21138,7 @@ static void displayLinuxIoStats(FILE *out){ for(i=0; iout, "%-36s %s\n", zLabel, zLine); + oputf("%-36s %s\n", zLabel, zLine); } /* @@ -18969,30 +21182,28 @@ static int display_stats( ){ int iCur; int iHiwtr; - FILE *out; if( pArg==0 || pArg->out==0 ) return 0; - out = pArg->out; if( pArg->pStmt && pArg->statsOn==2 ){ int nCol, i, x; sqlite3_stmt *pStmt = pArg->pStmt; char z[100]; nCol = sqlite3_column_count(pStmt); - raw_printf(out, "%-36s %d\n", "Number of output columns:", nCol); + oputf("%-36s %d\n", "Number of output columns:", nCol); for(i=0; istatsOn==3 ){ if( pArg->pStmt ){ iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP,bReset); - raw_printf(pArg->out, "VM-steps: %d\n", iCur); + oputf("VM-steps: %d\n", iCur); } return 0; } - displayStatLine(pArg, "Memory Used:", + displayStatLine("Memory Used:", "%lld (max %lld) bytes", SQLITE_STATUS_MEMORY_USED, bReset); - displayStatLine(pArg, "Number of Outstanding Allocations:", + displayStatLine("Number of Outstanding Allocations:", "%lld (max %lld)", SQLITE_STATUS_MALLOC_COUNT, bReset); if( pArg->shellFlgs & SHFLG_Pagecache ){ - displayStatLine(pArg, "Number of Pcache Pages Used:", + displayStatLine("Number of Pcache Pages Used:", "%lld (max %lld) pages", SQLITE_STATUS_PAGECACHE_USED, bReset); } - displayStatLine(pArg, "Number of Pcache Overflow Bytes:", + displayStatLine("Number of Pcache Overflow Bytes:", "%lld (max %lld) bytes", SQLITE_STATUS_PAGECACHE_OVERFLOW, bReset); - displayStatLine(pArg, "Largest Allocation:", + displayStatLine("Largest Allocation:", "%lld bytes", SQLITE_STATUS_MALLOC_SIZE, bReset); - displayStatLine(pArg, "Largest Pcache Allocation:", + displayStatLine("Largest Pcache Allocation:", "%lld bytes", SQLITE_STATUS_PAGECACHE_SIZE, bReset); #ifdef YYTRACKMAXSTACKDEPTH - displayStatLine(pArg, "Deepest Parser Stack:", + displayStatLine("Deepest Parser Stack:", "%lld (max %lld)", SQLITE_STATUS_PARSER_STACK, bReset); #endif @@ -19029,77 +21240,68 @@ static int display_stats( iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, - "Lookaside Slots Used: %d (max %d)\n", - iCur, iHiwtr); + oputf("Lookaside Slots Used: %d (max %d)\n", iCur, iHiwtr); sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, "Successful lookaside attempts: %d\n", - iHiwtr); + oputf("Successful lookaside attempts: %d\n", iHiwtr); sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, "Lookaside failures due to size: %d\n", - iHiwtr); + oputf("Lookaside failures due to size: %d\n", iHiwtr); sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, "Lookaside failures due to OOM: %d\n", - iHiwtr); + oputf("Lookaside failures due to OOM: %d\n", iHiwtr); } iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, "Pager Heap Usage: %d bytes\n", - iCur); + oputf("Pager Heap Usage: %d bytes\n", iCur); iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_HIT, &iCur, &iHiwtr, 1); - raw_printf(pArg->out, "Page cache hits: %d\n", iCur); + oputf("Page cache hits: %d\n", iCur); iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_MISS, &iCur, &iHiwtr, 1); - raw_printf(pArg->out, "Page cache misses: %d\n", iCur); + oputf("Page cache misses: %d\n", iCur); iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_WRITE, &iCur, &iHiwtr, 1); - raw_printf(pArg->out, "Page cache writes: %d\n", iCur); + oputf("Page cache writes: %d\n", iCur); iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_SPILL, &iCur, &iHiwtr, 1); - raw_printf(pArg->out, "Page cache spills: %d\n", iCur); + oputf("Page cache spills: %d\n", iCur); iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, "Schema Heap Usage: %d bytes\n", - iCur); + oputf("Schema Heap Usage: %d bytes\n", iCur); iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_STMT_USED, &iCur, &iHiwtr, bReset); - raw_printf(pArg->out, "Statement Heap/Lookaside Usage: %d bytes\n", - iCur); + oputf("Statement Heap/Lookaside Usage: %d bytes\n", iCur); } if( pArg->pStmt ){ int iHit, iMiss; iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, bReset); - raw_printf(pArg->out, "Fullscan Steps: %d\n", iCur); + oputf("Fullscan Steps: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_SORT, bReset); - raw_printf(pArg->out, "Sort Operations: %d\n", iCur); + oputf("Sort Operations: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX,bReset); - raw_printf(pArg->out, "Autoindex Inserts: %d\n", iCur); + oputf("Autoindex Inserts: %d\n", iCur); iHit = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FILTER_HIT, bReset); iMiss = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FILTER_MISS, bReset); if( iHit || iMiss ){ - raw_printf(pArg->out, "Bloom filter bypass taken: %d/%d\n", - iHit, iHit+iMiss); + oputf("Bloom filter bypass taken: %d/%d\n", iHit, iHit+iMiss); } iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset); - raw_printf(pArg->out, "Virtual Machine Steps: %d\n", iCur); + oputf("Virtual Machine Steps: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_REPREPARE,bReset); - raw_printf(pArg->out, "Reprepare operations: %d\n", iCur); + oputf("Reprepare operations: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_RUN, bReset); - raw_printf(pArg->out, "Number of times run: %d\n", iCur); + oputf("Number of times run: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_MEMUSED, bReset); - raw_printf(pArg->out, "Memory used by prepared stmt: %d\n", iCur); + oputf("Memory used by prepared stmt: %d\n", iCur); } #ifdef __linux__ - displayLinuxIoStats(pArg->out); + displayLinuxIoStats(); #endif /* Do not remove this machine readable comment: extra-stats-output-here */ @@ -19154,7 +21356,7 @@ static void display_explain_scanstats( if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&z) ){ break; } - n = strlen(z) + scanStatsHeight(p, ii)*3; + n = (int)strlen(z) + scanStatsHeight(p, ii)*3; if( n>nWidth ) nWidth = n; } nWidth += 4; @@ -19166,12 +21368,12 @@ static void display_explain_scanstats( i64 nCycle = 0; int iId = 0; int iPid = 0; - const char *z = 0; + const char *zo = 0; const char *zName = 0; char *zText = 0; double rEst = 0.0; - if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&z) ){ + if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&zo) ){ break; } sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_EST,f,(void*)&rEst); @@ -19182,7 +21384,7 @@ static void display_explain_scanstats( sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_PARENTID,f,(void*)&iPid); sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_NAME,f,(void*)&zName); - zText = sqlite3_mprintf("%s", z); + zText = sqlite3_mprintf("%s", zo); if( nCycle>=0 || nLoop>=0 || nRow>=0 ){ char *z = 0; if( nCycle>=0 && nTotal>0 ){ @@ -19334,7 +21536,7 @@ static void display_scanstats( UNUSED_PARAMETER(pArg); #else if( pArg->scanstatsOn==3 ){ - const char *zSql = + const char *zSql = " SELECT addr, opcode, p1, p2, p3, p4, p5, comment, nexec," " round(ncycle*100.0 / (sum(ncycle) OVER ()), 2)||'%' AS cycles" " FROM bytecode(?)"; @@ -19480,17 +21682,17 @@ static void bind_prepared_stmt(ShellState *pArg, sqlite3_stmt *pStmt){ /* Draw horizontal line N characters long using unicode box ** characters */ -static void print_box_line(FILE *out, int N){ +static void print_box_line(int N){ const char zDash[] = BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24; const int nDash = sizeof(zDash) - 1; N *= 3; while( N>nDash ){ - utf8_printf(out, zDash); + oputz(zDash); N -= nDash; } - utf8_printf(out, "%.*s", N, zDash); + oputf("%.*s", N, zDash); } /* @@ -19505,15 +21707,15 @@ static void print_box_row_separator( ){ int i; if( nArg>0 ){ - utf8_printf(p->out, "%s", zSep1); - print_box_line(p->out, p->actualWidth[0]+2); + oputz(zSep1); + print_box_line(p->actualWidth[0]+2); for(i=1; iout, "%s", zSep2); - print_box_line(p->out, p->actualWidth[i]+2); + oputz(zSep2); + print_box_line(p->actualWidth[i]+2); } - utf8_printf(p->out, "%s", zSep3); + oputz(zSep3); } - fputs("\n", p->out); + oputz("\n"); } /* @@ -19682,6 +21884,7 @@ static void exec_prepared_stmt_columnar( rc = sqlite3_step(pStmt); if( rc!=SQLITE_ROW ) return; nColumn = sqlite3_column_count(pStmt); + if( nColumn==0 ) goto columnar_end; nAlloc = nColumn*4; if( nAlloc<=0 ) nAlloc = 1; azData = sqlite3_malloc64( nAlloc*sizeof(char*) ); @@ -19767,7 +21970,6 @@ static void exec_prepared_stmt_columnar( if( n>p->actualWidth[j] ) p->actualWidth[j] = n; } if( seenInterrupt ) goto columnar_end; - if( nColumn==0 ) goto columnar_end; switch( p->cMode ){ case MODE_Column: { colSep = " "; @@ -19776,11 +21978,11 @@ static void exec_prepared_stmt_columnar( for(i=0; iactualWidth[i]; if( p->colWidth[i]<0 ) w = -w; - utf8_width_print(p->out, w, azData[i]); + utf8_width_print(w, azData[i]); fputs(i==nColumn-1?"\n":" ", p->out); } for(i=0; iout, p->actualWidth[i]); + print_dashes(p->actualWidth[i]); fputs(i==nColumn-1?"\n":" ", p->out); } } @@ -19794,8 +21996,8 @@ static void exec_prepared_stmt_columnar( for(i=0; iactualWidth[i]; n = strlenChar(azData[i]); - utf8_printf(p->out, "%*s%s%*s", (w-n)/2, "", azData[i], (w-n+1)/2, ""); - fputs(i==nColumn-1?" |\n":" | ", p->out); + oputf("%*s%s%*s", (w-n)/2, "", azData[i], (w-n+1)/2, ""); + oputz(i==nColumn-1?" |\n":" | "); } print_row_separator(p, nColumn, "+"); break; @@ -19807,8 +22009,8 @@ static void exec_prepared_stmt_columnar( for(i=0; iactualWidth[i]; n = strlenChar(azData[i]); - utf8_printf(p->out, "%*s%s%*s", (w-n)/2, "", azData[i], (w-n+1)/2, ""); - fputs(i==nColumn-1?" |\n":" | ", p->out); + oputf("%*s%s%*s", (w-n)/2, "", azData[i], (w-n+1)/2, ""); + oputz(i==nColumn-1?" |\n":" | "); } print_row_separator(p, nColumn, "|"); break; @@ -19817,13 +22019,13 @@ static void exec_prepared_stmt_columnar( colSep = " " BOX_13 " "; rowSep = " " BOX_13 "\n"; print_box_row_separator(p, nColumn, BOX_23, BOX_234, BOX_34); - utf8_printf(p->out, BOX_13 " "); + oputz(BOX_13 " "); for(i=0; iactualWidth[i]; n = strlenChar(azData[i]); - utf8_printf(p->out, "%*s%s%*s%s", - (w-n)/2, "", azData[i], (w-n+1)/2, "", - i==nColumn-1?" "BOX_13"\n":" "BOX_13" "); + oputf("%*s%s%*s%s", + (w-n)/2, "", azData[i], (w-n+1)/2, "", + i==nColumn-1?" "BOX_13"\n":" "BOX_13" "); } print_box_row_separator(p, nColumn, BOX_123, BOX_1234, BOX_134); break; @@ -19831,28 +22033,28 @@ static void exec_prepared_stmt_columnar( } for(i=nColumn, j=0; icMode!=MODE_Column ){ - utf8_printf(p->out, "%s", p->cMode==MODE_Box?BOX_13" ":"| "); + oputz(p->cMode==MODE_Box?BOX_13" ":"| "); } z = azData[i]; if( z==0 ) z = p->nullValue; w = p->actualWidth[j]; if( p->colWidth[j]<0 ) w = -w; - utf8_width_print(p->out, w, z); + utf8_width_print(w, z); if( j==nColumn-1 ){ - utf8_printf(p->out, "%s", rowSep); + oputz(rowSep); if( bMultiLineRowExists && abRowDiv[i/nColumn-1] && i+1cMode==MODE_Table ){ print_row_separator(p, nColumn, "+"); }else if( p->cMode==MODE_Box ){ print_box_row_separator(p, nColumn, BOX_123, BOX_1234, BOX_134); }else if( p->cMode==MODE_Column ){ - raw_printf(p->out, "\n"); + oputz("\n"); } } j = -1; if( seenInterrupt ) goto columnar_end; }else{ - utf8_printf(p->out, "%s", colSep); + oputz(colSep); } } if( p->cMode==MODE_Table ){ @@ -19862,7 +22064,7 @@ static void exec_prepared_stmt_columnar( } columnar_end: if( seenInterrupt ){ - utf8_printf(p->out, "Interrupt\n"); + oputz("Interrupt\n"); } nData = (nRow+1)*nColumn; for(i=0; iout; int bVerbose = pState->expert.bVerbose; rc = sqlite3_expert_analyze(p, pzErr); @@ -20011,8 +22212,8 @@ static int expertFinish( if( bVerbose ){ const char *zCand = sqlite3_expert_report(p,0,EXPERT_REPORT_CANDIDATES); - raw_printf(out, "-- Candidates -----------------------------\n"); - raw_printf(out, "%s\n", zCand); + oputz("-- Candidates -----------------------------\n"); + oputf("%s\n", zCand); } for(i=0; i=2 && 0==cli_strncmp(z, "-sample", n) ){ if( i==(nArg-1) ){ - raw_printf(stderr, "option requires an argument: %s\n", z); + eputf("option requires an argument: %s\n", z); rc = SQLITE_ERROR; }else{ iSample = (int)integerValue(azArg[++i]); if( iSample<0 || iSample>100 ){ - raw_printf(stderr, "value out of range: %s\n", azArg[i]); + eputf("value out of range: %s\n", azArg[i]); rc = SQLITE_ERROR; } } } else{ - raw_printf(stderr, "unknown option: %s\n", z); + eputf("unknown option: %s\n", z); rc = SQLITE_ERROR; } } @@ -20078,8 +22279,7 @@ static int expertDotCommand( if( rc==SQLITE_OK ){ pState->expert.pExpert = sqlite3_expert_new(pState->db, &zErr); if( pState->expert.pExpert==0 ){ - raw_printf(stderr, "sqlite3_expert_new: %s\n", - zErr ? zErr : "out of memory"); + eputf("sqlite3_expert_new: %s\n", zErr ? zErr : "out of memory"); rc = SQLITE_ERROR; }else{ sqlite3_expert_config( @@ -20406,9 +22606,9 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ noSys = (p->shellFlgs & SHFLG_DumpNoSys)!=0; if( cli_strcmp(zTable, "sqlite_sequence")==0 && !noSys ){ - if( !dataOnly ) raw_printf(p->out, "DELETE FROM sqlite_sequence;\n"); + if( !dataOnly ) oputz("DELETE FROM sqlite_sequence;\n"); }else if( sqlite3_strglob("sqlite_stat?", zTable)==0 && !noSys ){ - if( !dataOnly ) raw_printf(p->out, "ANALYZE sqlite_schema;\n"); + if( !dataOnly ) oputz("ANALYZE sqlite_schema;\n"); }else if( cli_strncmp(zTable, "sqlite_", 7)==0 ){ return 0; }else if( dataOnly ){ @@ -20416,7 +22616,7 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ }else if( cli_strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){ char *zIns; if( !p->writableSchema ){ - raw_printf(p->out, "PRAGMA writable_schema=ON;\n"); + oputz("PRAGMA writable_schema=ON;\n"); p->writableSchema = 1; } zIns = sqlite3_mprintf( @@ -20424,11 +22624,11 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ "VALUES('table','%q','%q',0,'%q');", zTable, zTable, zSql); shell_check_oom(zIns); - utf8_printf(p->out, "%s\n", zIns); + oputf("%s\n", zIns); sqlite3_free(zIns); return 0; }else{ - printSchemaLine(p->out, zSql, ";\n"); + printSchemaLine(zSql, ";\n"); } if( cli_strcmp(zType, "table")==0 ){ @@ -20486,7 +22686,7 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ p->mode = p->cMode = MODE_Insert; rc = shell_exec(p, sSelect.z, 0); if( (rc&0xff)==SQLITE_CORRUPT ){ - raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n"); + oputz("/****** CORRUPTION ERROR *******/\n"); toggleSelectOrder(p->db); shell_exec(p, sSelect.z, 0); toggleSelectOrder(p->db); @@ -20517,9 +22717,9 @@ static int run_schema_dump_query( if( rc==SQLITE_CORRUPT ){ char *zQ2; int len = strlen30(zQuery); - raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n"); + oputz("/****** CORRUPTION ERROR *******/\n"); if( zErr ){ - utf8_printf(p->out, "/****** %s ******/\n", zErr); + oputf("/****** %s ******/\n", zErr); sqlite3_free(zErr); zErr = 0; } @@ -20528,7 +22728,7 @@ static int run_schema_dump_query( sqlite3_snprintf(len+100, zQ2, "%s ORDER BY rowid DESC", zQuery); rc = sqlite3_exec(p->db, zQ2, dump_callback, p, &zErr); if( rc ){ - utf8_printf(p->out, "/****** ERROR: %s ******/\n", zErr); + oputf("/****** ERROR: %s ******/\n", zErr); }else{ rc = SQLITE_CORRUPT; } @@ -20652,6 +22852,7 @@ static const char *(azHelp[]) = { ".indexes ?TABLE? Show names of indexes", " If TABLE is specified, only show indexes for", " tables matching TABLE using the LIKE operator.", + ".intck ?STEPS_PER_UNLOCK? Run an incremental integrity check on the db", #ifdef SQLITE_ENABLE_IOTRACE ",iotrace FILE Enable I/O diagnostic logging to FILE", #endif @@ -20884,10 +23085,10 @@ static int showHelp(FILE *out, const char *zPattern){ } if( ((hw^hh)&HH_Undoc)==0 ){ if( (hh&HH_Summary)!=0 ){ - utf8_printf(out, ".%s\n", azHelp[i]+1); + sputf(out, ".%s\n", azHelp[i]+1); ++n; }else if( (hw&HW_SummaryOnly)==0 ){ - utf8_printf(out, "%s\n", azHelp[i]); + sputf(out, "%s\n", azHelp[i]); } } } @@ -20897,7 +23098,7 @@ static int showHelp(FILE *out, const char *zPattern){ shell_check_oom(zPat); for(i=0; i65536 || (pgsz & (pgsz-1))!=0 ){ - utf8_printf(stderr, "invalid pagesize\n"); + eputz("invalid pagesize\n"); goto readHexDb_error; } for(nLine++; fgets(zLine, sizeof(zLine), in)!=0; nLine++){ @@ -21166,7 +23367,7 @@ static unsigned char *readHexDb(ShellState *p, int *pnData){ p->lineno = nLine; } sqlite3_free(a); - utf8_printf(stderr,"Error on line %d of --hexdb input\n", nLine); + eputf("Error on line %d of --hexdb input\n", nLine); return 0; } #endif /* SQLITE_OMIT_DESERIALIZE */ @@ -21240,26 +23441,23 @@ static void open_db(ShellState *p, int openFlags){ break; } } - globalDb = p->db; if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ - utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n", - zDbFilename, sqlite3_errmsg(p->db)); + eputf("Error: unable to open database \"%s\": %s\n", + zDbFilename, sqlite3_errmsg(p->db)); if( (openFlags & OPEN_DB_KEEPALIVE)==0 ){ exit(1); } sqlite3_close(p->db); sqlite3_open(":memory:", &p->db); if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ - utf8_printf(stderr, - "Also: unable to open substitute in-memory database.\n" - ); + eputz("Also: unable to open substitute in-memory database.\n"); exit(1); }else{ - utf8_printf(stderr, - "Notice: using substitute in-memory database instead of \"%s\"\n", - zDbFilename); + eputf("Notice: using substitute in-memory database instead of \"%s\"\n", + zDbFilename); } } + globalDb = p->db; sqlite3_db_config(p->db, SQLITE_DBCONFIG_STMT_SCANSTATUS, (int)0, (int*)0); /* Reflect the use or absence of --unsafe-testing invocation. */ @@ -21364,7 +23562,7 @@ static void open_db(ShellState *p, int openFlags){ SQLITE_DESERIALIZE_RESIZEABLE | SQLITE_DESERIALIZE_FREEONCLOSE); if( rc ){ - utf8_printf(stderr, "Error: sqlite3_deserialize() returns %d\n", rc); + eputf("Error: sqlite3_deserialize() returns %d\n", rc); } if( p->szMax>0 ){ sqlite3_file_control(p->db, "main", SQLITE_FCNTL_SIZE_LIMIT, &p->szMax); @@ -21388,8 +23586,7 @@ static void open_db(ShellState *p, int openFlags){ void close_db(sqlite3 *db){ int rc = sqlite3_close(db); if( rc ){ - utf8_printf(stderr, "Error: sqlite3_close() returns %d: %s\n", - rc, sqlite3_errmsg(db)); + eputf("Error: sqlite3_close() returns %d: %s\n", rc, sqlite3_errmsg(db)); } } @@ -21550,8 +23747,7 @@ static int booleanValue(const char *zArg){ if( sqlite3_stricmp(zArg, "off")==0 || sqlite3_stricmp(zArg,"no")==0 ){ return 0; } - utf8_printf(stderr, "ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n", - zArg); + eputf("ERROR: Not a boolean value: \"%s\". Assuming \"no\".\n", zArg); return 0; } @@ -21589,7 +23785,7 @@ static FILE *output_file_open(const char *zFile, int bTextMode){ }else{ f = fopen(zFile, bTextMode ? "w" : "wb"); if( f==0 ){ - utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile); + eputf("Error: cannot open \"%s\"\n", zFile); } } return f; @@ -21611,7 +23807,7 @@ static int sql_trace_callback( i64 nSql; if( p->traceOut==0 ) return 0; if( mType==SQLITE_TRACE_CLOSE ){ - utf8_printf(p->traceOut, "-- closing database connection\n"); + sputz(p->traceOut, "-- closing database connection\n"); return 0; } if( mType!=SQLITE_TRACE_ROW && pX!=0 && ((const char*)pX)[0]=='-' ){ @@ -21642,12 +23838,12 @@ static int sql_trace_callback( switch( mType ){ case SQLITE_TRACE_ROW: case SQLITE_TRACE_STMT: { - utf8_printf(p->traceOut, "%.*s;\n", (int)nSql, zSql); + sputf(p->traceOut, "%.*s;\n", (int)nSql, zSql); break; } case SQLITE_TRACE_PROFILE: { sqlite3_int64 nNanosec = pX ? *(sqlite3_int64*)pX : 0; - utf8_printf(p->traceOut, "%.*s; -- %lld ns\n", (int)nSql, zSql, nNanosec); + sputf(p->traceOut, "%.*s; -- %lld ns\n", (int)nSql, zSql, nNanosec); break; } } @@ -21754,12 +23950,11 @@ static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){ break; } if( pc==cQuote && c!='\r' ){ - utf8_printf(stderr, "%s:%d: unescaped %c character\n", - p->zFile, p->nLine, cQuote); + eputf("%s:%d: unescaped %c character\n", p->zFile, p->nLine, cQuote); } if( c==EOF ){ - utf8_printf(stderr, "%s:%d: unterminated %c-quoted field\n", - p->zFile, startLine, cQuote); + eputf("%s:%d: unterminated %c-quoted field\n", + p->zFile, startLine, cQuote); p->cTerm = c; break; } @@ -21857,9 +24052,8 @@ static void tryToCloneData( shell_check_oom(zQuery); rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); if( rc ){ - utf8_printf(stderr, "Error %d: %s on [%s]\n", - sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), - zQuery); + eputf("Error %d: %s on [%s]\n", + sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), zQuery); goto end_data_xfer; } n = sqlite3_column_count(pQuery); @@ -21875,9 +24069,8 @@ static void tryToCloneData( memcpy(zInsert+i, ");", 3); rc = sqlite3_prepare_v2(newDb, zInsert, -1, &pInsert, 0); if( rc ){ - utf8_printf(stderr, "Error %d: %s on [%s]\n", - sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb), - zInsert); + eputf("Error %d: %s on [%s]\n", + sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb), zInsert); goto end_data_xfer; } for(k=0; k<2; k++){ @@ -21912,8 +24105,8 @@ static void tryToCloneData( } /* End for */ rc = sqlite3_step(pInsert); if( rc!=SQLITE_OK && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ - utf8_printf(stderr, "Error %d: %s\n", sqlite3_extended_errcode(newDb), - sqlite3_errmsg(newDb)); + eputf("Error %d: %s\n", + sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb)); } sqlite3_reset(pInsert); cnt++; @@ -21930,7 +24123,7 @@ static void tryToCloneData( shell_check_oom(zQuery); rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); if( rc ){ - utf8_printf(stderr, "Warning: cannot step \"%s\" backwards", zTable); + eputf("Warning: cannot step \"%s\" backwards", zTable); break; } } /* End for(k=0...) */ @@ -21967,9 +24160,8 @@ static void tryToCloneSchema( shell_check_oom(zQuery); rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); if( rc ){ - utf8_printf(stderr, "Error: (%d) %s on [%s]\n", - sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), - zQuery); + eputf("Error: (%d) %s on [%s]\n", sqlite3_extended_errcode(p->db), + sqlite3_errmsg(p->db), zQuery); goto end_schema_xfer; } while( (rc = sqlite3_step(pQuery))==SQLITE_ROW ){ @@ -21977,10 +24169,10 @@ static void tryToCloneSchema( zSql = sqlite3_column_text(pQuery, 1); if( zName==0 || zSql==0 ) continue; if( sqlite3_stricmp((char*)zName, "sqlite_sequence")!=0 ){ - printf("%s... ", zName); fflush(stdout); + sputf(stdout, "%s... ", zName); fflush(stdout); sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); if( zErrMsg ){ - utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); + eputf("Error: %s\nSQL: [%s]\n", zErrMsg, zSql); sqlite3_free(zErrMsg); zErrMsg = 0; } @@ -21988,7 +24180,7 @@ static void tryToCloneSchema( if( xForEach ){ xForEach(p, newDb, (const char*)zName); } - printf("done\n"); + sputz(stdout, "done\n"); } if( rc!=SQLITE_DONE ){ sqlite3_finalize(pQuery); @@ -21998,9 +24190,8 @@ static void tryToCloneSchema( shell_check_oom(zQuery); rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); if( rc ){ - utf8_printf(stderr, "Error: (%d) %s on [%s]\n", - sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), - zQuery); + eputf("Error: (%d) %s on [%s]\n", + sqlite3_extended_errcode(p->db), sqlite3_errmsg(p->db), zQuery); goto end_schema_xfer; } while( sqlite3_step(pQuery)==SQLITE_ROW ){ @@ -22008,17 +24199,17 @@ static void tryToCloneSchema( zSql = sqlite3_column_text(pQuery, 1); if( zName==0 || zSql==0 ) continue; if( sqlite3_stricmp((char*)zName, "sqlite_sequence")==0 ) continue; - printf("%s... ", zName); fflush(stdout); + sputf(stdout, "%s... ", zName); fflush(stdout); sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); if( zErrMsg ){ - utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); + eputf("Error: %s\nSQL: [%s]\n", zErrMsg, zSql); sqlite3_free(zErrMsg); zErrMsg = 0; } if( xForEach ){ xForEach(p, newDb, (const char*)zName); } - printf("done\n"); + sputz(stdout, "done\n"); } } end_schema_xfer: @@ -22035,13 +24226,12 @@ static void tryToClone(ShellState *p, const char *zNewDb){ int rc; sqlite3 *newDb = 0; if( access(zNewDb,0)==0 ){ - utf8_printf(stderr, "File \"%s\" already exists.\n", zNewDb); + eputf("File \"%s\" already exists.\n", zNewDb); return; } rc = sqlite3_open(zNewDb, &newDb); if( rc ){ - utf8_printf(stderr, "Cannot create output database: %s\n", - sqlite3_errmsg(newDb)); + eputf("Cannot create output database: %s\n", sqlite3_errmsg(newDb)); }else{ sqlite3_exec(p->db, "PRAGMA writable_schema=ON;", 0, 0, 0); sqlite3_exec(newDb, "BEGIN EXCLUSIVE;", 0, 0, 0); @@ -22053,6 +24243,18 @@ static void tryToClone(ShellState *p, const char *zNewDb){ close_db(newDb); } +#ifndef SQLITE_SHELL_FIDDLE +/* +** Change the output stream (file or pipe or console) to something else. +*/ +static void output_redir(ShellState *p, FILE *pfNew){ + if( p->out != stdout ) eputz("Output already redirected.\n"); + else{ + p->out = pfNew; + setOutputStream(pfNew); + } +} + /* ** Change the output file back to stdout. ** @@ -22080,7 +24282,7 @@ static void output_reset(ShellState *p){ char *zCmd; zCmd = sqlite3_mprintf("%s %s", zXdgOpenCmd, p->zTempFile); if( system(zCmd) ){ - utf8_printf(stderr, "Failed: [%s]\n", zCmd); + eputf("Failed: [%s]\n", zCmd); }else{ /* Give the start/open/xdg-open command some time to get ** going before we continue, and potential delete the @@ -22095,7 +24297,12 @@ static void output_reset(ShellState *p){ } p->outfile[0] = 0; p->out = stdout; + setOutputStream(stdout); } +#else +# define output_redir(SS,pfO) +# define output_reset(SS) +#endif /* ** Run an SQL command and return the single integer result. @@ -22166,7 +24373,7 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ "SELECT data FROM sqlite_dbpage(?1) WHERE pgno=1", -1, &pStmt, 0); if( rc ){ - utf8_printf(stderr, "error: %s\n", sqlite3_errmsg(p->db)); + eputf("error: %s\n", sqlite3_errmsg(p->db)); sqlite3_finalize(pStmt); return 1; } @@ -22179,28 +24386,28 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ memcpy(aHdr, pb, 100); sqlite3_finalize(pStmt); }else{ - raw_printf(stderr, "unable to read database header\n"); + eputz("unable to read database header\n"); sqlite3_finalize(pStmt); return 1; } i = get2byteInt(aHdr+16); if( i==1 ) i = 65536; - utf8_printf(p->out, "%-20s %d\n", "database page size:", i); - utf8_printf(p->out, "%-20s %d\n", "write format:", aHdr[18]); - utf8_printf(p->out, "%-20s %d\n", "read format:", aHdr[19]); - utf8_printf(p->out, "%-20s %d\n", "reserved bytes:", aHdr[20]); + oputf("%-20s %d\n", "database page size:", i); + oputf("%-20s %d\n", "write format:", aHdr[18]); + oputf("%-20s %d\n", "read format:", aHdr[19]); + oputf("%-20s %d\n", "reserved bytes:", aHdr[20]); for(i=0; iout, "%-20s %u", aField[i].zName, val); + oputf("%-20s %u", aField[i].zName, val); switch( ofst ){ case 56: { - if( val==1 ) raw_printf(p->out, " (utf8)"); - if( val==2 ) raw_printf(p->out, " (utf16le)"); - if( val==3 ) raw_printf(p->out, " (utf16be)"); + if( val==1 ) oputz(" (utf8)"); + if( val==2 ) oputz(" (utf16le)"); + if( val==3 ) oputz(" (utf16be)"); } } - raw_printf(p->out, "\n"); + oputz("\n"); } if( zDb==0 ){ zSchemaTab = sqlite3_mprintf("main.sqlite_schema"); @@ -22213,11 +24420,11 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ char *zSql = sqlite3_mprintf(aQuery[i].zSql, zSchemaTab); int val = db_int(p->db, zSql); sqlite3_free(zSql); - utf8_printf(p->out, "%-20s %d\n", aQuery[i].zName, val); + oputf("%-20s %d\n", aQuery[i].zName, val); } sqlite3_free(zSchemaTab); sqlite3_file_control(p->db, zDb, SQLITE_FCNTL_DATA_VERSION, &iDataVersion); - utf8_printf(p->out, "%-20s %u\n", "data version", iDataVersion); + oputf("%-20s %u\n", "data version", iDataVersion); return 0; } #endif /* SQLITE_SHELL_HAVE_RECOVER */ @@ -22227,7 +24434,7 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ */ static int shellDatabaseError(sqlite3 *db){ const char *zErr = sqlite3_errmsg(db); - utf8_printf(stderr, "Error: %s\n", zErr); + eputf("Error: %s\n", zErr); return 1; } @@ -22462,7 +24669,6 @@ static int lintFkeyIndexes( int nArg /* Number of entries in azArg[] */ ){ sqlite3 *db = pState->db; /* Database handle to query "main" db of */ - FILE *out = pState->out; /* Stream to write non-error output to */ int bVerbose = 0; /* If -verbose is present */ int bGroupByParent = 0; /* If -groupbyparent is present */ int i; /* To iterate through azArg[] */ @@ -22544,9 +24750,7 @@ static int lintFkeyIndexes( zIndent = " "; } else{ - raw_printf(stderr, "Usage: %s %s ?-verbose? ?-groupbyparent?\n", - azArg[0], azArg[1] - ); + eputf("Usage: %s %s ?-verbose? ?-groupbyparent?\n", azArg[0], azArg[1]); return SQLITE_ERROR; } } @@ -22590,23 +24794,23 @@ static int lintFkeyIndexes( if( rc!=SQLITE_OK ) break; if( res<0 ){ - raw_printf(stderr, "Error: internal error"); + eputz("Error: internal error"); break; }else{ if( bGroupByParent && (bVerbose || res==0) && (zPrev==0 || sqlite3_stricmp(zParent, zPrev)) ){ - raw_printf(out, "-- Parent table %s\n", zParent); + oputf("-- Parent table %s\n", zParent); sqlite3_free(zPrev); zPrev = sqlite3_mprintf("%s", zParent); } if( res==0 ){ - raw_printf(out, "%s%s --> %s\n", zIndent, zCI, zTarget); + oputf("%s%s --> %s\n", zIndent, zCI, zTarget); }else if( bVerbose ){ - raw_printf(out, "%s/* no extra indexes required for %s -> %s */\n", - zIndent, zFrom, zTarget + oputf("%s/* no extra indexes required for %s -> %s */\n", + zIndent, zFrom, zTarget ); } } @@ -22614,16 +24818,16 @@ static int lintFkeyIndexes( sqlite3_free(zPrev); if( rc!=SQLITE_OK ){ - raw_printf(stderr, "%s\n", sqlite3_errmsg(db)); + eputf("%s\n", sqlite3_errmsg(db)); } rc2 = sqlite3_finalize(pSql); if( rc==SQLITE_OK && rc2!=SQLITE_OK ){ rc = rc2; - raw_printf(stderr, "%s\n", sqlite3_errmsg(db)); + eputf("%s\n", sqlite3_errmsg(db)); } }else{ - raw_printf(stderr, "%s\n", sqlite3_errmsg(db)); + eputf("%s\n", sqlite3_errmsg(db)); } return rc; @@ -22643,13 +24847,12 @@ static int lintDotCommand( return lintFkeyIndexes(pState, azArg, nArg); usage: - raw_printf(stderr, "Usage %s sub-command ?switches...?\n", azArg[0]); - raw_printf(stderr, "Where sub-commands are:\n"); - raw_printf(stderr, " fkey-indexes\n"); + eputf("Usage %s sub-command ?switches...?\n", azArg[0]); + eputz("Where sub-commands are:\n"); + eputz(" fkey-indexes\n"); return SQLITE_ERROR; } -#if !defined SQLITE_OMIT_VIRTUALTABLE static void shellPrepare( sqlite3 *db, int *pRc, @@ -22660,9 +24863,7 @@ static void shellPrepare( if( *pRc==SQLITE_OK ){ int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); if( rc!=SQLITE_OK ){ - raw_printf(stderr, "sql error: %s (%d)\n", - sqlite3_errmsg(db), sqlite3_errcode(db) - ); + eputf("sql error: %s (%d)\n", sqlite3_errmsg(db), sqlite3_errcode(db)); *pRc = rc; } } @@ -22670,12 +24871,8 @@ static void shellPrepare( /* ** Create a prepared statement using printf-style arguments for the SQL. -** -** This routine is could be marked "static". But it is not always used, -** depending on compile-time options. By omitting the "static", we avoid -** nuisance compiler warnings about "defined but not used". */ -void shellPreparePrintf( +static void shellPreparePrintf( sqlite3 *db, int *pRc, sqlite3_stmt **ppStmt, @@ -22698,13 +24895,10 @@ void shellPreparePrintf( } } -/* Finalize the prepared statement created using shellPreparePrintf(). -** -** This routine is could be marked "static". But it is not always used, -** depending on compile-time options. By omitting the "static", we avoid -** nuisance compiler warnings about "defined but not used". +/* +** Finalize the prepared statement created using shellPreparePrintf(). */ -void shellFinalize( +static void shellFinalize( int *pRc, sqlite3_stmt *pStmt ){ @@ -22713,13 +24907,14 @@ void shellFinalize( int rc = sqlite3_finalize(pStmt); if( *pRc==SQLITE_OK ){ if( rc!=SQLITE_OK ){ - raw_printf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); + eputf("SQL error: %s\n", sqlite3_errmsg(db)); } *pRc = rc; } } } +#if !defined SQLITE_OMIT_VIRTUALTABLE /* Reset the prepared statement created using shellPreparePrintf(). ** ** This routine is could be marked "static". But it is not always used, @@ -22734,7 +24929,7 @@ void shellReset( if( *pRc==SQLITE_OK ){ if( rc!=SQLITE_OK ){ sqlite3 *db = sqlite3_db_handle(pStmt); - raw_printf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); + eputf("SQL error: %s\n", sqlite3_errmsg(db)); } *pRc = rc; } @@ -22784,11 +24979,11 @@ static int arErrorMsg(ArCommand *pAr, const char *zFmt, ...){ va_start(ap, zFmt); z = sqlite3_vmprintf(zFmt, ap); va_end(ap); - utf8_printf(stderr, "Error: %s\n", z); + eputf("Error: %s\n", z); if( pAr->fromCmdLine ){ - utf8_printf(stderr, "Use \"-A\" for more help\n"); + eputz("Use \"-A\" for more help\n"); }else{ - utf8_printf(stderr, "Use \".archive --help\" for more help\n"); + eputz("Use \".archive --help\" for more help\n"); } sqlite3_free(z); return SQLITE_ERROR; @@ -22888,7 +25083,7 @@ static int arParseCommand( struct ArSwitch *pEnd = &aSwitch[nSwitch]; if( nArg<=1 ){ - utf8_printf(stderr, "Wrong number of arguments. Usage:\n"); + eputz("Wrong number of arguments. Usage:\n"); return arUsage(stderr); }else{ char *z = azArg[1]; @@ -22994,7 +25189,7 @@ static int arParseCommand( } } if( pAr->eCmd==0 ){ - utf8_printf(stderr, "Required argument missing. Usage:\n"); + eputz("Required argument missing. Usage:\n"); return arUsage(stderr); } return SQLITE_OK; @@ -23037,7 +25232,7 @@ static int arCheckEntries(ArCommand *pAr){ } shellReset(&rc, pTest); if( rc==SQLITE_OK && bOk==0 ){ - utf8_printf(stderr, "not found in archive: %s\n", z); + eputf("not found in archive: %s\n", z); rc = SQLITE_ERROR; } } @@ -23104,18 +25299,15 @@ static int arListCommand(ArCommand *pAr){ shellPreparePrintf(pAr->db, &rc, &pSql, zSql, azCols[pAr->bVerbose], pAr->zSrcTable, zWhere); if( pAr->bDryRun ){ - utf8_printf(pAr->p->out, "%s\n", sqlite3_sql(pSql)); + oputf("%s\n", sqlite3_sql(pSql)); }else{ while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ if( pAr->bVerbose ){ - utf8_printf(pAr->p->out, "%s % 10d %s %s\n", - sqlite3_column_text(pSql, 0), - sqlite3_column_int(pSql, 1), - sqlite3_column_text(pSql, 2), - sqlite3_column_text(pSql, 3) - ); + oputf("%s % 10d %s %s\n", + sqlite3_column_text(pSql, 0), sqlite3_column_int(pSql, 1), + sqlite3_column_text(pSql, 2),sqlite3_column_text(pSql, 3)); }else{ - utf8_printf(pAr->p->out, "%s\n", sqlite3_column_text(pSql, 0)); + oputf("%s\n", sqlite3_column_text(pSql, 0)); } } } @@ -23124,7 +25316,6 @@ static int arListCommand(ArCommand *pAr){ return rc; } - /* ** Implementation of .ar "Remove" command. */ @@ -23143,7 +25334,7 @@ static int arRemoveCommand(ArCommand *pAr){ zSql = sqlite3_mprintf("DELETE FROM %s WHERE %s;", pAr->zSrcTable, zWhere); if( pAr->bDryRun ){ - utf8_printf(pAr->p->out, "%s\n", zSql); + oputf("%s\n", zSql); }else{ char *zErr = 0; rc = sqlite3_exec(pAr->db, "SAVEPOINT ar;", 0, 0, 0); @@ -23156,7 +25347,7 @@ static int arRemoveCommand(ArCommand *pAr){ } } if( zErr ){ - utf8_printf(stdout, "ERROR: %s\n", zErr); + sputf(stdout, "ERROR: %s\n", zErr); /* stdout? */ sqlite3_free(zErr); } } @@ -23220,11 +25411,11 @@ static int arExtractCommand(ArCommand *pAr){ j = sqlite3_bind_parameter_index(pSql, "$dirOnly"); sqlite3_bind_int(pSql, j, i); if( pAr->bDryRun ){ - utf8_printf(pAr->p->out, "%s\n", sqlite3_sql(pSql)); + oputf("%s\n", sqlite3_sql(pSql)); }else{ while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ if( i==0 && pAr->bVerbose ){ - utf8_printf(pAr->p->out, "%s\n", sqlite3_column_text(pSql, 0)); + oputf("%s\n", sqlite3_column_text(pSql, 0)); } } } @@ -23244,13 +25435,13 @@ static int arExtractCommand(ArCommand *pAr){ static int arExecSql(ArCommand *pAr, const char *zSql){ int rc; if( pAr->bDryRun ){ - utf8_printf(pAr->p->out, "%s\n", zSql); + oputf("%s\n", zSql); rc = SQLITE_OK; }else{ char *zErr = 0; rc = sqlite3_exec(pAr->db, zSql, 0, 0, &zErr); if( zErr ){ - utf8_printf(stdout, "ERROR: %s\n", zErr); + sputf(stdout, "ERROR: %s\n", zErr); sqlite3_free(zErr); } } @@ -23425,15 +25616,13 @@ static int arDotCommand( } cmd.db = 0; if( cmd.bDryRun ){ - utf8_printf(pState->out, "-- open database '%s'%s\n", cmd.zFile, - eDbType==SHELL_OPEN_APPENDVFS ? " using 'apndvfs'" : ""); + oputf("-- open database '%s'%s\n", cmd.zFile, + eDbType==SHELL_OPEN_APPENDVFS ? " using 'apndvfs'" : ""); } rc = sqlite3_open_v2(cmd.zFile, &cmd.db, flags, eDbType==SHELL_OPEN_APPENDVFS ? "apndvfs" : 0); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "cannot open file: %s (%s)\n", - cmd.zFile, sqlite3_errmsg(cmd.db) - ); + eputf("cannot open file: %s (%s)\n", cmd.zFile, sqlite3_errmsg(cmd.db)); goto end_ar_command; } sqlite3_fileio_init(cmd.db, 0, 0); @@ -23446,7 +25635,7 @@ static int arDotCommand( if( cmd.eCmd!=AR_CMD_CREATE && sqlite3_table_column_metadata(cmd.db,0,"sqlar","name",0,0,0,0,0) ){ - utf8_printf(stderr, "database does not contain an 'sqlar' table\n"); + eputz("database does not contain an 'sqlar' table\n"); rc = SQLITE_ERROR; goto end_ar_command; } @@ -23504,7 +25693,7 @@ static int arDotCommand( */ static int recoverSqlCb(void *pCtx, const char *zSql){ ShellState *pState = (ShellState*)pCtx; - utf8_printf(pState->out, "%s;\n", zSql); + sputf(pState->out, "%s;\n", zSql); return SQLITE_OK; } @@ -23547,7 +25736,7 @@ static int recoverDatabaseCmd(ShellState *pState, int nArg, char **azArg){ bRowids = 0; } else{ - utf8_printf(stderr, "unexpected option: %s\n", azArg[i]); + eputf("unexpected option: %s\n", azArg[i]); showHelp(pState->out, azArg[0]); return 1; } @@ -23566,13 +25755,47 @@ static int recoverDatabaseCmd(ShellState *pState, int nArg, char **azArg){ if( sqlite3_recover_errcode(p)!=SQLITE_OK ){ const char *zErr = sqlite3_recover_errmsg(p); int errCode = sqlite3_recover_errcode(p); - raw_printf(stderr, "sql error: %s (%d)\n", zErr, errCode); + eputf("sql error: %s (%d)\n", zErr, errCode); } rc = sqlite3_recover_finish(p); return rc; } #endif /* SQLITE_SHELL_HAVE_RECOVER */ +/* +** Implementation of ".intck STEPS_PER_UNLOCK" command. +*/ +static int intckDatabaseCmd(ShellState *pState, i64 nStepPerUnlock){ + sqlite3_intck *p = 0; + int rc = SQLITE_OK; + + rc = sqlite3_intck_open(pState->db, "main", &p); + if( rc==SQLITE_OK ){ + i64 nStep = 0; + i64 nError = 0; + const char *zErr = 0; + while( SQLITE_OK==sqlite3_intck_step(p) ){ + const char *zMsg = sqlite3_intck_message(p); + if( zMsg ){ + oputf("%s\n", zMsg); + nError++; + } + nStep++; + if( nStepPerUnlock && (nStep % nStepPerUnlock)==0 ){ + sqlite3_intck_unlock(p); + } + } + rc = sqlite3_intck_error(p, &zErr); + if( zErr ){ + eputf("%s\n", zErr); + } + sqlite3_intck_close(p); + + oputf("%lld steps, %lld errors\n", nStep, nError); + } + + return rc; +} /* * zAutoColumn(zCol, &db, ?) => Maybe init db, add column zCol to it. @@ -23591,7 +25814,7 @@ static int recoverDatabaseCmd(ShellState *pState, int nArg, char **azArg){ #define rc_err_oom_die(rc) \ if( rc==SQLITE_NOMEM ) shell_check_oom(0); \ else if(!(rc==SQLITE_OK||rc==SQLITE_DONE)) \ - fprintf(stderr,"E:%d\n",rc), assert(0) + eputf("E:%d\n",rc), assert(0) #else static void rc_err_oom_die(int rc){ if( rc==SQLITE_NOMEM ) shell_check_oom(0); @@ -23731,6 +25954,7 @@ FROM (\ sqlite3_exec(*pDb,"drop table if exists ColNames;" "drop view if exists RepeatedNames;",0,0,0); #endif +#undef SHELL_COLFIX_DB rc = sqlite3_exec(*pDb, zTabMake, 0, 0, 0); rc_err_oom_die(rc); } @@ -23791,6 +26015,69 @@ FROM (\ } } +/* +** Check if the sqlite_schema table contains one or more virtual tables. If +** parameter zLike is not NULL, then it is an SQL expression that the +** sqlite_schema row must also match. If one or more such rows are found, +** print the following warning to the output: +** +** WARNING: Script requires that SQLITE_DBCONFIG_DEFENSIVE be disabled +*/ +static int outputDumpWarning(ShellState *p, const char *zLike){ + int rc = SQLITE_OK; + sqlite3_stmt *pStmt = 0; + shellPreparePrintf(p->db, &rc, &pStmt, + "SELECT 1 FROM sqlite_schema o WHERE " + "sql LIKE 'CREATE VIRTUAL TABLE%%' AND %s", zLike ? zLike : "true" + ); + if( rc==SQLITE_OK && sqlite3_step(pStmt)==SQLITE_ROW ){ + oputz("/* WARNING: " + "Script requires that SQLITE_DBCONFIG_DEFENSIVE be disabled */\n" + ); + } + shellFinalize(&rc, pStmt); + return rc; +} + +/* +** Fault-Simulator state and logic. +*/ +static struct { + int iId; /* ID that triggers a simulated fault. -1 means "any" */ + int iErr; /* The error code to return on a fault */ + int iCnt; /* Trigger the fault only if iCnt is already zero */ + int iInterval; /* Reset iCnt to this value after each fault */ + int eVerbose; /* When to print output */ + int nHit; /* Number of hits seen so far */ + int nRepeat; /* Turn off after this many hits. 0 for never */ + int nSkip; /* Skip this many before first fault */ +} faultsim_state = {-1, 0, 0, 0, 0, 0, 0, 0}; + +/* +** This is the fault-sim callback +*/ +static int faultsim_callback(int iArg){ + if( faultsim_state.iId>0 && faultsim_state.iId!=iArg ){ + return SQLITE_OK; + } + if( faultsim_state.iCnt ){ + if( faultsim_state.iCnt>0 ) faultsim_state.iCnt--; + if( faultsim_state.eVerbose>=2 ){ + oputf("FAULT-SIM id=%d no-fault (cnt=%d)\n", iArg, faultsim_state.iCnt); + } + return SQLITE_OK; + } + if( faultsim_state.eVerbose>=1 ){ + oputf("FAULT-SIM id=%d returns %d\n", iArg, faultsim_state.iErr); + } + faultsim_state.iCnt = faultsim_state.iInterval; + faultsim_state.nHit++; + if( faultsim_state.nRepeat>0 && faultsim_state.nRepeat<=faultsim_state.nHit ){ + faultsim_state.iCnt = -1; + } + return faultsim_state.iErr; +} + /* ** If an input line begins with "." then invoke this routine to ** process that line. @@ -23830,7 +26117,6 @@ static int do_meta_command(char *zLine, ShellState *p){ azArg[nArg++] = &zLine[h]; while( zLine[h] && !IsSpace(zLine[h]) ){ h++; } if( zLine[h] ) zLine[h++] = 0; - resolve_backslashes(azArg[nArg-1]); } } azArg[nArg] = 0; @@ -23845,7 +26131,7 @@ static int do_meta_command(char *zLine, ShellState *p){ #ifndef SQLITE_OMIT_AUTHORIZATION if( c=='a' && cli_strncmp(azArg[0], "auth", n)==0 ){ if( nArg!=2 ){ - raw_printf(stderr, "Usage: .auth ON|OFF\n"); + eputz("Usage: .auth ON|OFF\n"); rc = 1; goto meta_command_exit; } @@ -23892,7 +26178,7 @@ static int do_meta_command(char *zLine, ShellState *p){ bAsync = 1; }else { - utf8_printf(stderr, "unknown option: %s\n", azArg[j]); + eputf("unknown option: %s\n", azArg[j]); return 1; } }else if( zDestFile==0 ){ @@ -23901,19 +26187,19 @@ static int do_meta_command(char *zLine, ShellState *p){ zDb = zDestFile; zDestFile = azArg[j]; }else{ - raw_printf(stderr, "Usage: .backup ?DB? ?OPTIONS? FILENAME\n"); + eputz("Usage: .backup ?DB? ?OPTIONS? FILENAME\n"); return 1; } } if( zDestFile==0 ){ - raw_printf(stderr, "missing FILENAME argument on .backup\n"); + eputz("missing FILENAME argument on .backup\n"); return 1; } if( zDb==0 ) zDb = "main"; rc = sqlite3_open_v2(zDestFile, &pDest, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "Error: cannot open \"%s\"\n", zDestFile); + eputf("Error: cannot open \"%s\"\n", zDestFile); close_db(pDest); return 1; } @@ -23924,7 +26210,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb); if( pBackup==0 ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); + eputf("Error: %s\n", sqlite3_errmsg(pDest)); close_db(pDest); return 1; } @@ -23933,7 +26219,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( rc==SQLITE_DONE ){ rc = 0; }else{ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); + eputf("Error: %s\n", sqlite3_errmsg(pDest)); rc = 1; } close_db(pDest); @@ -23944,7 +26230,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==2 ){ bail_on_error = booleanValue(azArg[1]); }else{ - raw_printf(stderr, "Usage: .bail on|off\n"); + eputz("Usage: .bail on|off\n"); rc = 1; } }else @@ -23958,9 +26244,8 @@ static int do_meta_command(char *zLine, ShellState *p){ setTextMode(p->out, 1); } }else{ - raw_printf(stderr, "The \".binary\" command is deprecated." - " Use \".crnl\" instead.\n"); - raw_printf(stderr, "Usage: .binary on|off\n"); + eputz("The \".binary\" command is deprecated. Use \".crnl\" instead.\n" + "Usage: .binary on|off\n"); rc = 1; } }else @@ -23984,11 +26269,11 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = chdir(azArg[1]); #endif if( rc ){ - utf8_printf(stderr, "Cannot change to directory \"%s\"\n", azArg[1]); + eputf("Cannot change to directory \"%s\"\n", azArg[1]); rc = 1; } }else{ - raw_printf(stderr, "Usage: .cd DIRECTORY\n"); + eputz("Usage: .cd DIRECTORY\n"); rc = 1; } }else @@ -23998,7 +26283,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==2 ){ setOrClearFlag(p, SHFLG_CountChanges, azArg[1]); }else{ - raw_printf(stderr, "Usage: .changes on|off\n"); + eputz("Usage: .changes on|off\n"); rc = 1; } }else @@ -24012,17 +26297,16 @@ static int do_meta_command(char *zLine, ShellState *p){ char *zRes = 0; output_reset(p); if( nArg!=2 ){ - raw_printf(stderr, "Usage: .check GLOB-PATTERN\n"); + eputz("Usage: .check GLOB-PATTERN\n"); rc = 2; }else if( (zRes = readFile("testcase-out.txt", 0))==0 ){ rc = 2; }else if( testcase_glob(azArg[1],zRes)==0 ){ - utf8_printf(stderr, - "testcase-%s FAILED\n Expected: [%s]\n Got: [%s]\n", - p->zTestcase, azArg[1], zRes); + eputf("testcase-%s FAILED\n Expected: [%s]\n Got: [%s]\n", + p->zTestcase, azArg[1], zRes); rc = 1; }else{ - utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase); + oputf("testcase-%s ok\n", p->zTestcase); p->nCheck++; } sqlite3_free(zRes); @@ -24035,7 +26319,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==2 ){ tryToClone(p, azArg[1]); }else{ - raw_printf(stderr, "Usage: .clone FILENAME\n"); + eputz("Usage: .clone FILENAME\n"); rc = 1; } }else @@ -24055,9 +26339,9 @@ static int do_meta_command(char *zLine, ShellState *p){ zFile = "(temporary-file)"; } if( p->pAuxDb == &p->aAuxDb[i] ){ - utf8_printf(stdout, "ACTIVE %d: %s\n", i, zFile); + sputf(stdout, "ACTIVE %d: %s\n", i, zFile); }else if( p->aAuxDb[i].db!=0 ){ - utf8_printf(stdout, " %d: %s\n", i, zFile); + sputf(stdout, " %d: %s\n", i, zFile); } } }else if( nArg==2 && IsDigit(azArg[1][0]) && azArg[1][1]==0 ){ @@ -24074,7 +26358,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( i<0 || i>=ArraySize(p->aAuxDb) ){ /* No-op */ }else if( p->pAuxDb == &p->aAuxDb[i] ){ - raw_printf(stderr, "cannot close the active database connection\n"); + eputz("cannot close the active database connection\n"); rc = 1; }else if( p->aAuxDb[i].db ){ session_close_all(p, i); @@ -24082,7 +26366,7 @@ static int do_meta_command(char *zLine, ShellState *p){ p->aAuxDb[i].db = 0; } }else{ - raw_printf(stderr, "Usage: .connection [close] [CONNECTION-NUMBER]\n"); + eputz("Usage: .connection [close] [CONNECTION-NUMBER]\n"); rc = 1; } }else @@ -24096,9 +26380,9 @@ static int do_meta_command(char *zLine, ShellState *p){ } }else{ #if !defined(_WIN32) && !defined(WIN32) - raw_printf(stderr, "The \".crnl\" is a no-op on non-Windows machines.\n"); + eputz("The \".crnl\" is a no-op on non-Windows machines.\n"); #endif - raw_printf(stderr, "Usage: .crnl on|off\n"); + eputz("Usage: .crnl on|off\n"); rc = 1; } }else @@ -24111,7 +26395,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); rc = sqlite3_prepare_v2(p->db, "PRAGMA database_list", -1, &pStmt, 0); if( rc ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + eputf("Error: %s\n", sqlite3_errmsg(p->db)); rc = 1; }else{ while( sqlite3_step(pStmt)==SQLITE_ROW ){ @@ -24130,11 +26414,9 @@ static int do_meta_command(char *zLine, ShellState *p){ int eTxn = sqlite3_txn_state(p->db, azName[i*2]); int bRdonly = sqlite3_db_readonly(p->db, azName[i*2]); const char *z = azName[i*2+1]; - utf8_printf(p->out, "%s: %s %s%s\n", - azName[i*2], - z && z[0] ? z : "\"\"", - bRdonly ? "r/o" : "r/w", - eTxn==SQLITE_TXN_NONE ? "" : + oputf("%s: %s %s%s\n", + azName[i*2], z && z[0] ? z : "\"\"", bRdonly ? "r/o" : "r/w", + eTxn==SQLITE_TXN_NONE ? "" : eTxn==SQLITE_TXN_READ ? " read-txn" : " write-txn"); free(azName[i*2]); free(azName[i*2+1]); @@ -24174,12 +26456,12 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_db_config(p->db, aDbConfig[ii].op, booleanValue(azArg[2]), 0); } sqlite3_db_config(p->db, aDbConfig[ii].op, -1, &v); - utf8_printf(p->out, "%19s %s\n", aDbConfig[ii].zName, v ? "on" : "off"); + oputf("%19s %s\n", aDbConfig[ii].zName, v ? "on" : "off"); if( nArg>1 ) break; } if( nArg>1 && ii==ArraySize(aDbConfig) ){ - utf8_printf(stderr, "Error: unknown dbconfig \"%s\"\n", azArg[1]); - utf8_printf(stderr, "Enter \".dbconfig\" with no arguments for a list\n"); + eputf("Error: unknown dbconfig \"%s\"\n", azArg[1]); + eputz("Enter \".dbconfig\" with no arguments for a list\n"); } }else @@ -24209,8 +26491,8 @@ static int do_meta_command(char *zLine, ShellState *p){ if( z[0]=='-' ) z++; if( cli_strcmp(z,"preserve-rowids")==0 ){ #ifdef SQLITE_OMIT_VIRTUALTABLE - raw_printf(stderr, "The --preserve-rowids option is not compatible" - " with SQLITE_OMIT_VIRTUALTABLE\n"); + eputz("The --preserve-rowids option is not compatible" + " with SQLITE_OMIT_VIRTUALTABLE\n"); rc = 1; sqlite3_free(zLike); goto meta_command_exit; @@ -24228,7 +26510,7 @@ static int do_meta_command(char *zLine, ShellState *p){ ShellSetFlag(p, SHFLG_DumpNoSys); }else { - raw_printf(stderr, "Unknown option \"%s\" on \".dump\"\n", azArg[i]); + eputf("Unknown option \"%s\" on \".dump\"\n", azArg[i]); rc = 1; sqlite3_free(zLike); goto meta_command_exit; @@ -24258,12 +26540,13 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); + outputDumpWarning(p, zLike); if( (p->shellFlgs & SHFLG_DumpDataOnly)==0 ){ /* When playing back a "dump", the content might appear in an order ** which causes immediate foreign key constraints to be violated. ** So disable foreign-key constraint enforcement to prevent problems. */ - raw_printf(p->out, "PRAGMA foreign_keys=OFF;\n"); - raw_printf(p->out, "BEGIN TRANSACTION;\n"); + oputz("PRAGMA foreign_keys=OFF;\n"); + oputz("BEGIN TRANSACTION;\n"); } p->writableSchema = 0; p->showHeader = 0; @@ -24286,7 +26569,8 @@ static int do_meta_command(char *zLine, ShellState *p){ zSql = sqlite3_mprintf( "SELECT sql FROM sqlite_schema AS o " "WHERE (%s) AND sql NOT NULL" - " AND type IN ('index','trigger','view')", + " AND type IN ('index','trigger','view') " + "ORDER BY type COLLATE NOCASE DESC", zLike ); run_table_dump_query(p, zSql); @@ -24294,13 +26578,13 @@ static int do_meta_command(char *zLine, ShellState *p){ } sqlite3_free(zLike); if( p->writableSchema ){ - raw_printf(p->out, "PRAGMA writable_schema=OFF;\n"); + oputz("PRAGMA writable_schema=OFF;\n"); p->writableSchema = 0; } sqlite3_exec(p->db, "PRAGMA writable_schema=OFF;", 0, 0, 0); sqlite3_exec(p->db, "RELEASE dump;", 0, 0, 0); if( (p->shellFlgs & SHFLG_DumpDataOnly)==0 ){ - raw_printf(p->out, p->nErr?"ROLLBACK; -- due to errors\n":"COMMIT;\n"); + oputz(p->nErr?"ROLLBACK; -- due to errors\n":"COMMIT;\n"); } p->showHeader = savedShowHeader; p->shellFlgs = savedShellFlags; @@ -24310,7 +26594,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==2 ){ setOrClearFlag(p, SHFLG_Echo, azArg[1]); }else{ - raw_printf(stderr, "Usage: .echo on|off\n"); + eputz("Usage: .echo on|off\n"); rc = 1; } }else @@ -24341,7 +26625,7 @@ static int do_meta_command(char *zLine, ShellState *p){ p->autoEQP = (u8)booleanValue(azArg[1]); } }else{ - raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n"); + eputz("Usage: .eqp off|on|trace|trigger|full\n"); rc = 1; } }else @@ -24380,9 +26664,8 @@ static int do_meta_command(char *zLine, ShellState *p){ #ifndef SQLITE_OMIT_VIRTUALTABLE if( c=='e' && cli_strncmp(azArg[0], "expert", n)==0 ){ if( p->bSafeMode ){ - raw_printf(stderr, - "Cannot run experimental commands such as \"%s\" in safe mode\n", - azArg[0]); + eputf("Cannot run experimental commands such as \"%s\" in safe mode\n", + azArg[0]); rc = 1; }else{ open_db(p, 0); @@ -24438,10 +26721,9 @@ static int do_meta_command(char *zLine, ShellState *p){ /* --help lists all file-controls */ if( cli_strcmp(zCmd,"help")==0 ){ - utf8_printf(p->out, "Available file-controls:\n"); + oputz("Available file-controls:\n"); for(i=0; iout, " .filectrl %s %s\n", - aCtrl[i].zCtrlName, aCtrl[i].zUsage); + oputf(" .filectrl %s %s\n", aCtrl[i].zCtrlName, aCtrl[i].zUsage); } rc = 1; goto meta_command_exit; @@ -24456,16 +26738,16 @@ static int do_meta_command(char *zLine, ShellState *p){ filectrl = aCtrl[i].ctrlCode; iCtrl = i; }else{ - utf8_printf(stderr, "Error: ambiguous file-control: \"%s\"\n" - "Use \".filectrl --help\" for help\n", zCmd); + eputf("Error: ambiguous file-control: \"%s\"\n" + "Use \".filectrl --help\" for help\n", zCmd); rc = 1; goto meta_command_exit; } } } if( filectrl<0 ){ - utf8_printf(stderr,"Error: unknown file-control: %s\n" - "Use \".filectrl --help\" for help\n", zCmd); + eputf("Error: unknown file-control: %s\n" + "Use \".filectrl --help\" for help\n", zCmd); }else{ switch(filectrl){ case SQLITE_FCNTL_SIZE_LIMIT: { @@ -24508,7 +26790,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg!=2 ) break; sqlite3_file_control(p->db, zSchema, filectrl, &z); if( z ){ - utf8_printf(p->out, "%s\n", z); + oputf("%s\n", z); sqlite3_free(z); } isOk = 2; @@ -24522,19 +26804,19 @@ static int do_meta_command(char *zLine, ShellState *p){ } x = -1; sqlite3_file_control(p->db, zSchema, filectrl, &x); - utf8_printf(p->out,"%d\n", x); + oputf("%d\n", x); isOk = 2; break; } } } if( isOk==0 && iCtrl>=0 ){ - utf8_printf(p->out, "Usage: .filectrl %s %s\n", zCmd,aCtrl[iCtrl].zUsage); + oputf("Usage: .filectrl %s %s\n", zCmd,aCtrl[iCtrl].zUsage); rc = 1; }else if( isOk==1 ){ char zBuf[100]; sqlite3_snprintf(sizeof(zBuf), zBuf, "%lld", iRes); - raw_printf(p->out, "%s\n", zBuf); + oputf("%s\n", zBuf); } }else @@ -24549,7 +26831,7 @@ static int do_meta_command(char *zLine, ShellState *p){ nArg = 1; } if( nArg!=1 ){ - raw_printf(stderr, "Usage: .fullschema ?--indent?\n"); + eputz("Usage: .fullschema ?--indent?\n"); rc = 1; goto meta_command_exit; } @@ -24569,19 +26851,21 @@ static int do_meta_command(char *zLine, ShellState *p){ "SELECT rowid FROM sqlite_schema" " WHERE name GLOB 'sqlite_stat[134]'", -1, &pStmt, 0); - doStats = sqlite3_step(pStmt)==SQLITE_ROW; - sqlite3_finalize(pStmt); + if( rc==SQLITE_OK ){ + doStats = sqlite3_step(pStmt)==SQLITE_ROW; + sqlite3_finalize(pStmt); + } } if( doStats==0 ){ - raw_printf(p->out, "/* No STAT tables available */\n"); + oputz("/* No STAT tables available */\n"); }else{ - raw_printf(p->out, "ANALYZE sqlite_schema;\n"); + oputz("ANALYZE sqlite_schema;\n"); data.cMode = data.mode = MODE_Insert; data.zDestTable = "sqlite_stat1"; shell_exec(&data, "SELECT * FROM sqlite_stat1", 0); data.zDestTable = "sqlite_stat4"; shell_exec(&data, "SELECT * FROM sqlite_stat4", 0); - raw_printf(p->out, "ANALYZE sqlite_schema;\n"); + oputz("ANALYZE sqlite_schema;\n"); } }else @@ -24590,7 +26874,7 @@ static int do_meta_command(char *zLine, ShellState *p){ p->showHeader = booleanValue(azArg[1]); p->shellFlgs |= SHFLG_HeaderSet; }else{ - raw_printf(stderr, "Usage: .headers on|off\n"); + eputz("Usage: .headers on|off\n"); rc = 1; } }else @@ -24599,7 +26883,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg>=2 ){ n = showHelp(p->out, azArg[1]); if( n==0 ){ - utf8_printf(p->out, "Nothing matches '%s'\n", azArg[1]); + oputf("Nothing matches '%s'\n", azArg[1]); } }else{ showHelp(p->out, 0); @@ -24609,16 +26893,15 @@ static int do_meta_command(char *zLine, ShellState *p){ #ifndef SQLITE_SHELL_FIDDLE if( c=='i' && cli_strncmp(azArg[0], "import", n)==0 ){ char *zTable = 0; /* Insert data into this table */ - char *zSchema = 0; /* within this schema (may default to "main") */ + char *zSchema = 0; /* Schema of zTable */ char *zFile = 0; /* Name of file to extra content from */ sqlite3_stmt *pStmt = NULL; /* A statement */ int nCol; /* Number of columns in the table */ - int nByte; /* Number of bytes in an SQL string */ + i64 nByte; /* Number of bytes in an SQL string */ int i, j; /* Loop counters */ int needCommit; /* True to COMMIT or ROLLBACK at end */ int nSep; /* Number of bytes in p->colSeparator[] */ - char *zSql; /* An SQL statement */ - char *zFullTabName; /* Table name with schema if applicable */ + char *zSql = 0; /* An SQL statement */ ImportCtx sCtx; /* Reader context */ char *(SQLITE_CDECL *xRead)(ImportCtx*); /* Func to read one value */ int eVerbose = 0; /* Larger for more console output */ @@ -24643,7 +26926,7 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( zTable==0 ){ zTable = z; }else{ - utf8_printf(p->out, "ERROR: extra argument: \"%s\". Usage:\n", z); + oputf("ERROR: extra argument: \"%s\". Usage:\n", z); showHelp(p->out, "import"); goto meta_command_exit; } @@ -24664,14 +26947,14 @@ static int do_meta_command(char *zLine, ShellState *p){ xRead = csv_read_one_field; useOutputMode = 0; }else{ - utf8_printf(p->out, "ERROR: unknown option: \"%s\". Usage:\n", z); + oputf("ERROR: unknown option: \"%s\". Usage:\n", z); showHelp(p->out, "import"); goto meta_command_exit; } } if( zTable==0 ){ - utf8_printf(p->out, "ERROR: missing %s argument. Usage:\n", - zFile==0 ? "FILE" : "TABLE"); + oputf("ERROR: missing %s argument. Usage:\n", + zFile==0 ? "FILE" : "TABLE"); showHelp(p->out, "import"); goto meta_command_exit; } @@ -24682,20 +26965,17 @@ static int do_meta_command(char *zLine, ShellState *p){ ** the column and row separator characters from the output mode. */ nSep = strlen30(p->colSeparator); if( nSep==0 ){ - raw_printf(stderr, - "Error: non-null column separator required for import\n"); + eputz("Error: non-null column separator required for import\n"); goto meta_command_exit; } if( nSep>1 ){ - raw_printf(stderr, - "Error: multi-character column separators not allowed" + eputz("Error: multi-character column separators not allowed" " for import\n"); goto meta_command_exit; } nSep = strlen30(p->rowSeparator); if( nSep==0 ){ - raw_printf(stderr, - "Error: non-null row separator required for import\n"); + eputz("Error: non-null row separator required for import\n"); goto meta_command_exit; } if( nSep==2 && p->mode==MODE_Csv @@ -24709,8 +26989,8 @@ static int do_meta_command(char *zLine, ShellState *p){ nSep = strlen30(p->rowSeparator); } if( nSep>1 ){ - raw_printf(stderr, "Error: multi-character row separators not allowed" - " for import\n"); + eputz("Error: multi-character row separators not allowed" + " for import\n"); goto meta_command_exit; } sCtx.cColSep = (u8)p->colSeparator[0]; @@ -24720,7 +27000,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sCtx.nLine = 1; if( sCtx.zFile[0]=='|' ){ #ifdef SQLITE_OMIT_POPEN - raw_printf(stderr, "Error: pipes are not supported in this OS\n"); + eputz("Error: pipes are not supported in this OS\n"); goto meta_command_exit; #else sCtx.in = popen(sCtx.zFile+1, "r"); @@ -24732,19 +27012,19 @@ static int do_meta_command(char *zLine, ShellState *p){ sCtx.xCloser = fclose; } if( sCtx.in==0 ){ - utf8_printf(stderr, "Error: cannot open \"%s\"\n", zFile); + eputf("Error: cannot open \"%s\"\n", zFile); goto meta_command_exit; } if( eVerbose>=2 || (eVerbose>=1 && useOutputMode) ){ char zSep[2]; zSep[1] = 0; zSep[0] = sCtx.cColSep; - utf8_printf(p->out, "Column separator "); - output_c_string(p->out, zSep); - utf8_printf(p->out, ", row separator "); + oputz("Column separator "); + output_c_string(zSep); + oputz(", row separator "); zSep[0] = sCtx.cRowSep; - output_c_string(p->out, zSep); - utf8_printf(p->out, "\n"); + output_c_string(zSep); + oputz("\n"); } sCtx.z = sqlite3_malloc64(120); if( sCtx.z==0 ){ @@ -24755,66 +27035,72 @@ static int do_meta_command(char *zLine, ShellState *p){ while( (nSkip--)>0 ){ while( xRead(&sCtx) && sCtx.cTerm==sCtx.cColSep ){} } - if( zSchema!=0 ){ - zFullTabName = sqlite3_mprintf("\"%w\".\"%w\"", zSchema, zTable); - }else{ - zFullTabName = sqlite3_mprintf("\"%w\"", zTable); - } - zSql = sqlite3_mprintf("SELECT * FROM %s", zFullTabName); - if( zSql==0 || zFullTabName==0 ){ - import_cleanup(&sCtx); - shell_out_of_memory(); - } - nByte = strlen30(zSql); - rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); import_append_char(&sCtx, 0); /* To ensure sCtx.z is allocated */ - if( rc && sqlite3_strglob("no such table: *", sqlite3_errmsg(p->db))==0 ){ + if( sqlite3_table_column_metadata(p->db, zSchema, zTable,0,0,0,0,0,0) ){ + /* Table does not exist. Create it. */ sqlite3 *dbCols = 0; char *zRenames = 0; char *zColDefs; - zCreate = sqlite3_mprintf("CREATE TABLE %s", zFullTabName); + zCreate = sqlite3_mprintf("CREATE TABLE \"%w\".\"%w\"", + zSchema ? zSchema : "main", zTable); while( xRead(&sCtx) ){ zAutoColumn(sCtx.z, &dbCols, 0); if( sCtx.cTerm!=sCtx.cColSep ) break; } zColDefs = zAutoColumn(0, &dbCols, &zRenames); if( zRenames!=0 ){ - utf8_printf((stdin_is_interactive && p->in==stdin)? p->out : stderr, - "Columns renamed during .import %s due to duplicates:\n" - "%s\n", sCtx.zFile, zRenames); + sputf((stdin_is_interactive && p->in==stdin)? p->out : stderr, + "Columns renamed during .import %s due to duplicates:\n" + "%s\n", sCtx.zFile, zRenames); sqlite3_free(zRenames); } assert(dbCols==0); if( zColDefs==0 ){ - utf8_printf(stderr,"%s: empty file\n", sCtx.zFile); - import_fail: - sqlite3_free(zCreate); - sqlite3_free(zSql); - sqlite3_free(zFullTabName); + eputf("%s: empty file\n", sCtx.zFile); import_cleanup(&sCtx); rc = 1; goto meta_command_exit; } zCreate = sqlite3_mprintf("%z%z\n", zCreate, zColDefs); + if( zCreate==0 ){ + import_cleanup(&sCtx); + shell_out_of_memory(); + } if( eVerbose>=1 ){ - utf8_printf(p->out, "%s\n", zCreate); + oputf("%s\n", zCreate); } rc = sqlite3_exec(p->db, zCreate, 0, 0, 0); - if( rc ){ - utf8_printf(stderr, "%s failed:\n%s\n", zCreate, sqlite3_errmsg(p->db)); - goto import_fail; - } sqlite3_free(zCreate); zCreate = 0; - rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + if( rc ){ + eputf("%s failed:\n%s\n", zCreate, sqlite3_errmsg(p->db)); + import_cleanup(&sCtx); + rc = 1; + goto meta_command_exit; + } + } + zSql = sqlite3_mprintf("SELECT count(*) FROM pragma_table_info(%Q,%Q);", + zTable, zSchema); + if( zSql==0 ){ + import_cleanup(&sCtx); + shell_out_of_memory(); } + nByte = strlen(zSql); + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + zSql = 0; if( rc ){ if (pStmt) sqlite3_finalize(pStmt); - utf8_printf(stderr,"Error: %s\n", sqlite3_errmsg(p->db)); - goto import_fail; + eputf("Error: %s\n", sqlite3_errmsg(p->db)); + import_cleanup(&sCtx); + rc = 1; + goto meta_command_exit; + } + if( sqlite3_step(pStmt)==SQLITE_ROW ){ + nCol = sqlite3_column_int(pStmt, 0); + }else{ + nCol = 0; } - sqlite3_free(zSql); - nCol = sqlite3_column_count(pStmt); sqlite3_finalize(pStmt); pStmt = 0; if( nCol==0 ) return 0; /* no columns, no error */ @@ -24823,7 +27109,12 @@ static int do_meta_command(char *zLine, ShellState *p){ import_cleanup(&sCtx); shell_out_of_memory(); } - sqlite3_snprintf(nByte+20, zSql, "INSERT INTO %s VALUES(?", zFullTabName); + if( zSchema ){ + sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\".\"%w\" VALUES(?", + zSchema, zTable); + }else{ + sqlite3_snprintf(nByte+20, zSql, "INSERT INTO \"%w\" VALUES(?", zTable); + } j = strlen30(zSql); for(i=1; i=2 ){ - utf8_printf(p->out, "Insert using: %s\n", zSql); + oputf("Insert using: %s\n", zSql); } rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + zSql = 0; if( rc ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + eputf("Error: %s\n", sqlite3_errmsg(p->db)); if (pStmt) sqlite3_finalize(pStmt); - goto import_fail; + import_cleanup(&sCtx); + rc = 1; + goto meta_command_exit; } - sqlite3_free(zSql); - sqlite3_free(zFullTabName); needCommit = sqlite3_get_autocommit(p->db); if( needCommit ) sqlite3_exec(p->db, "BEGIN", 0, 0, 0); do{ @@ -24859,11 +27152,19 @@ static int do_meta_command(char *zLine, ShellState *p){ ** the remaining columns. */ if( p->mode==MODE_Ascii && (z==0 || z[0]==0) && i==0 ) break; + /* + ** For CSV mode, per RFC 4180, accept EOF in lieu of final + ** record terminator but only for last field of multi-field row. + ** (If there are too few fields, it's not valid CSV anyway.) + */ + if( z==0 && (xRead==csv_read_one_field) && i==nCol-1 && i>0 ){ + z = ""; + } sqlite3_bind_text(pStmt, i+1, z, -1, SQLITE_TRANSIENT); if( i=nCol ){ sqlite3_step(pStmt); rc = sqlite3_reset(pStmt); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "%s:%d: INSERT failed: %s\n", sCtx.zFile, - startLine, sqlite3_errmsg(p->db)); + eputf("%s:%d: INSERT failed: %s\n", + sCtx.zFile, startLine, sqlite3_errmsg(p->db)); sCtx.nErr++; }else{ sCtx.nRow++; @@ -24894,9 +27194,8 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_finalize(pStmt); if( needCommit ) sqlite3_exec(p->db, "COMMIT", 0, 0, 0); if( eVerbose>0 ){ - utf8_printf(p->out, - "Added %d rows with %d errors using %d lines of input\n", - sCtx.nRow, sCtx.nErr, sCtx.nLine-1); + oputf("Added %d rows with %d errors using %d lines of input\n", + sCtx.nRow, sCtx.nErr, sCtx.nLine-1); } }else #endif /* !defined(SQLITE_SHELL_FIDDLE) */ @@ -24911,14 +27210,14 @@ static int do_meta_command(char *zLine, ShellState *p){ int lenPK = 0; /* Length of the PRIMARY KEY string for isWO tables */ int i; if( !ShellHasFlag(p,SHFLG_TestingMode) ){ - utf8_printf(stderr, ".%s unavailable without --unsafe-testing\n", - "imposter"); + eputf(".%s unavailable without --unsafe-testing\n", + "imposter"); rc = 1; goto meta_command_exit; } if( !(nArg==3 || (nArg==2 && sqlite3_stricmp(azArg[1],"off")==0)) ){ - utf8_printf(stderr, "Usage: .imposter INDEX IMPOSTER\n" - " .imposter off\n"); + eputz("Usage: .imposter INDEX IMPOSTER\n" + " .imposter off\n"); /* Also allowed, but not documented: ** ** .imposter TABLE IMPOSTER @@ -24977,7 +27276,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } sqlite3_finalize(pStmt); if( i==0 || tnum==0 ){ - utf8_printf(stderr, "no such index: \"%s\"\n", azArg[1]); + eputf("no such index: \"%s\"\n", azArg[1]); rc = 1; sqlite3_free(zCollist); goto meta_command_exit; @@ -24992,22 +27291,35 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = sqlite3_exec(p->db, zSql, 0, 0, 0); sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->db, "main", 0, 0); if( rc ){ - utf8_printf(stderr, "Error in [%s]: %s\n", zSql, sqlite3_errmsg(p->db)); + eputf("Error in [%s]: %s\n", zSql, sqlite3_errmsg(p->db)); }else{ - utf8_printf(stdout, "%s;\n", zSql); - raw_printf(stdout, - "WARNING: writing to an imposter table will corrupt the \"%s\" %s!\n", - azArg[1], isWO ? "table" : "index" - ); + sputf(stdout, "%s;\n", zSql); + sputf(stdout, "WARNING: writing to an imposter table will corrupt" + " the \"%s\" %s!\n", azArg[1], isWO ? "table" : "index"); } }else{ - raw_printf(stderr, "SQLITE_TESTCTRL_IMPOSTER returns %d\n", rc); + eputf("SQLITE_TESTCTRL_IMPOSTER returns %d\n", rc); rc = 1; } sqlite3_free(zSql); }else #endif /* !defined(SQLITE_OMIT_TEST_CONTROL) */ + if( c=='i' && cli_strncmp(azArg[0], "intck", n)==0 ){ + i64 iArg = 0; + if( nArg==2 ){ + iArg = integerValue(azArg[1]); + if( iArg==0 ) iArg = -1; + } + if( (nArg!=1 && nArg!=2) || iArg<0 ){ + eputf("%s","Usage: .intck STEPS_PER_UNLOCK\n"); + rc = 1; + goto meta_command_exit; + } + open_db(p, 0); + rc = intckDatabaseCmd(p, iArg); + }else + #ifdef SQLITE_ENABLE_IOTRACE if( c=='i' && cli_strncmp(azArg[0], "iotrace", n)==0 ){ SQLITE_API extern void (SQLITE_CDECL *sqlite3IoTrace)(const char*, ...); @@ -25021,7 +27333,7 @@ static int do_meta_command(char *zLine, ShellState *p){ }else{ iotrace = fopen(azArg[1], "w"); if( iotrace==0 ){ - utf8_printf(stderr, "Error: cannot open \"%s\"\n", azArg[1]); + eputf("Error: cannot open \"%s\"\n", azArg[1]); sqlite3IoTrace = 0; rc = 1; }else{ @@ -25053,11 +27365,11 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); if( nArg==1 ){ for(i=0; idb, aLimit[i].limitCode, -1)); + sputf(stdout, "%20s %d\n", aLimit[i].zLimitName, + sqlite3_limit(p->db, aLimit[i].limitCode, -1)); } }else if( nArg>3 ){ - raw_printf(stderr, "Usage: .limit NAME ?NEW-VALUE?\n"); + eputz("Usage: .limit NAME ?NEW-VALUE?\n"); rc = 1; goto meta_command_exit; }else{ @@ -25068,16 +27380,16 @@ static int do_meta_command(char *zLine, ShellState *p){ if( iLimit<0 ){ iLimit = i; }else{ - utf8_printf(stderr, "ambiguous limit: \"%s\"\n", azArg[1]); + eputf("ambiguous limit: \"%s\"\n", azArg[1]); rc = 1; goto meta_command_exit; } } } if( iLimit<0 ){ - utf8_printf(stderr, "unknown limit: \"%s\"\n" - "enter \".limits\" with no arguments for a list.\n", - azArg[1]); + eputf("unknown limit: \"%s\"\n" + "enter \".limits\" with no arguments for a list.\n", + azArg[1]); rc = 1; goto meta_command_exit; } @@ -25085,8 +27397,8 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_limit(p->db, aLimit[iLimit].limitCode, (int)integerValue(azArg[2])); } - printf("%20s %d\n", aLimit[iLimit].zLimitName, - sqlite3_limit(p->db, aLimit[iLimit].limitCode, -1)); + sputf(stdout, "%20s %d\n", aLimit[iLimit].zLimitName, + sqlite3_limit(p->db, aLimit[iLimit].limitCode, -1)); } }else @@ -25102,7 +27414,7 @@ static int do_meta_command(char *zLine, ShellState *p){ failIfSafeMode(p, "cannot run .load in safe mode"); if( nArg<2 || azArg[1][0]==0 ){ /* Must have a non-empty FILE. (Will not load self.) */ - raw_printf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n"); + eputz("Usage: .load FILE ?ENTRYPOINT?\n"); rc = 1; goto meta_command_exit; } @@ -25111,7 +27423,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); rc = sqlite3_load_extension(p->db, zFile, zProc, &zErrMsg); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "Error: %s\n", zErrMsg); + eputf("Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); rc = 1; } @@ -25120,7 +27432,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='l' && cli_strncmp(azArg[0], "log", n)==0 ){ if( nArg!=2 ){ - raw_printf(stderr, "Usage: .log FILENAME\n"); + eputz("Usage: .log FILENAME\n"); rc = 1; }else{ const char *zFile = azArg[1]; @@ -25128,8 +27440,8 @@ static int do_meta_command(char *zLine, ShellState *p){ && cli_strcmp(zFile,"on")!=0 && cli_strcmp(zFile,"off")!=0 ){ - raw_printf(stdout, "cannot set .log to anything other " - "than \"on\" or \"off\"\n"); + sputz(stdout, "cannot set .log to anything other" + " than \"on\" or \"off\"\n"); zFile = "off"; } output_file_close(p->pLog); @@ -25168,17 +27480,17 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( zTabname==0 ){ zTabname = z; }else if( z[0]=='-' ){ - utf8_printf(stderr, "unknown option: %s\n", z); - utf8_printf(stderr, "options:\n" - " --noquote\n" - " --quote\n" - " --wordwrap on/off\n" - " --wrap N\n" - " --ww\n"); + eputf("unknown option: %s\n", z); + eputz("options:\n" + " --noquote\n" + " --quote\n" + " --wordwrap on/off\n" + " --wrap N\n" + " --ww\n"); rc = 1; goto meta_command_exit; }else{ - utf8_printf(stderr, "extra argument: \"%s\"\n", z); + eputf("extra argument: \"%s\"\n", z); rc = 1; goto meta_command_exit; } @@ -25187,14 +27499,12 @@ static int do_meta_command(char *zLine, ShellState *p){ if( p->mode==MODE_Column || (p->mode>=MODE_Markdown && p->mode<=MODE_Box) ){ - raw_printf - (p->out, - "current output mode: %s --wrap %d --wordwrap %s --%squote\n", - modeDescr[p->mode], p->cmOpts.iWrap, - p->cmOpts.bWordWrap ? "on" : "off", - p->cmOpts.bQuote ? "" : "no"); + oputf("current output mode: %s --wrap %d --wordwrap %s --%squote\n", + modeDescr[p->mode], p->cmOpts.iWrap, + p->cmOpts.bWordWrap ? "on" : "off", + p->cmOpts.bQuote ? "" : "no"); }else{ - raw_printf(p->out, "current output mode: %s\n", modeDescr[p->mode]); + oputf("current output mode: %s\n", modeDescr[p->mode]); } zMode = modeDescr[p->mode]; } @@ -25253,9 +27563,9 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( cli_strncmp(zMode,"json",n2)==0 ){ p->mode = MODE_Json; }else{ - raw_printf(stderr, "Error: mode should be one of: " - "ascii box column csv html insert json line list markdown " - "qbox quote table tabs tcl\n"); + eputz("Error: mode should be one of: " + "ascii box column csv html insert json line list markdown " + "qbox quote table tabs tcl\n"); rc = 1; } p->cMode = p->mode; @@ -25264,11 +27574,11 @@ static int do_meta_command(char *zLine, ShellState *p){ #ifndef SQLITE_SHELL_FIDDLE if( c=='n' && cli_strcmp(azArg[0], "nonce")==0 ){ if( nArg!=2 ){ - raw_printf(stderr, "Usage: .nonce NONCE\n"); + eputz("Usage: .nonce NONCE\n"); rc = 1; }else if( p->zNonce==0 || cli_strcmp(azArg[1],p->zNonce)!=0 ){ - raw_printf(stderr, "line %d: incorrect nonce: \"%s\"\n", - p->lineno, azArg[1]); + eputf("line %d: incorrect nonce: \"%s\"\n", + p->lineno, azArg[1]); exit(1); }else{ p->bSafeMode = 0; @@ -25283,7 +27593,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_snprintf(sizeof(p->nullValue), p->nullValue, "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]); }else{ - raw_printf(stderr, "Usage: .nullvalue STRING\n"); + eputz("Usage: .nullvalue STRING\n"); rc = 1; } }else @@ -25322,11 +27632,11 @@ static int do_meta_command(char *zLine, ShellState *p){ }else #endif /* !SQLITE_SHELL_FIDDLE */ if( z[0]=='-' ){ - utf8_printf(stderr, "unknown option: %s\n", z); + eputf("unknown option: %s\n", z); rc = 1; goto meta_command_exit; }else if( zFN ){ - utf8_printf(stderr, "extra argument: \"%s\"\n", z); + eputf("extra argument: \"%s\"\n", z); rc = 1; goto meta_command_exit; }else{ @@ -25368,7 +27678,7 @@ static int do_meta_command(char *zLine, ShellState *p){ p->pAuxDb->zDbFilename = zNewFilename; open_db(p, OPEN_DB_KEEPALIVE); if( p->db==0 ){ - utf8_printf(stderr, "Error: cannot open '%s'\n", zNewFilename); + eputf("Error: cannot open '%s'\n", zNewFilename); sqlite3_free(zNewFilename); }else{ p->pAuxDb->zFreeOnClose = zNewFilename; @@ -25392,9 +27702,9 @@ static int do_meta_command(char *zLine, ShellState *p){ int i; int eMode = 0; int bOnce = 0; /* 0: .output, 1: .once, 2: .excel */ - unsigned char zBOM[4]; /* Byte-order mark to using if --bom is present */ + static const char *zBomUtf8 = "\xef\xbb\xbf"; + const char *zBom = 0; - zBOM[0] = 0; failIfSafeMode(p, "cannot run .%s in safe mode", azArg[0]); if( c=='e' ){ eMode = 'x'; @@ -25407,17 +27717,13 @@ static int do_meta_command(char *zLine, ShellState *p){ if( z[0]=='-' ){ if( z[1]=='-' ) z++; if( cli_strcmp(z,"-bom")==0 ){ - zBOM[0] = 0xef; - zBOM[1] = 0xbb; - zBOM[2] = 0xbf; - zBOM[3] = 0; + zBom = zBomUtf8; }else if( c!='e' && cli_strcmp(z,"-x")==0 ){ eMode = 'x'; /* spreadsheet */ }else if( c!='e' && cli_strcmp(z,"-e")==0 ){ eMode = 'e'; /* text editor */ }else{ - utf8_printf(p->out, "ERROR: unknown option: \"%s\". Usage:\n", - azArg[i]); + oputf("ERROR: unknown option: \"%s\". Usage:\n", azArg[i]); showHelp(p->out, azArg[0]); rc = 1; goto meta_command_exit; @@ -25429,8 +27735,7 @@ static int do_meta_command(char *zLine, ShellState *p){ break; } }else{ - utf8_printf(p->out,"ERROR: extra parameter: \"%s\". Usage:\n", - azArg[i]); + oputf("ERROR: extra parameter: \"%s\". Usage:\n", azArg[i]); showHelp(p->out, azArg[0]); rc = 1; sqlite3_free(zFile); @@ -25469,30 +27774,30 @@ static int do_meta_command(char *zLine, ShellState *p){ shell_check_oom(zFile); if( zFile[0]=='|' ){ #ifdef SQLITE_OMIT_POPEN - raw_printf(stderr, "Error: pipes are not supported in this OS\n"); + eputz("Error: pipes are not supported in this OS\n"); rc = 1; - p->out = stdout; + output_redir(p, stdout); #else - p->out = popen(zFile + 1, "w"); - if( p->out==0 ){ - utf8_printf(stderr,"Error: cannot open pipe \"%s\"\n", zFile + 1); - p->out = stdout; + FILE *pfPipe = popen(zFile + 1, "w"); + if( pfPipe==0 ){ + eputf("Error: cannot open pipe \"%s\"\n", zFile + 1); rc = 1; }else{ - if( zBOM[0] ) fwrite(zBOM, 1, 3, p->out); + output_redir(p, pfPipe); + if( zBom ) oputz(zBom); sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); } #endif }else{ - p->out = output_file_open(zFile, bTxtMode); - if( p->out==0 ){ + FILE *pfFile = output_file_open(zFile, bTxtMode); + if( pfFile==0 ){ if( cli_strcmp(zFile,"off")!=0 ){ - utf8_printf(stderr,"Error: cannot write to \"%s\"\n", zFile); + eputf("Error: cannot write to \"%s\"\n", zFile); } - p->out = stdout; rc = 1; } else { - if( zBOM[0] ) fwrite(zBOM, 1, 3, p->out); + output_redir(p, pfFile); + if( zBom ) oputz(zBom); sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); } } @@ -25533,8 +27838,8 @@ static int do_meta_command(char *zLine, ShellState *p){ "SELECT key, quote(value) " "FROM temp.sqlite_parameters;", -1, &pStmt, 0); while( rx==SQLITE_OK && sqlite3_step(pStmt)==SQLITE_ROW ){ - utf8_printf(p->out, "%-*s %s\n", len, sqlite3_column_text(pStmt,0), - sqlite3_column_text(pStmt,1)); + oputf("%-*s %s\n", len, sqlite3_column_text(pStmt,0), + sqlite3_column_text(pStmt,1)); } sqlite3_finalize(pStmt); } @@ -25578,7 +27883,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rx = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); sqlite3_free(zSql); if( rx!=SQLITE_OK ){ - utf8_printf(p->out, "Error: %s\n", sqlite3_errmsg(p->db)); + oputf("Error: %s\n", sqlite3_errmsg(p->db)); sqlite3_finalize(pStmt); pStmt = 0; rc = 1; @@ -25607,10 +27912,10 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='p' && n>=3 && cli_strncmp(azArg[0], "print", n)==0 ){ int i; for(i=1; i1 ) raw_printf(p->out, " "); - utf8_printf(p->out, "%s", azArg[i]); + if( i>1 ) oputz(" "); + oputz(azArg[i]); } - raw_printf(p->out, "\n"); + oputz("\n"); }else #ifndef SQLITE_OMIT_PROGRESS_CALLBACK @@ -25639,7 +27944,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } if( cli_strcmp(z,"limit")==0 ){ if( i+1>=nArg ){ - utf8_printf(stderr, "Error: missing argument on --limit\n"); + eputz("Error: missing argument on --limit\n"); rc = 1; goto meta_command_exit; }else{ @@ -25647,7 +27952,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } continue; } - utf8_printf(stderr, "Error: unknown option: \"%s\"\n", azArg[i]); + eputf("Error: unknown option: \"%s\"\n", azArg[i]); rc = 1; goto meta_command_exit; }else{ @@ -25680,19 +27985,19 @@ static int do_meta_command(char *zLine, ShellState *p){ int savedLineno = p->lineno; failIfSafeMode(p, "cannot run .read in safe mode"); if( nArg!=2 ){ - raw_printf(stderr, "Usage: .read FILE\n"); + eputz("Usage: .read FILE\n"); rc = 1; goto meta_command_exit; } if( azArg[1][0]=='|' ){ #ifdef SQLITE_OMIT_POPEN - raw_printf(stderr, "Error: pipes are not supported in this OS\n"); + eputz("Error: pipes are not supported in this OS\n"); rc = 1; p->out = stdout; #else p->in = popen(azArg[1]+1, "r"); if( p->in==0 ){ - utf8_printf(stderr, "Error: cannot open \"%s\"\n", azArg[1]); + eputf("Error: cannot open \"%s\"\n", azArg[1]); rc = 1; }else{ rc = process_input(p); @@ -25700,7 +28005,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } #endif }else if( (p->in = openChrSource(azArg[1]))==0 ){ - utf8_printf(stderr,"Error: cannot open \"%s\"\n", azArg[1]); + eputf("Error: cannot open \"%s\"\n", azArg[1]); rc = 1; }else{ rc = process_input(p); @@ -25727,20 +28032,20 @@ static int do_meta_command(char *zLine, ShellState *p){ zSrcFile = azArg[2]; zDb = azArg[1]; }else{ - raw_printf(stderr, "Usage: .restore ?DB? FILE\n"); + eputz("Usage: .restore ?DB? FILE\n"); rc = 1; goto meta_command_exit; } rc = sqlite3_open(zSrcFile, &pSrc); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "Error: cannot open \"%s\"\n", zSrcFile); + eputf("Error: cannot open \"%s\"\n", zSrcFile); close_db(pSrc); return 1; } open_db(p, 0); pBackup = sqlite3_backup_init(p->db, zDb, pSrc, "main"); if( pBackup==0 ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + eputf("Error: %s\n", sqlite3_errmsg(p->db)); close_db(pSrc); return 1; } @@ -25755,10 +28060,10 @@ static int do_meta_command(char *zLine, ShellState *p){ if( rc==SQLITE_DONE ){ rc = 0; }else if( rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){ - raw_printf(stderr, "Error: source database is busy\n"); + eputz("Error: source database is busy\n"); rc = 1; }else{ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + eputf("Error: %s\n", sqlite3_errmsg(p->db)); rc = 1; } close_db(pSrc); @@ -25779,11 +28084,15 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_db_config( p->db, SQLITE_DBCONFIG_STMT_SCANSTATUS, p->scanstatsOn, (int*)0 ); -#ifndef SQLITE_ENABLE_STMT_SCANSTATUS - raw_printf(stderr, "Warning: .scanstats not available in this build.\n"); +#if !defined(SQLITE_ENABLE_STMT_SCANSTATUS) + eputz("Warning: .scanstats not available in this build.\n"); +#elif !defined(SQLITE_ENABLE_BYTECODE_VTAB) + if( p->scanstatsOn==3 ){ + eputz("Warning: \".scanstats vm\" not available in this build.\n"); + } #endif }else{ - raw_printf(stderr, "Usage: .scanstats on|off|est\n"); + eputz("Usage: .scanstats on|off|est\n"); rc = 1; } }else @@ -25812,14 +28121,13 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( optionMatch(azArg[ii],"nosys") ){ bNoSystemTabs = 1; }else if( azArg[ii][0]=='-' ){ - utf8_printf(stderr, "Unknown option: \"%s\"\n", azArg[ii]); + eputf("Unknown option: \"%s\"\n", azArg[ii]); rc = 1; goto meta_command_exit; }else if( zName==0 ){ zName = azArg[ii]; }else{ - raw_printf(stderr, - "Usage: .schema ?--indent? ?--nosys? ?LIKE-PATTERN?\n"); + eputz("Usage: .schema ?--indent? ?--nosys? ?LIKE-PATTERN?\n"); rc = 1; goto meta_command_exit; } @@ -25852,7 +28160,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = sqlite3_prepare_v2(p->db, "SELECT name FROM pragma_database_list", -1, &pStmt, 0); if( rc ){ - utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); + eputf("Error: %s\n", sqlite3_errmsg(p->db)); sqlite3_finalize(pStmt); rc = 1; goto meta_command_exit; @@ -25914,18 +28222,18 @@ static int do_meta_command(char *zLine, ShellState *p){ appendText(&sSelect, "sql IS NOT NULL" " ORDER BY snum, rowid", 0); if( bDebug ){ - utf8_printf(p->out, "SQL: %s;\n", sSelect.z); + oputf("SQL: %s;\n", sSelect.z); }else{ rc = sqlite3_exec(p->db, sSelect.z, callback, &data, &zErrMsg); } freeText(&sSelect); } if( zErrMsg ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + eputf("Error: %s\n", zErrMsg); sqlite3_free(zErrMsg); rc = 1; }else if( rc != SQLITE_OK ){ - raw_printf(stderr,"Error: querying schema information\n"); + eputz("Error: querying schema information\n"); rc = 1; }else{ rc = 0; @@ -25971,11 +28279,11 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nCmd!=2 ) goto session_syntax_error; if( pSession->p==0 ){ session_not_open: - raw_printf(stderr, "ERROR: No sessions are open\n"); + eputz("ERROR: No sessions are open\n"); }else{ rc = sqlite3session_attach(pSession->p, azCmd[1]); if( rc ){ - raw_printf(stderr, "ERROR: sqlite3session_attach() returns %d\n", rc); + eputf("ERROR: sqlite3session_attach() returns %d\n",rc); rc = 0; } } @@ -25994,8 +28302,8 @@ static int do_meta_command(char *zLine, ShellState *p){ if( pSession->p==0 ) goto session_not_open; out = fopen(azCmd[1], "wb"); if( out==0 ){ - utf8_printf(stderr, "ERROR: cannot open \"%s\" for writing\n", - azCmd[1]); + eputf("ERROR: cannot open \"%s\" for writing\n", + azCmd[1]); }else{ int szChng; void *pChng; @@ -26005,13 +28313,12 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = sqlite3session_patchset(pSession->p, &szChng, &pChng); } if( rc ){ - printf("Error: error code %d\n", rc); + sputf(stdout, "Error: error code %d\n", rc); rc = 0; } if( pChng && fwrite(pChng, szChng, 1, out)!=1 ){ - raw_printf(stderr, "ERROR: Failed to write entire %d-byte output\n", - szChng); + eputf("ERROR: Failed to write entire %d-byte output\n", szChng); } sqlite3_free(pChng); fclose(out); @@ -26038,8 +28345,7 @@ static int do_meta_command(char *zLine, ShellState *p){ ii = nCmd==1 ? -1 : booleanValue(azCmd[1]); if( pAuxDb->nSession ){ ii = sqlite3session_enable(pSession->p, ii); - utf8_printf(p->out, "session %s enable flag = %d\n", - pSession->zName, ii); + oputf("session %s enable flag = %d\n", pSession->zName, ii); } }else @@ -26056,10 +28362,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_free(pSession->azFilter); nByte = sizeof(pSession->azFilter[0])*(nCmd-1); pSession->azFilter = sqlite3_malloc( nByte ); - if( pSession->azFilter==0 ){ - raw_printf(stderr, "Error: out or memory\n"); - exit(1); - } + shell_check_oom( pSession->azFilter ); for(ii=1; iiazFilter[ii-1] = sqlite3_mprintf("%s", azCmd[ii]); shell_check_oom(x); @@ -26077,8 +28380,7 @@ static int do_meta_command(char *zLine, ShellState *p){ ii = nCmd==1 ? -1 : booleanValue(azCmd[1]); if( pAuxDb->nSession ){ ii = sqlite3session_indirect(pSession->p, ii); - utf8_printf(p->out, "session %s indirect flag = %d\n", - pSession->zName, ii); + oputf("session %s indirect flag = %d\n", pSession->zName, ii); } }else @@ -26090,8 +28392,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nCmd!=1 ) goto session_syntax_error; if( pAuxDb->nSession ){ ii = sqlite3session_isempty(pSession->p); - utf8_printf(p->out, "session %s isempty flag = %d\n", - pSession->zName, ii); + oputf("session %s isempty flag = %d\n", pSession->zName, ii); } }else @@ -26100,7 +28401,7 @@ static int do_meta_command(char *zLine, ShellState *p){ */ if( cli_strcmp(azCmd[0],"list")==0 ){ for(i=0; inSession; i++){ - utf8_printf(p->out, "%d %s\n", i, pAuxDb->aSession[i].zName); + oputf("%d %s\n", i, pAuxDb->aSession[i].zName); } }else @@ -26115,19 +28416,18 @@ static int do_meta_command(char *zLine, ShellState *p){ if( zName[0]==0 ) goto session_syntax_error; for(i=0; inSession; i++){ if( cli_strcmp(pAuxDb->aSession[i].zName,zName)==0 ){ - utf8_printf(stderr, "Session \"%s\" already exists\n", zName); + eputf("Session \"%s\" already exists\n", zName); goto meta_command_exit; } } if( pAuxDb->nSession>=ArraySize(pAuxDb->aSession) ){ - raw_printf(stderr, - "Maximum of %d sessions\n", ArraySize(pAuxDb->aSession)); + eputf("Maximum of %d sessions\n", ArraySize(pAuxDb->aSession)); goto meta_command_exit; } pSession = &pAuxDb->aSession[pAuxDb->nSession]; rc = sqlite3session_create(p->db, azCmd[1], &pSession->p); if( rc ){ - raw_printf(stderr, "Cannot open session: error code=%d\n", rc); + eputf("Cannot open session: error code=%d\n", rc); rc = 0; goto meta_command_exit; } @@ -26151,7 +28451,7 @@ static int do_meta_command(char *zLine, ShellState *p){ int i, v; for(i=1; iout, "%s: %d 0x%x\n", azArg[i], v, v); + oputf("%s: %d 0x%x\n", azArg[i], v, v); } } if( cli_strncmp(azArg[0]+9, "integer", n-9)==0 ){ @@ -26160,7 +28460,7 @@ static int do_meta_command(char *zLine, ShellState *p){ char zBuf[200]; v = integerValue(azArg[i]); sqlite3_snprintf(sizeof(zBuf),zBuf,"%s: %lld 0x%llx\n", azArg[i],v,v); - utf8_printf(p->out, "%s", zBuf); + oputz(zBuf); } } }else @@ -26187,9 +28487,8 @@ static int do_meta_command(char *zLine, ShellState *p){ bVerbose++; }else { - utf8_printf(stderr, "Unknown option \"%s\" on \"%s\"\n", - azArg[i], azArg[0]); - raw_printf(stderr, "Should be one of: --init -v\n"); + eputf("Unknown option \"%s\" on \"%s\"\n", azArg[i], azArg[0]); + eputz("Should be one of: --init -v\n"); rc = 1; goto meta_command_exit; } @@ -26218,7 +28517,7 @@ static int do_meta_command(char *zLine, ShellState *p){ -1, &pStmt, 0); } if( rc ){ - raw_printf(stderr, "Error querying the selftest table\n"); + eputz("Error querying the selftest table\n"); rc = 1; sqlite3_finalize(pStmt); goto meta_command_exit; @@ -26234,10 +28533,10 @@ static int do_meta_command(char *zLine, ShellState *p){ if( zAns==0 ) continue; k = 0; if( bVerbose>0 ){ - printf("%d: %s %s\n", tno, zOp, zSql); + sputf(stdout, "%d: %s %s\n", tno, zOp, zSql); } if( cli_strcmp(zOp,"memo")==0 ){ - utf8_printf(p->out, "%s\n", zSql); + oputf("%s\n", zSql); }else if( cli_strcmp(zOp,"run")==0 ){ char *zErrMsg = 0; @@ -26246,23 +28545,22 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = sqlite3_exec(p->db, zSql, captureOutputCallback, &str, &zErrMsg); nTest++; if( bVerbose ){ - utf8_printf(p->out, "Result: %s\n", str.z); + oputf("Result: %s\n", str.z); } if( rc || zErrMsg ){ nErr++; rc = 1; - utf8_printf(p->out, "%d: error-code-%d: %s\n", tno, rc, zErrMsg); + oputf("%d: error-code-%d: %s\n", tno, rc, zErrMsg); sqlite3_free(zErrMsg); }else if( cli_strcmp(zAns,str.z)!=0 ){ nErr++; rc = 1; - utf8_printf(p->out, "%d: Expected: [%s]\n", tno, zAns); - utf8_printf(p->out, "%d: Got: [%s]\n", tno, str.z); + oputf("%d: Expected: [%s]\n", tno, zAns); + oputf("%d: Got: [%s]\n", tno, str.z); } - }else - { - utf8_printf(stderr, - "Unknown operation \"%s\" on selftest line %d\n", zOp, tno); + } + else{ + eputf("Unknown operation \"%s\" on selftest line %d\n", zOp, tno); rc = 1; break; } @@ -26270,12 +28568,12 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_finalize(pStmt); } /* End loop over k */ freeText(&str); - utf8_printf(p->out, "%d errors out of %d tests\n", nErr, nTest); + oputf("%d errors out of %d tests\n", nErr, nTest); }else if( c=='s' && cli_strncmp(azArg[0], "separator", n)==0 ){ if( nArg<2 || nArg>3 ){ - raw_printf(stderr, "Usage: .separator COL ?ROW?\n"); + eputz("Usage: .separator COL ?ROW?\n"); rc = 1; } if( nArg>=2 ){ @@ -26318,14 +28616,13 @@ static int do_meta_command(char *zLine, ShellState *p){ bDebug = 1; }else { - utf8_printf(stderr, "Unknown option \"%s\" on \"%s\"\n", - azArg[i], azArg[0]); + eputf("Unknown option \"%s\" on \"%s\"\n", azArg[i], azArg[0]); showHelp(p->out, azArg[0]); rc = 1; goto meta_command_exit; } }else if( zLike ){ - raw_printf(stderr, "Usage: .sha3sum ?OPTIONS? ?LIKE-PATTERN?\n"); + eputz("Usage: .sha3sum ?OPTIONS? ?LIKE-PATTERN?\n"); rc = 1; goto meta_command_exit; }else{ @@ -26397,7 +28694,7 @@ static int do_meta_command(char *zLine, ShellState *p){ freeText(&sQuery); freeText(&sSql); if( bDebug ){ - utf8_printf(p->out, "%s\n", zSql); + oputf("%s\n", zSql); }else{ shell_exec(p, zSql, 0); } @@ -26427,7 +28724,7 @@ static int do_meta_command(char *zLine, ShellState *p){ "' OR ') as query, tname from tabcols group by tname)" , zRevText); shell_check_oom(zRevText); - if( bDebug ) utf8_printf(p->out, "%s\n", zRevText); + if( bDebug ) oputf("%s\n", zRevText); lrc = sqlite3_prepare_v2(p->db, zRevText, -1, &pStmt, 0); if( lrc!=SQLITE_OK ){ /* assert(lrc==SQLITE_NOMEM); // might also be SQLITE_ERROR if the @@ -26440,7 +28737,7 @@ static int do_meta_command(char *zLine, ShellState *p){ const char *zGenQuery = (char*)sqlite3_column_text(pStmt,0); sqlite3_stmt *pCheckStmt; lrc = sqlite3_prepare_v2(p->db, zGenQuery, -1, &pCheckStmt, 0); - if( bDebug ) utf8_printf(p->out, "%s\n", zGenQuery); + if( bDebug ) oputf("%s\n", zGenQuery); if( lrc!=SQLITE_OK ){ rc = 1; }else{ @@ -26448,9 +28745,8 @@ static int do_meta_command(char *zLine, ShellState *p){ double countIrreversible = sqlite3_column_double(pCheckStmt, 0); if( countIrreversible>0 ){ int sz = (int)(countIrreversible + 0.5); - utf8_printf(stderr, - "Digest includes %d invalidly encoded text field%s.\n", - sz, (sz>1)? "s": ""); + eputf("Digest includes %d invalidly encoded text field%s.\n", + sz, (sz>1)? "s": ""); } } sqlite3_finalize(pCheckStmt); @@ -26458,7 +28754,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_finalize(pStmt); } } - if( rc ) utf8_printf(stderr, ".sha3sum failed.\n"); + if( rc ) eputz(".sha3sum failed.\n"); sqlite3_free(zRevText); } #endif /* !defined(*_OMIT_SCHEMA_PRAGMAS) && !defined(*_OMIT_VIRTUALTABLE) */ @@ -26474,7 +28770,7 @@ static int do_meta_command(char *zLine, ShellState *p){ int i, x; failIfSafeMode(p, "cannot run .%s in safe mode", azArg[0]); if( nArg<2 ){ - raw_printf(stderr, "Usage: .system COMMAND\n"); + eputz("Usage: .system COMMAND\n"); rc = 1; goto meta_command_exit; } @@ -26483,9 +28779,11 @@ static int do_meta_command(char *zLine, ShellState *p){ zCmd = sqlite3_mprintf(strchr(azArg[i],' ')==0?"%z %s":"%z \"%s\"", zCmd, azArg[i]); } + consoleRestore(); x = zCmd!=0 ? system(zCmd) : 1; + consoleRenewSetup(); sqlite3_free(zCmd); - if( x ) raw_printf(stderr, "System command returns %d\n", x); + if( x ) eputf("System command returns %d\n", x); }else #endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) */ @@ -26494,52 +28792,51 @@ static int do_meta_command(char *zLine, ShellState *p){ const char *zOut; int i; if( nArg!=1 ){ - raw_printf(stderr, "Usage: .show\n"); + eputz("Usage: .show\n"); rc = 1; goto meta_command_exit; } - utf8_printf(p->out, "%12.12s: %s\n","echo", - azBool[ShellHasFlag(p, SHFLG_Echo)]); - utf8_printf(p->out, "%12.12s: %s\n","eqp", azBool[p->autoEQP&3]); - utf8_printf(p->out, "%12.12s: %s\n","explain", - p->mode==MODE_Explain ? "on" : p->autoExplain ? "auto" : "off"); - utf8_printf(p->out,"%12.12s: %s\n","headers", azBool[p->showHeader!=0]); + oputf("%12.12s: %s\n","echo", + azBool[ShellHasFlag(p, SHFLG_Echo)]); + oputf("%12.12s: %s\n","eqp", azBool[p->autoEQP&3]); + oputf("%12.12s: %s\n","explain", + p->mode==MODE_Explain ? "on" : p->autoExplain ? "auto" : "off"); + oputf("%12.12s: %s\n","headers", azBool[p->showHeader!=0]); if( p->mode==MODE_Column || (p->mode>=MODE_Markdown && p->mode<=MODE_Box) ){ - utf8_printf - (p->out, "%12.12s: %s --wrap %d --wordwrap %s --%squote\n", "mode", - modeDescr[p->mode], p->cmOpts.iWrap, - p->cmOpts.bWordWrap ? "on" : "off", - p->cmOpts.bQuote ? "" : "no"); + oputf("%12.12s: %s --wrap %d --wordwrap %s --%squote\n", "mode", + modeDescr[p->mode], p->cmOpts.iWrap, + p->cmOpts.bWordWrap ? "on" : "off", + p->cmOpts.bQuote ? "" : "no"); }else{ - utf8_printf(p->out, "%12.12s: %s\n","mode", modeDescr[p->mode]); - } - utf8_printf(p->out, "%12.12s: ", "nullvalue"); - output_c_string(p->out, p->nullValue); - raw_printf(p->out, "\n"); - utf8_printf(p->out,"%12.12s: %s\n","output", - strlen30(p->outfile) ? p->outfile : "stdout"); - utf8_printf(p->out,"%12.12s: ", "colseparator"); - output_c_string(p->out, p->colSeparator); - raw_printf(p->out, "\n"); - utf8_printf(p->out,"%12.12s: ", "rowseparator"); - output_c_string(p->out, p->rowSeparator); - raw_printf(p->out, "\n"); + oputf("%12.12s: %s\n","mode", modeDescr[p->mode]); + } + oputf("%12.12s: ", "nullvalue"); + output_c_string(p->nullValue); + oputz("\n"); + oputf("%12.12s: %s\n","output", + strlen30(p->outfile) ? p->outfile : "stdout"); + oputf("%12.12s: ", "colseparator"); + output_c_string(p->colSeparator); + oputz("\n"); + oputf("%12.12s: ", "rowseparator"); + output_c_string(p->rowSeparator); + oputz("\n"); switch( p->statsOn ){ case 0: zOut = "off"; break; default: zOut = "on"; break; case 2: zOut = "stmt"; break; case 3: zOut = "vmstep"; break; } - utf8_printf(p->out, "%12.12s: %s\n","stats", zOut); - utf8_printf(p->out, "%12.12s: ", "width"); + oputf("%12.12s: %s\n","stats", zOut); + oputf("%12.12s: ", "width"); for (i=0;inWidth;i++) { - raw_printf(p->out, "%d ", p->colWidth[i]); + oputf("%d ", p->colWidth[i]); } - raw_printf(p->out, "\n"); - utf8_printf(p->out, "%12.12s: %s\n", "filename", - p->pAuxDb->zDbFilename ? p->pAuxDb->zDbFilename : ""); + oputz("\n"); + oputf("%12.12s: %s\n", "filename", + p->pAuxDb->zDbFilename ? p->pAuxDb->zDbFilename : ""); }else if( c=='s' && cli_strncmp(azArg[0], "stats", n)==0 ){ @@ -26554,7 +28851,7 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( nArg==1 ){ display_stats(p->db, p, 0); }else{ - raw_printf(stderr, "Usage: .stats ?on|off|stmt|vmstep?\n"); + eputz("Usage: .stats ?on|off|stmt|vmstep?\n"); rc = 1; } }else @@ -26580,7 +28877,7 @@ static int do_meta_command(char *zLine, ShellState *p){ /* It is an historical accident that the .indexes command shows an error ** when called with the wrong number of arguments whereas the .tables ** command does not. */ - raw_printf(stderr, "Usage: .indexes ?LIKE-PATTERN?\n"); + eputz("Usage: .indexes ?LIKE-PATTERN?\n"); rc = 1; sqlite3_finalize(pStmt); goto meta_command_exit; @@ -26656,10 +28953,9 @@ static int do_meta_command(char *zLine, ShellState *p){ for(i=0; iout, "%s%-*s", zSp, maxlen, - azResult[j] ? azResult[j]:""); + oputf("%s%-*s", zSp, maxlen, azResult[j] ? azResult[j]:""); } - raw_printf(p->out, "\n"); + oputz("\n"); } } @@ -26673,7 +28969,7 @@ static int do_meta_command(char *zLine, ShellState *p){ output_reset(p); p->out = output_file_open("testcase-out.txt", 0); if( p->out==0 ){ - raw_printf(stderr, "Error: cannot open 'testcase-out.txt'\n"); + eputz("Error: cannot open 'testcase-out.txt'\n"); } if( nArg>=2 ){ sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]); @@ -26697,9 +28993,11 @@ static int do_meta_command(char *zLine, ShellState *p){ /*{"bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, 1, "" },*/ {"byteorder", SQLITE_TESTCTRL_BYTEORDER, 0, "" }, {"extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,0,"BOOLEAN" }, - /*{"fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, 1,"" },*/ + {"fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, 1,"args..." }, + {"fk_no_action", SQLITE_TESTCTRL_FK_NO_ACTION, 0, "BOOLEAN" }, {"imposter", SQLITE_TESTCTRL_IMPOSTER,1,"SCHEMA ON/OFF ROOTPAGE"}, {"internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS,0,"" }, + {"json_selfcheck", SQLITE_TESTCTRL_JSON_SELFCHECK ,0,"BOOLEAN" }, {"localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,0,"BOOLEAN" }, {"never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT,1, "BOOLEAN" }, {"optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS,0,"DISABLE-MASK" }, @@ -26713,7 +29011,7 @@ static int do_meta_command(char *zLine, ShellState *p){ {"seek_count", SQLITE_TESTCTRL_SEEK_COUNT, 0, "" }, {"sorter_mmap", SQLITE_TESTCTRL_SORTER_MMAP, 0, "NMAX" }, {"tune", SQLITE_TESTCTRL_TUNE, 1, "ID VALUE" }, - {"uselongdouble", SQLITE_TESTCTRL_USELONGDOUBLE,0,"?BOOLEAN|\"default\"?"}, + {"uselongdouble", SQLITE_TESTCTRL_USELONGDOUBLE,0,"?BOOLEAN|\"default\"?"}, }; int testctrl = -1; int iCtrl = -1; @@ -26733,11 +29031,11 @@ static int do_meta_command(char *zLine, ShellState *p){ /* --help lists all test-controls */ if( cli_strcmp(zCmd,"help")==0 ){ - utf8_printf(p->out, "Available test-controls:\n"); + oputz("Available test-controls:\n"); for(i=0; iout, " .testctrl %s %s\n", - aCtrl[i].zCtrlName, aCtrl[i].zUsage); + oputf(" .testctrl %s %s\n", + aCtrl[i].zCtrlName, aCtrl[i].zUsage); } rc = 1; goto meta_command_exit; @@ -26753,21 +29051,22 @@ static int do_meta_command(char *zLine, ShellState *p){ testctrl = aCtrl[i].ctrlCode; iCtrl = i; }else{ - utf8_printf(stderr, "Error: ambiguous test-control: \"%s\"\n" - "Use \".testctrl --help\" for help\n", zCmd); + eputf("Error: ambiguous test-control: \"%s\"\n" + "Use \".testctrl --help\" for help\n", zCmd); rc = 1; goto meta_command_exit; } } } if( testctrl<0 ){ - utf8_printf(stderr,"Error: unknown test-control: %s\n" - "Use \".testctrl --help\" for help\n", zCmd); + eputf("Error: unknown test-control: %s\n" + "Use \".testctrl --help\" for help\n", zCmd); }else{ switch(testctrl){ /* sqlite3_test_control(int, db, int) */ case SQLITE_TESTCTRL_OPTIMIZATIONS: + case SQLITE_TESTCTRL_FK_NO_ACTION: if( nArg==3 ){ unsigned int opt = (unsigned int)strtol(azArg[2], 0, 0); rc2 = sqlite3_test_control(testctrl, p->db, opt); @@ -26801,7 +29100,7 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3 *db; if( ii==0 && cli_strcmp(azArg[2],"random")==0 ){ sqlite3_randomness(sizeof(ii),&ii); - printf("-- random seed: %d\n", ii); + sputf(stdout, "-- random seed: %d\n", ii); } if( nArg==3 ){ db = 0; @@ -26869,7 +29168,7 @@ static int do_meta_command(char *zLine, ShellState *p){ case SQLITE_TESTCTRL_SEEK_COUNT: { u64 x = 0; rc2 = sqlite3_test_control(testctrl, p->db, &x); - utf8_printf(p->out, "%llu\n", x); + oputf("%llu\n", x); isOk = 3; break; } @@ -26900,11 +29199,11 @@ static int do_meta_command(char *zLine, ShellState *p){ int val = 0; rc2 = sqlite3_test_control(testctrl, -id, &val); if( rc2!=SQLITE_OK ) break; - if( id>1 ) utf8_printf(p->out, " "); - utf8_printf(p->out, "%d: %d", id, val); + if( id>1 ) oputz(" "); + oputf("%d: %d", id, val); id++; } - if( id>1 ) utf8_printf(p->out, "\n"); + if( id>1 ) oputz("\n"); isOk = 3; } break; @@ -26917,15 +29216,95 @@ static int do_meta_command(char *zLine, ShellState *p){ isOk = 3; } break; + case SQLITE_TESTCTRL_JSON_SELFCHECK: + if( nArg==2 ){ + rc2 = -1; + isOk = 1; + }else{ + rc2 = booleanValue(azArg[2]); + isOk = 3; + } + sqlite3_test_control(testctrl, &rc2); + break; + case SQLITE_TESTCTRL_FAULT_INSTALL: { + int kk; + int bShowHelp = nArg<=2; + isOk = 3; + for(kk=2; kk0 ) faultsim_state.eVerbose--; + }else if( cli_strcmp(z,"-id")==0 && kk+1=0 ){ - utf8_printf(p->out, "Usage: .testctrl %s %s\n", zCmd,aCtrl[iCtrl].zUsage); + oputf("Usage: .testctrl %s %s\n", zCmd,aCtrl[iCtrl].zUsage); rc = 1; }else if( isOk==1 ){ - raw_printf(p->out, "%d\n", rc2); + oputf("%d\n", rc2); }else if( isOk==2 ){ - raw_printf(p->out, "0x%08x\n", rc2); + oputf("0x%08x\n", rc2); } }else #endif /* !defined(SQLITE_UNTESTABLE) */ @@ -26939,11 +29318,11 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==2 ){ enableTimer = booleanValue(azArg[1]); if( enableTimer && !HAS_TIMER ){ - raw_printf(stderr, "Error: timer not available on this system.\n"); + eputz("Error: timer not available on this system.\n"); enableTimer = 0; } }else{ - raw_printf(stderr, "Usage: .timer on|off\n"); + eputz("Usage: .timer on|off\n"); rc = 1; } }else @@ -26980,7 +29359,7 @@ static int do_meta_command(char *zLine, ShellState *p){ mType |= SQLITE_TRACE_CLOSE; } else { - raw_printf(stderr, "Unknown option \"%s\" on \".trace\"\n", z); + eputf("Unknown option \"%s\" on \".trace\"\n", z); rc = 1; goto meta_command_exit; } @@ -27004,7 +29383,7 @@ static int do_meta_command(char *zLine, ShellState *p){ int lenOpt; char *zOpt; if( nArg<2 ){ - raw_printf(stderr, "Usage: .unmodule [--allexcept] NAME ...\n"); + eputz("Usage: .unmodule [--allexcept] NAME ...\n"); rc = 1; goto meta_command_exit; } @@ -27026,60 +29405,60 @@ static int do_meta_command(char *zLine, ShellState *p){ #if SQLITE_USER_AUTHENTICATION if( c=='u' && cli_strncmp(azArg[0], "user", n)==0 ){ if( nArg<2 ){ - raw_printf(stderr, "Usage: .user SUBCOMMAND ...\n"); + eputz("Usage: .user SUBCOMMAND ...\n"); rc = 1; goto meta_command_exit; } open_db(p, 0); if( cli_strcmp(azArg[1],"login")==0 ){ if( nArg!=4 ){ - raw_printf(stderr, "Usage: .user login USER PASSWORD\n"); + eputz("Usage: .user login USER PASSWORD\n"); rc = 1; goto meta_command_exit; } rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3], strlen30(azArg[3])); if( rc ){ - utf8_printf(stderr, "Authentication failed for user %s\n", azArg[2]); + eputf("Authentication failed for user %s\n", azArg[2]); rc = 1; } }else if( cli_strcmp(azArg[1],"add")==0 ){ if( nArg!=5 ){ - raw_printf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n"); + eputz("Usage: .user add USER PASSWORD ISADMIN\n"); rc = 1; goto meta_command_exit; } rc = sqlite3_user_add(p->db, azArg[2], azArg[3], strlen30(azArg[3]), booleanValue(azArg[4])); if( rc ){ - raw_printf(stderr, "User-Add failed: %d\n", rc); + eputf("User-Add failed: %d\n", rc); rc = 1; } }else if( cli_strcmp(azArg[1],"edit")==0 ){ if( nArg!=5 ){ - raw_printf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n"); + eputz("Usage: .user edit USER PASSWORD ISADMIN\n"); rc = 1; goto meta_command_exit; } rc = sqlite3_user_change(p->db, azArg[2], azArg[3], strlen30(azArg[3]), booleanValue(azArg[4])); if( rc ){ - raw_printf(stderr, "User-Edit failed: %d\n", rc); + eputf("User-Edit failed: %d\n", rc); rc = 1; } }else if( cli_strcmp(azArg[1],"delete")==0 ){ if( nArg!=3 ){ - raw_printf(stderr, "Usage: .user delete USER\n"); + eputz("Usage: .user delete USER\n"); rc = 1; goto meta_command_exit; } rc = sqlite3_user_delete(p->db, azArg[2]); if( rc ){ - raw_printf(stderr, "User-Delete failed: %d\n", rc); + eputf("User-Delete failed: %d\n", rc); rc = 1; } }else{ - raw_printf(stderr, "Usage: .user login|add|edit|delete ...\n"); + eputz("Usage: .user login|add|edit|delete ...\n"); rc = 1; goto meta_command_exit; } @@ -27088,21 +29467,21 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='v' && cli_strncmp(azArg[0], "version", n)==0 ){ char *zPtrSz = sizeof(void*)==8 ? "64-bit" : "32-bit"; - utf8_printf(p->out, "SQLite %s %s\n" /*extra-version-info*/, - sqlite3_libversion(), sqlite3_sourceid()); + oputf("SQLite %s %s\n" /*extra-version-info*/, + sqlite3_libversion(), sqlite3_sourceid()); #if SQLITE_HAVE_ZLIB - utf8_printf(p->out, "zlib version %s\n", zlibVersion()); + oputf("zlib version %s\n", zlibVersion()); #endif #define CTIMEOPT_VAL_(opt) #opt #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) #if defined(__clang__) && defined(__clang_major__) - utf8_printf(p->out, "clang-" CTIMEOPT_VAL(__clang_major__) "." - CTIMEOPT_VAL(__clang_minor__) "." - CTIMEOPT_VAL(__clang_patchlevel__) " (%s)\n", zPtrSz); + oputf("clang-" CTIMEOPT_VAL(__clang_major__) "." + CTIMEOPT_VAL(__clang_minor__) "." + CTIMEOPT_VAL(__clang_patchlevel__) " (%s)\n", zPtrSz); #elif defined(_MSC_VER) - utf8_printf(p->out, "msvc-" CTIMEOPT_VAL(_MSC_VER) " (%s)\n", zPtrSz); + oputf("msvc-" CTIMEOPT_VAL(_MSC_VER) " (%s)\n", zPtrSz); #elif defined(__GNUC__) && defined(__VERSION__) - utf8_printf(p->out, "gcc-" __VERSION__ " (%s)\n", zPtrSz); + oputf("gcc-" __VERSION__ " (%s)\n", zPtrSz); #endif }else @@ -27112,10 +29491,10 @@ static int do_meta_command(char *zLine, ShellState *p){ if( p->db ){ sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFS_POINTER, &pVfs); if( pVfs ){ - utf8_printf(p->out, "vfs.zName = \"%s\"\n", pVfs->zName); - raw_printf(p->out, "vfs.iVersion = %d\n", pVfs->iVersion); - raw_printf(p->out, "vfs.szOsFile = %d\n", pVfs->szOsFile); - raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname); + oputf("vfs.zName = \"%s\"\n", pVfs->zName); + oputf("vfs.iVersion = %d\n", pVfs->iVersion); + oputf("vfs.szOsFile = %d\n", pVfs->szOsFile); + oputf("vfs.mxPathname = %d\n", pVfs->mxPathname); } } }else @@ -27127,13 +29506,13 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_file_control(p->db, "main", SQLITE_FCNTL_VFS_POINTER, &pCurrent); } for(pVfs=sqlite3_vfs_find(0); pVfs; pVfs=pVfs->pNext){ - utf8_printf(p->out, "vfs.zName = \"%s\"%s\n", pVfs->zName, - pVfs==pCurrent ? " <--- CURRENT" : ""); - raw_printf(p->out, "vfs.iVersion = %d\n", pVfs->iVersion); - raw_printf(p->out, "vfs.szOsFile = %d\n", pVfs->szOsFile); - raw_printf(p->out, "vfs.mxPathname = %d\n", pVfs->mxPathname); + oputf("vfs.zName = \"%s\"%s\n", pVfs->zName, + pVfs==pCurrent ? " <--- CURRENT" : ""); + oputf("vfs.iVersion = %d\n", pVfs->iVersion); + oputf("vfs.szOsFile = %d\n", pVfs->szOsFile); + oputf("vfs.mxPathname = %d\n", pVfs->mxPathname); if( pVfs->pNext ){ - raw_printf(p->out, "-----------------------------------\n"); + oputz("-----------------------------------\n"); } } }else @@ -27144,7 +29523,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( p->db ){ sqlite3_file_control(p->db, zDbName, SQLITE_FCNTL_VFSNAME, &zVfsName); if( zVfsName ){ - utf8_printf(p->out, "%s\n", zVfsName); + oputf("%s\n", zVfsName); sqlite3_free(zVfsName); } } @@ -27168,8 +29547,8 @@ static int do_meta_command(char *zLine, ShellState *p){ }else { - utf8_printf(stderr, "Error: unknown command or invalid arguments: " - " \"%s\". Enter \".help\" for help\n", azArg[0]); + eputf("Error: unknown command or invalid arguments: " + " \"%s\". Enter \".help\" for help\n", azArg[0]); rc = 1; } @@ -27323,6 +29702,88 @@ static int line_is_complete(char *zSql, int nSql){ return rc; } +/* +** This function is called after processing each line of SQL in the +** runOneSqlLine() function. Its purpose is to detect scenarios where +** defensive mode should be automatically turned off. Specifically, when +** +** 1. The first line of input is "PRAGMA foreign_keys=OFF;", +** 2. The second line of input is "BEGIN TRANSACTION;", +** 3. The database is empty, and +** 4. The shell is not running in --safe mode. +** +** The implementation uses the ShellState.eRestoreState to maintain state: +** +** 0: Have not seen any SQL. +** 1: Have seen "PRAGMA foreign_keys=OFF;". +** 2-6: Currently running .dump transaction. If the "2" bit is set, +** disable DEFENSIVE when done. If "4" is set, disable DQS_DDL. +** 7: Nothing left to do. This function becomes a no-op. +*/ +static int doAutoDetectRestore(ShellState *p, const char *zSql){ + int rc = SQLITE_OK; + + if( p->eRestoreState<7 ){ + switch( p->eRestoreState ){ + case 0: { + const char *zExpect = "PRAGMA foreign_keys=OFF;"; + assert( strlen(zExpect)==24 ); + if( p->bSafeMode==0 && memcmp(zSql, zExpect, 25)==0 ){ + p->eRestoreState = 1; + }else{ + p->eRestoreState = 7; + } + break; + }; + + case 1: { + int bIsDump = 0; + const char *zExpect = "BEGIN TRANSACTION;"; + assert( strlen(zExpect)==18 ); + if( memcmp(zSql, zExpect, 19)==0 ){ + /* Now check if the database is empty. */ + const char *zQuery = "SELECT 1 FROM sqlite_schema LIMIT 1"; + sqlite3_stmt *pStmt = 0; + + bIsDump = 1; + shellPrepare(p->db, &rc, zQuery, &pStmt); + if( rc==SQLITE_OK && sqlite3_step(pStmt)==SQLITE_ROW ){ + bIsDump = 0; + } + shellFinalize(&rc, pStmt); + } + if( bIsDump && rc==SQLITE_OK ){ + int bDefense = 0; + int bDqsDdl = 0; + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, -1, &bDefense); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DQS_DDL, -1, &bDqsDdl); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, 0, 0); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DQS_DDL, 1, 0); + p->eRestoreState = (bDefense ? 2 : 0) + (bDqsDdl ? 4 : 0); + }else{ + p->eRestoreState = 7; + } + break; + } + + default: { + if( sqlite3_get_autocommit(p->db) ){ + if( (p->eRestoreState & 2) ){ + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, 1, 0); + } + if( (p->eRestoreState & 4) ){ + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DQS_DDL, 0, 0); + } + p->eRestoreState = 7; + } + break; + } + } + } + + return rc; +} + /* ** Run a single line of SQL. Return the number of errors. */ @@ -27359,7 +29820,7 @@ static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){ }else{ sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%s:", zErrorType); } - utf8_printf(stderr, "%s %s\n", zPrefix, zErrorTail); + eputf("%s %s\n", zPrefix, zErrorTail); sqlite3_free(zErrMsg); zErrMsg = 0; return 1; @@ -27368,13 +29829,15 @@ static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){ sqlite3_snprintf(sizeof(zLineBuf), zLineBuf, "changes: %lld total_changes: %lld", sqlite3_changes64(p->db), sqlite3_total_changes64(p->db)); - raw_printf(p->out, "%s\n", zLineBuf); + oputf("%s\n", zLineBuf); } + + if( doAutoDetectRestore(p, zSql) ) return 1; return 0; } static void echo_group_input(ShellState *p, const char *zDo){ - if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo); + if( ShellHasFlag(p, SHFLG_Echo) ) oputf("%s\n", zDo); } #ifdef SQLITE_SHELL_FIDDLE @@ -27432,8 +29895,8 @@ static int process_input(ShellState *p){ if( p->inputNesting==MAX_INPUT_NESTING ){ /* This will be more informative in a later version. */ - utf8_printf(stderr,"Input nesting limit (%d) reached at line %d." - " Check recursion.\n", MAX_INPUT_NESTING, p->lineno); + eputf("Input nesting limit (%d) reached at line %d." + " Check recursion.\n", MAX_INPUT_NESTING, p->lineno); return 1; } ++p->inputNesting; @@ -27444,7 +29907,7 @@ static int process_input(ShellState *p){ zLine = one_input_line(p->in, zLine, nSql>0); if( zLine==0 ){ /* End of input */ - if( p->in==0 && stdin_is_interactive ) printf("\n"); + if( p->in==0 && stdin_is_interactive ) oputz("\n"); break; } if( seenInterrupt ){ @@ -27654,8 +30117,8 @@ static void process_sqliterc( if( sqliterc == NULL ){ home_dir = find_home_dir(0); if( home_dir==0 ){ - raw_printf(stderr, "-- warning: cannot find home directory;" - " cannot read ~/.sqliterc\n"); + eputz("-- warning: cannot find home directory;" + " cannot read ~/.sqliterc\n"); return; } zBuf = sqlite3_mprintf("%s/.sqliterc",home_dir); @@ -27665,12 +30128,12 @@ static void process_sqliterc( p->in = fopen(sqliterc,"rb"); if( p->in ){ if( stdin_is_interactive ){ - utf8_printf(stderr,"-- Loading resources from %s\n",sqliterc); + eputf("-- Loading resources from %s\n", sqliterc); } if( process_input(p) && bail_on_error ) exit(1); fclose(p->in); }else if( sqliterc_override!=0 ){ - utf8_printf(stderr,"cannot open: \"%s\"\n", sqliterc); + eputf("cannot open: \"%s\"\n", sqliterc); if( bail_on_error ) exit(1); } p->in = inSaved; @@ -27722,6 +30185,7 @@ static const char zOptions[] = " -newline SEP set output row separator. Default: '\\n'\n" " -nofollow refuse to open symbolic links to database files\n" " -nonce STRING set the safe-mode escape nonce\n" + " -no-rowid-in-view Disable rowid-in-view using sqlite3_config()\n" " -nullvalue TEXT set text string for NULL values. Default ''\n" " -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n" " -pcachetrace trace all page cache operations\n" @@ -27736,9 +30200,6 @@ static const char zOptions[] = " -table set output mode to 'table'\n" " -tabs set output mode to 'tabs'\n" " -unsafe-testing allow unsafe commands and modes for testing\n" -#if SHELL_WIN_UTF8_OPT - " -utf8 setup interactive console code page for UTF-8\n" -#endif " -version show SQLite version\n" " -vfs NAME use NAME as the default VFS\n" #ifdef SQLITE_ENABLE_VFSTRACE @@ -27749,16 +30210,15 @@ static const char zOptions[] = #endif ; static void usage(int showDetail){ - utf8_printf(stderr, - "Usage: %s [OPTIONS] [FILENAME [SQL]]\n" - "FILENAME is the name of an SQLite database. A new database is created\n" - "if the file does not previously exist. Defaults to :memory:.\n", Argv0); + eputf("Usage: %s [OPTIONS] [FILENAME [SQL]]\n" + "FILENAME is the name of an SQLite database. A new database is created\n" + "if the file does not previously exist. Defaults to :memory:.\n", Argv0); if( showDetail ){ - utf8_printf(stderr, "OPTIONS include:\n%s", zOptions); + eputf("OPTIONS include:\n%s", zOptions); }else{ - raw_printf(stderr, "Use the -help option for additional information\n"); + eputz("Use the -help option for additional information\n"); } - exit(1); + exit(0); } /* @@ -27767,8 +30227,8 @@ static void usage(int showDetail){ */ static void verify_uninitialized(void){ if( sqlite3_config(-1)==SQLITE_MISUSE ){ - utf8_printf(stdout, "WARNING: attempt to configure SQLite after" - " initialization.\n"); + sputz(stdout, "WARNING: attempt to configure SQLite after" + " initialization.\n"); } } @@ -27797,7 +30257,7 @@ static void main_init(ShellState *data) { /* ** Output text to the console in a font that attracts extra attention. */ -#ifdef _WIN32 +#if defined(_WIN32) || defined(WIN32) static void printBold(const char *zText){ #if !SQLITE_OS_WINRT HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); @@ -27807,14 +30267,14 @@ static void printBold(const char *zText){ FOREGROUND_RED|FOREGROUND_INTENSITY ); #endif - printf("%s", zText); + sputz(stdout, zText); #if !SQLITE_OS_WINRT SetConsoleTextAttribute(out, defaultScreenInfo.wAttributes); #endif } #else static void printBold(const char *zText){ - printf("\033[1m%s\033[0m", zText); + sputf(stdout, "\033[1m%s\033[0m", zText); } #endif @@ -27824,15 +30284,14 @@ static void printBold(const char *zText){ */ static char *cmdline_option_value(int argc, char **argv, int i){ if( i==argc ){ - utf8_printf(stderr, "%s: Error: missing argument to %s\n", - argv[0], argv[argc-1]); + eputf("%s: Error: missing argument to %s\n", argv[0], argv[argc-1]); exit(1); } return argv[i]; } static void sayAbnormalExit(void){ - if( seenInterrupt ) fprintf(stderr, "Program interrupted.\n"); + if( seenInterrupt ) eputz("Program interrupted.\n"); } #ifndef SQLITE_SHELL_IS_UTF8 @@ -27862,6 +30321,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ # define data shellState #else ShellState data; + StreamsAreConsole consStreams = SAC_NoConsole; #endif const char *zInitFile = 0; int i; @@ -27883,11 +30343,10 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ stdout_is_console = 1; data.wasm.zDefaultDbName = "/fiddle.sqlite3"; #else - stdin_is_interactive = isatty(0); - stdout_is_console = isatty(1); -#endif -#if SHELL_WIN_UTF8_OPT - atexit(console_restore); /* Needs revision for CLI as library call */ + consStreams = consoleClassifySetup(stdin, stdout, stderr); + stdin_is_interactive = (consStreams & SAC_InConsole)!=0; + stdout_is_console = (consStreams & SAC_OutConsole)!=0; + atexit(consoleRestore); #endif atexit(sayAbnormalExit); #ifdef SQLITE_DEBUG @@ -27896,9 +30355,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #if !defined(_WIN32_WCE) if( getenv("SQLITE_DEBUG_BREAK") ){ if( isatty(0) && isatty(2) ){ - fprintf(stderr, - "attach debugger to process %d and press any key to continue.\n", - GETPID()); + eputf("attach debugger to process %d and press any key to continue.\n", + GETPID()); fgetc(stdin); }else{ #if defined(_WIN32) || defined(WIN32) @@ -27918,14 +30376,14 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ signal(SIGINT, interrupt_handler); #elif (defined(_WIN32) || defined(WIN32)) && !defined(_WIN32_WCE) if( !SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE) ){ - fprintf(stderr, "No ^C handler.\n"); + eputz("No ^C handler.\n"); } #endif #if USE_SYSTEM_SQLITE+0!=1 if( cli_strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,60)!=0 ){ - utf8_printf(stderr, "SQLite header and source version mismatch\n%s\n%s\n", - sqlite3_sourceid(), SQLITE_SOURCE_ID); + eputf("SQLite header and source version mismatch\n%s\n%s\n", + sqlite3_sourceid(), SQLITE_SOURCE_ID); exit(1); } #endif @@ -27974,8 +30432,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ /* Do an initial pass through the command-line argument to locate ** the name of the database file, the name of the initialization file, - ** the size of the alternative malloc heap, - ** and the first command to execute. + ** the size of the alternative malloc heap, options affecting commands + ** or SQL run from the command line, and the first command to execute. */ #ifndef SQLITE_SHELL_FIDDLE verify_uninitialized(); @@ -28009,12 +30467,19 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ (void)cmdline_option_value(argc, argv, ++i); }else if( cli_strcmp(z,"-init")==0 ){ zInitFile = cmdline_option_value(argc, argv, ++i); + }else if( cli_strcmp(z,"-interactive")==0 ){ }else if( cli_strcmp(z,"-batch")==0 ){ /* Need to check for batch mode here to so we can avoid printing ** informational messages (like from process_sqliterc) before ** we do the actual processing of arguments later in a second pass. */ stdin_is_interactive = 0; + }else if( cli_strcmp(z,"-utf8")==0 ){ + }else if( cli_strcmp(z,"-no-utf8")==0 ){ + }else if( cli_strcmp(z,"-no-rowid-in-view")==0 ){ + int val = 0; + sqlite3_config(SQLITE_CONFIG_ROWID_IN_VIEW, &val); + assert( val==0 ); }else if( cli_strcmp(z,"-heap")==0 ){ #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) const char *zSize; @@ -28149,7 +30614,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( pVfs ){ sqlite3_vfs_register(pVfs, 1); }else{ - utf8_printf(stderr, "no such VFS: \"%s\"\n", zVfs); + eputf("no such VFS: \"%s\"\n", zVfs); exit(1); } } @@ -28159,7 +30624,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ data.pAuxDb->zDbFilename = ":memory:"; warnInmemoryDb = argc==1; #else - utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0); + eputf("%s: Error: no database filename specified\n", Argv0); return 1; #endif } @@ -28276,17 +30741,22 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ }else if( cli_strcmp(z,"-bail")==0 ){ /* No-op. The bail_on_error flag should already be set. */ }else if( cli_strcmp(z,"-version")==0 ){ - printf("%s %s (%d-bit)\n", sqlite3_libversion(), sqlite3_sourceid(), - 8*(int)sizeof(char*)); + sputf(stdout, "%s %s (%d-bit)\n", + sqlite3_libversion(), sqlite3_sourceid(), 8*(int)sizeof(char*)); return 0; }else if( cli_strcmp(z,"-interactive")==0 ){ + /* Need to check for interactive override here to so that it can + ** affect console setup (for Windows only) and testing thereof. + */ stdin_is_interactive = 1; }else if( cli_strcmp(z,"-batch")==0 ){ - stdin_is_interactive = 0; + /* already handled */ }else if( cli_strcmp(z,"-utf8")==0 ){ -#if SHELL_WIN_UTF8_OPT - console_utf8 = 1; -#endif /* SHELL_WIN_UTF8_OPT */ + /* already handled */ + }else if( cli_strcmp(z,"-no-utf8")==0 ){ + /* already handled */ + }else if( cli_strcmp(z,"-no-rowid-in-view")==0 ){ + /* already handled */ }else if( cli_strcmp(z,"-heap")==0 ){ i++; }else if( cli_strcmp(z,"-pagecache")==0 ){ @@ -28333,18 +30803,18 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ open_db(&data, 0); rc = shell_exec(&data, z, &zErrMsg); if( zErrMsg!=0 ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + eputf("Error: %s\n", zErrMsg); if( bail_on_error ) return rc!=0 ? rc : 1; }else if( rc!=0 ){ - utf8_printf(stderr,"Error: unable to process SQL \"%s\"\n", z); + eputf("Error: unable to process SQL \"%s\"\n", z); if( bail_on_error ) return rc; } } #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) }else if( cli_strncmp(z, "-A", 2)==0 ){ if( nCmd>0 ){ - utf8_printf(stderr, "Error: cannot mix regular SQL or dot-commands" - " with \"%s\"\n", z); + eputf("Error: cannot mix regular SQL or dot-commands" + " with \"%s\"\n", z); return 1; } open_db(&data, OPEN_DB_ZIPFILE); @@ -28362,20 +30832,12 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ }else if( cli_strcmp(z,"-unsafe-testing")==0 ){ /* Acted upon in first pass. */ }else{ - utf8_printf(stderr,"%s: Error: unknown option: %s\n", Argv0, z); - raw_printf(stderr,"Use -help for a list of options.\n"); + eputf("%s: Error: unknown option: %s\n", Argv0, z); + eputz("Use -help for a list of options.\n"); return 1; } data.cMode = data.mode; } -#if SHELL_WIN_UTF8_OPT - if( console_utf8 && stdin_is_interactive ){ - console_prepare(); - }else{ - setBinaryMode(stdin, 0); - console_utf8 = 0; - } -#endif if( !readStdin ){ /* Run all arguments that do not begin with '-' as if they were separate @@ -28395,9 +30857,9 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ rc = shell_exec(&data, azCmd[i], &zErrMsg); if( zErrMsg || rc ){ if( zErrMsg!=0 ){ - utf8_printf(stderr,"Error: %s\n", zErrMsg); + eputf("Error: %s\n", zErrMsg); }else{ - utf8_printf(stderr,"Error: unable to process SQL: %s\n", azCmd[i]); + eputf("Error: unable to process SQL: %s\n", azCmd[i]); } sqlite3_free(zErrMsg); free(azCmd); @@ -28412,16 +30874,19 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ char *zHome; char *zHistory; int nHistory; - printf( - "SQLite version %s %.19s\n" /*extra-version-info*/ - "Enter \".help\" for usage hints.\n", - sqlite3_libversion(), sqlite3_sourceid() - ); +#if CIO_WIN_WC_XLATE +# define SHELL_CIO_CHAR_SET (stdout_is_console? " (UTF-16 console I/O)" : "") +#else +# define SHELL_CIO_CHAR_SET "" +#endif + sputf(stdout, "SQLite version %s %.19s%s\n" /*extra-version-info*/ + "Enter \".help\" for usage hints.\n", + sqlite3_libversion(), sqlite3_sourceid(), SHELL_CIO_CHAR_SET); if( warnInmemoryDb ){ - printf("Connected to a "); + sputz(stdout, "Connected to a "); printBold("transient in-memory database"); - printf(".\nUse \".open FILENAME\" to reopen on a " - "persistent database.\n"); + sputz(stdout, ".\nUse \".open FILENAME\" to reopen on a" + " persistent database.\n"); } zHistory = getenv("SQLITE_HISTORY"); if( zHistory ){ @@ -28453,6 +30918,11 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #ifndef SQLITE_SHELL_FIDDLE /* In WASM mode we have to leave the db state in place so that ** client code can "push" SQL into it after this call returns. */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( data.expert.pExpert ){ + expertFinish(&data, 1, 0); + } +#endif free(azCmd); set_table_name(&data, 0); if( data.db ){ @@ -28481,8 +30951,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ memset(&data, 0, sizeof(data)); #ifdef SQLITE_DEBUG if( sqlite3_memory_used()>mem_main_enter ){ - utf8_printf(stderr, "Memory leaked: %u bytes\n", - (unsigned int)(sqlite3_memory_used()-mem_main_enter)); + eputf("Memory leaked: %u bytes\n", + (unsigned int)(sqlite3_memory_used()-mem_main_enter)); } #endif #endif /* !SQLITE_SHELL_FIDDLE */ @@ -28519,7 +30989,7 @@ sqlite3_vfs * fiddle_db_vfs(const char *zDbName){ /* Only for emcc experimentation purposes. */ sqlite3 * fiddle_db_arg(sqlite3 *arg){ - printf("fiddle_db_arg(%p)\n", (const void*)arg); + oputf("fiddle_db_arg(%p)\n", (const void*)arg); return arg; } @@ -28545,12 +31015,22 @@ const char * fiddle_db_filename(const char * zDbName){ /* ** Completely wipes out the contents of the currently-opened database -** but leaves its storage intact for reuse. +** but leaves its storage intact for reuse. If any transactions are +** active, they are forcibly rolled back. */ void fiddle_reset_db(void){ if( globalDb ){ - int rc = sqlite3_db_config(globalDb, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0); - if( 0==rc ) rc = sqlite3_exec(globalDb, "VACUUM", 0, 0, 0); + int rc; + while( sqlite3_txn_state(globalDb,0)>0 ){ + /* + ** Resolve problem reported in + ** https://sqlite.org/forum/forumpost/0b41a25d65 + */ + oputz("Rolling back in-progress transaction.\n"); + sqlite3_exec(globalDb,"ROLLBACK", 0, 0, 0); + } + rc = sqlite3_db_config(globalDb, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0); + if( 0==rc ) sqlite3_exec(globalDb, "VACUUM", 0, 0, 0); sqlite3_db_config(globalDb, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); } } diff --git a/src/sqlite/SQLite-3.43.1/sqlite3.1 b/src/sqlite/SQLite-3.46.0/sqlite3.1 similarity index 100% rename from src/sqlite/SQLite-3.43.1/sqlite3.1 rename to src/sqlite/SQLite-3.46.0/sqlite3.1 diff --git a/src/sqlite/SQLite-3.43.1/sqlite3.c b/src/sqlite/SQLite-3.46.0/sqlite3.c similarity index 94% rename from src/sqlite/SQLite-3.43.1/sqlite3.c rename to src/sqlite/SQLite-3.46.0/sqlite3.c index 1884b0823..eaa24a131 100644 --- a/src/sqlite/SQLite-3.43.1/sqlite3.c +++ b/src/sqlite/SQLite-3.46.0/sqlite3.c @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.43.1. By combining all the individual C code files into this +** version 3.46.0. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -18,7 +18,7 @@ ** separate file. This file contains only code for the core SQLite library. ** ** The content in this amalgamation comes from Fossil check-in -** d3a40c05c49e1a49264912b1a05bc2143ac. +** 96c92aba00c8375bc32fafcdf12429c58bd8. */ #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 @@ -459,9 +459,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.43.1" -#define SQLITE_VERSION_NUMBER 3043001 -#define SQLITE_SOURCE_ID "2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0" +#define SQLITE_VERSION "3.46.0" +#define SQLITE_VERSION_NUMBER 3046000 +#define SQLITE_SOURCE_ID "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -733,6 +733,8 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. **
  • The application must not modify the SQL statement text passed into ** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. +**
  • The application must not dereference the arrays or string pointers +** passed as the 3rd and 4th callback parameters after it returns. ** */ SQLITE_API int sqlite3_exec( @@ -1075,11 +1077,11 @@ struct sqlite3_file { ** ** xLock() upgrades the database file lock. In other words, xLock() moves the ** database file lock in the direction NONE toward EXCLUSIVE. The argument to -** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never +** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never ** SQLITE_LOCK_NONE. If the database file lock is already at or above the ** requested lock, then the call to xLock() is a no-op. ** xUnlock() downgrades the database file lock to either SHARED or NONE. -* If the lock is already at or below the requested lock state, then the call +** If the lock is already at or below the requested lock state, then the call ** to xUnlock() is a no-op. ** The xCheckReservedLock() method checks whether any database connection, ** either in this process or in some other process, is holding a RESERVED, @@ -2440,7 +2442,7 @@ struct sqlite3_mem_methods { ** is stored in each sorted record and the required column values loaded ** from the database as records are returned in sorted order. The default ** value for this option is to never use this optimization. Specifying a -** negative value for this option restores the default behaviour. +** negative value for this option restores the default behavior. ** This option is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option. ** @@ -2454,6 +2456,22 @@ struct sqlite3_mem_methods { ** configuration setting is never used, then the default maximum is determined ** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that ** compile-time option is not set, then the default maximum is 1073741824. +** +** [[SQLITE_CONFIG_ROWID_IN_VIEW]] +**
    SQLITE_CONFIG_ROWID_IN_VIEW +**
    The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability +** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is +** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability +** defaults to on. This configuration option queries the current setting or +** changes the setting to off or on. The argument is a pointer to an integer. +** If that integer initially holds a value of 1, then the ability for VIEWs to +** have ROWIDs is activated. If the integer initially holds zero, then the +** ability is deactivated. Any other initial value for the integer leaves the +** setting unchanged. After changes, if any, the integer is written with +** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite +** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and +** recommended case) then the integer is always filled with zero, regardless +** if its initial value. ** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ @@ -2485,6 +2503,7 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */ #define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */ #define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */ +#define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */ /* ** CAPI3REF: Database Connection Configuration Options @@ -2615,7 +2634,7 @@ struct sqlite3_mem_methods { ** database handle, SQLite checks if this will mean that there are now no ** connections at all to the database. If so, it performs a checkpoint ** operation before closing the connection. This option may be used to -** override this behaviour. The first parameter passed to this operation +** override this behavior. The first parameter passed to this operation ** is an integer - positive to disable checkpoints-on-close, or zero (the ** default) to enable them, and negative to leave the setting unchanged. ** The second parameter is a pointer to an integer @@ -3599,8 +3618,8 @@ SQLITE_API int sqlite3_set_authorizer( #define SQLITE_RECURSIVE 33 /* NULL NULL */ /* -** CAPI3REF: Tracing And Profiling Functions -** METHOD: sqlite3 +** CAPI3REF: Deprecated Tracing And Profiling Functions +** DEPRECATED ** ** These routines are deprecated. Use the [sqlite3_trace_v2()] interface ** instead of the routines described here. @@ -4267,14 +4286,17 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename); ** ** ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language -** text that describes the error, as either UTF-8 or UTF-16 respectively. +** text that describes the error, as either UTF-8 or UTF-16 respectively, +** or NULL if no error message is available. +** (See how SQLite handles [invalid UTF] for exceptions to this rule.) ** ^(Memory to hold the error message string is managed internally. ** The application does not need to worry about freeing the result. ** However, the error string might be overwritten or deallocated by ** subsequent calls to other SQLite interface functions.)^ ** -** ^The sqlite3_errstr() interface returns the English-language text -** that describes the [result code], as UTF-8. +** ^The sqlite3_errstr(E) interface returns the English-language text +** that describes the [result code] E, as UTF-8, or NULL if E is not an +** result code for which a text error message is available. ** ^(Memory to hold the error message string is managed internally ** and must not be freed by the application)^. ** @@ -5638,6 +5660,7 @@ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); */ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); + /* ** CAPI3REF: Create Or Redefine SQL Functions ** KEYWORDS: {function creation routines} @@ -5884,13 +5907,27 @@ SQLITE_API int sqlite3_create_window_function( **
    ** ** [[SQLITE_SUBTYPE]]
    SQLITE_SUBTYPE
    -** The SQLITE_SUBTYPE flag indicates to SQLite that a function may call +** The SQLITE_SUBTYPE flag indicates to SQLite that a function might call ** [sqlite3_value_subtype()] to inspect the sub-types of its arguments. -** Specifying this flag makes no difference for scalar or aggregate user -** functions. However, if it is not specified for a user-defined window -** function, then any sub-types belonging to arguments passed to the window -** function may be discarded before the window function is called (i.e. -** sqlite3_value_subtype() will always return 0). +** This flag instructs SQLite to omit some corner-case optimizations that +** might disrupt the operation of the [sqlite3_value_subtype()] function, +** causing it to return zero rather than the correct subtype(). +** SQL functions that invokes [sqlite3_value_subtype()] should have this +** property. If the SQLITE_SUBTYPE property is omitted, then the return +** value from [sqlite3_value_subtype()] might sometimes be zero even though +** a non-zero subtype was specified by the function argument expression. +** +** [[SQLITE_RESULT_SUBTYPE]]
    SQLITE_RESULT_SUBTYPE
    +** The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call +** [sqlite3_result_subtype()] to cause a sub-type to be associated with its +** result. +** Every function that invokes [sqlite3_result_subtype()] should have this +** property. If it does not, then the call to [sqlite3_result_subtype()] +** might become a no-op if the function is used as term in an +** [expression index]. On the other hand, SQL functions that never invoke +** [sqlite3_result_subtype()] should avoid setting this property, as the +** purpose of this property is to disable certain optimizations that are +** incompatible with subtypes. **
    ** */ @@ -5898,6 +5935,7 @@ SQLITE_API int sqlite3_create_window_function( #define SQLITE_DIRECTONLY 0x000080000 #define SQLITE_SUBTYPE 0x000100000 #define SQLITE_INNOCUOUS 0x000200000 +#define SQLITE_RESULT_SUBTYPE 0x001000000 /* ** CAPI3REF: Deprecated Functions @@ -6094,6 +6132,12 @@ SQLITE_API int sqlite3_value_encoding(sqlite3_value*); ** information can be used to pass a limited amount of context from ** one SQL function to another. Use the [sqlite3_result_subtype()] ** routine to set the subtype for the return value of an SQL function. +** +** Every [application-defined SQL function] that invoke this interface +** should include the [SQLITE_SUBTYPE] property in the text +** encoding argument when the function is [sqlite3_create_function|registered]. +** If the [SQLITE_SUBTYPE] property is omitted, then sqlite3_value_subtype() +** might return zero instead of the upstream subtype in some corner cases. */ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*); @@ -6192,48 +6236,56 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** METHOD: sqlite3_context ** ** These functions may be used by (non-aggregate) SQL functions to -** associate metadata with argument values. If the same value is passed to -** multiple invocations of the same SQL function during query execution, under -** some circumstances the associated metadata may be preserved. An example -** of where this might be useful is in a regular-expression matching -** function. The compiled version of the regular expression can be stored as -** metadata associated with the pattern string. +** associate auxiliary data with argument values. If the same argument +** value is passed to multiple invocations of the same SQL function during +** query execution, under some circumstances the associated auxiliary data +** might be preserved. An example of where this might be useful is in a +** regular-expression matching function. The compiled version of the regular +** expression can be stored as auxiliary data associated with the pattern string. ** Then as long as the pattern string remains the same, ** the compiled regular expression can be reused on multiple ** invocations of the same function. ** -** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata +** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the auxiliary data ** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument ** value to the application-defined function. ^N is zero for the left-most -** function argument. ^If there is no metadata +** function argument. ^If there is no auxiliary data ** associated with the function argument, the sqlite3_get_auxdata(C,N) interface ** returns a NULL pointer. ** -** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th -** argument of the application-defined function. ^Subsequent +** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as auxiliary data for the +** N-th argument of the application-defined function. ^Subsequent ** calls to sqlite3_get_auxdata(C,N) return P from the most recent -** sqlite3_set_auxdata(C,N,P,X) call if the metadata is still valid or -** NULL if the metadata has been discarded. +** sqlite3_set_auxdata(C,N,P,X) call if the auxiliary data is still valid or +** NULL if the auxiliary data has been discarded. ** ^After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL, ** SQLite will invoke the destructor function X with parameter P exactly -** once, when the metadata is discarded. -** SQLite is free to discard the metadata at any time, including:
      +** once, when the auxiliary data is discarded. +** SQLite is free to discard the auxiliary data at any time, including:
        **
      • ^(when the corresponding function parameter changes)^, or **
      • ^(when [sqlite3_reset()] or [sqlite3_finalize()] is called for the ** SQL statement)^, or **
      • ^(when sqlite3_set_auxdata() is invoked again on the same ** parameter)^, or **
      • ^(during the original sqlite3_set_auxdata() call when a memory -** allocation error occurs.)^
      +** allocation error occurs.)^ +**
    • ^(during the original sqlite3_set_auxdata() call if the function +** is evaluated during query planning instead of during query execution, +** as sometimes happens with [SQLITE_ENABLE_STAT4].)^
    ** -** Note the last bullet in particular. The destructor X in +** Note the last two bullets in particular. The destructor X in ** sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the ** sqlite3_set_auxdata() interface even returns. Hence sqlite3_set_auxdata() ** should be called near the end of the function implementation and the ** function implementation should not make any use of P after -** sqlite3_set_auxdata() has been called. -** -** ^(In practice, metadata is preserved between function calls for +** sqlite3_set_auxdata() has been called. Furthermore, a call to +** sqlite3_get_auxdata() that occurs immediately after a corresponding call +** to sqlite3_set_auxdata() might still return NULL if an out-of-memory +** condition occurred during the sqlite3_set_auxdata() call or if the +** function is being evaluated during query planning rather than during +** query execution. +** +** ^(In practice, auxiliary data is preserved between function calls for ** function parameters that are compile-time constants, including literal ** values and [parameters] and expressions composed from the same.)^ ** @@ -6243,10 +6295,67 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** ** These routines must be called from the same thread in which ** the SQL function is running. +** +** See also: [sqlite3_get_clientdata()] and [sqlite3_set_clientdata()]. */ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); +/* +** CAPI3REF: Database Connection Client Data +** METHOD: sqlite3 +** +** These functions are used to associate one or more named pointers +** with a [database connection]. +** A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P +** to be attached to [database connection] D using name N. Subsequent +** calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P +** or a NULL pointer if there were no prior calls to +** sqlite3_set_clientdata() with the same values of D and N. +** Names are compared using strcmp() and are thus case sensitive. +** +** If P and X are both non-NULL, then the destructor X is invoked with +** argument P on the first of the following occurrences: +**
      +**
    • An out-of-memory error occurs during the call to +** sqlite3_set_clientdata() which attempts to register pointer P. +**
    • A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made +** with the same D and N parameters. +**
    • The database connection closes. SQLite does not make any guarantees +** about the order in which destructors are called, only that all +** destructors will be called exactly once at some point during the +** database connection closing process. +**
    +** +** SQLite does not do anything with client data other than invoke +** destructors on the client data at the appropriate time. The intended +** use for client data is to provide a mechanism for wrapper libraries +** to store additional information about an SQLite database connection. +** +** There is no limit (other than available memory) on the number of different +** client data pointers (with different names) that can be attached to a +** single database connection. However, the implementation is optimized +** for the case of having only one or two different client data names. +** Applications and wrapper libraries are discouraged from using more than +** one client data name each. +** +** There is no way to enumerate the client data pointers +** associated with a database connection. The N parameter can be thought +** of as a secret key such that only code that knows the secret key is able +** to access the associated data. +** +** Security Warning: These interfaces should not be exposed in scripting +** languages or in other circumstances where it might be possible for an +** an attacker to invoke them. Any agent that can invoke these interfaces +** can probably also take control of the process. +** +** Database connection client data is only available for SQLite +** version 3.44.0 ([dateof:3.44.0]) and later. +** +** See also: [sqlite3_set_auxdata()] and [sqlite3_get_auxdata()]. +*/ +SQLITE_API void *sqlite3_get_clientdata(sqlite3*,const char*); +SQLITE_API int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*)); /* ** CAPI3REF: Constants Defining Special Destructor Behavior @@ -6448,6 +6557,20 @@ SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n); ** higher order bits are discarded. ** The number of subtype bytes preserved by SQLite might increase ** in future releases of SQLite. +** +** Every [application-defined SQL function] that invokes this interface +** should include the [SQLITE_RESULT_SUBTYPE] property in its +** text encoding argument when the SQL function is +** [sqlite3_create_function|registered]. If the [SQLITE_RESULT_SUBTYPE] +** property is omitted from the function that invokes sqlite3_result_subtype(), +** then in some cases the sqlite3_result_subtype() might fail to set +** the result subtype. +** +** If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any +** SQL function that invokes the sqlite3_result_subtype() interface +** and that does not have the SQLITE_RESULT_SUBTYPE property will raise +** an error. Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1 +** by default. */ SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int); @@ -6879,7 +7002,7 @@ SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema); /* -** CAPI3REF: Allowed return values from [sqlite3_txn_state()] +** CAPI3REF: Allowed return values from sqlite3_txn_state() ** KEYWORDS: {transaction state} ** ** These constants define the current transaction state of a database file. @@ -7011,7 +7134,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ^Each call to the sqlite3_autovacuum_pages() interface overrides all ** previous invocations for that database connection. ^If the callback ** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer, -** then the autovacuum steps callback is cancelled. The return value +** then the autovacuum steps callback is canceled. The return value ** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might ** be some other error code if something goes wrong. The current ** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other @@ -7077,6 +7200,12 @@ SQLITE_API int sqlite3_autovacuum_pages( ** The exceptions defined in this paragraph might change in a future ** release of SQLite. ** +** Whether the update hook is invoked before or after the +** corresponding change is currently unspecified and may differ +** depending on the type of change. Do not rely on the order of the +** hook call with regards to the final result of the operation which +** triggers the hook. +** ** The update hook implementation must not do anything that will modify ** the database connection that invoked the update hook. Any actions ** to modify the database connection must be deferred until after the @@ -7530,6 +7659,10 @@ struct sqlite3_module { /* The methods above are in versions 1 and 2 of the sqlite_module object. ** Those below are for version 3 and greater. */ int (*xShadowName)(const char*); + /* The methods above are in versions 1 through 3 of the sqlite_module object. + ** Those below are for version 4 and greater. */ + int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema, + const char *zTabName, int mFlags, char **pzErr); }; /* @@ -8017,7 +8150,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); ** code is returned and the transaction rolled back. ** ** Calling this function with an argument that is not a NULL pointer or an -** open blob handle results in undefined behaviour. ^Calling this routine +** open blob handle results in undefined behavior. ^Calling this routine ** with a null pointer (such as would be returned by a failed call to ** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function ** is passed a valid open blob handle, the values returned by the @@ -8244,9 +8377,11 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() -** will always return SQLITE_BUSY. The SQLite core only ever uses -** sqlite3_mutex_try() as an optimization so this is acceptable -** behavior.)^ +** will always return SQLITE_BUSY. In most cases the SQLite core only uses +** sqlite3_mutex_try() as an optimization, so this is acceptable +** behavior. The exceptions are unix builds that set the +** SQLITE_ENABLE_SETLK_TIMEOUT build option. In that case a working +** sqlite3_mutex_try() is required.)^ ** ** ^The sqlite3_mutex_leave() routine exits a mutex that was ** previously entered by the same thread. The behavior @@ -8497,6 +8632,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_PRNG_SAVE 5 #define SQLITE_TESTCTRL_PRNG_RESTORE 6 #define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */ +#define SQLITE_TESTCTRL_FK_NO_ACTION 7 #define SQLITE_TESTCTRL_BITVEC_TEST 8 #define SQLITE_TESTCTRL_FAULT_INSTALL 9 #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 @@ -8504,6 +8640,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_ASSERT 12 #define SQLITE_TESTCTRL_ALWAYS 13 #define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */ +#define SQLITE_TESTCTRL_JSON_SELFCHECK 14 #define SQLITE_TESTCTRL_OPTIMIZATIONS 15 #define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */ #define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */ @@ -8539,7 +8676,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); ** The sqlite3_keyword_count() interface returns the number of distinct ** keywords understood by SQLite. ** -** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and +** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and ** makes *Z point to that keyword expressed as UTF8 and writes the number ** of bytes in the keyword into *L. The string that *Z points to is not ** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns @@ -9558,8 +9695,8 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** blocked connection already has a registered unlock-notify callback, ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is cancelled. ^The blocked connections -** unlock-notify callback may also be cancelled by closing the blocked +** unlock-notify callback is canceled. ^The blocked connections +** unlock-notify callback may also be canceled by closing the blocked ** connection using [sqlite3_close()]. ** ** The unlock-notify callback is not reentrant. If an application invokes @@ -10118,24 +10255,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int); **
  • ** ^(If the sqlite3_vtab_distinct() interface returns 2, that means ** that the query planner does not need the rows returned in any particular -** order, as long as rows with the same values in all "aOrderBy" columns -** are adjacent.)^ ^(Furthermore, only a single row for each particular -** combination of values in the columns identified by the "aOrderBy" field -** needs to be returned.)^ ^It is always ok for two or more rows with the same -** values in all "aOrderBy" columns to be returned, as long as all such rows -** are adjacent. ^The virtual table may, if it chooses, omit extra rows -** that have the same value for all columns identified by "aOrderBy". -** ^However omitting the extra rows is optional. +** order, as long as rows with the same values in all columns identified +** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows +** contain the same values for all columns identified by "colUsed", all but +** one such row may optionally be omitted from the result.)^ +** The virtual table is not required to omit rows that are duplicates +** over the "colUsed" columns, but if the virtual table can do that without +** too much extra effort, it could potentially help the query to run faster. ** This mode is used for a DISTINCT query. **

  • -** ^(If the sqlite3_vtab_distinct() interface returns 3, that means -** that the query planner needs only distinct rows but it does need the -** rows to be sorted.)^ ^The virtual table implementation is free to omit -** rows that are identical in all aOrderBy columns, if it wants to, but -** it is not required to omit any rows. This mode is used for queries +** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the +** virtual table must return rows in the order defined by "aOrderBy" as +** if the sqlite3_vtab_distinct() interface had returned 0. However if +** two or more rows in the result have the same values for all columns +** identified by "colUsed", then all but one such row may optionally be +** omitted.)^ Like when the return value is 2, the virtual table +** is not required to omit rows that are duplicates over the "colUsed" +** columns, but if the virtual table can do that without +** too much extra effort, it could potentially help the query to run faster. +** This mode is used for queries ** that have both DISTINCT and ORDER BY clauses. ** ** +**

    The following table summarizes the conditions under which the +** virtual table is allowed to set the "orderByConsumed" flag based on +** the value returned by sqlite3_vtab_distinct(). This table is a +** restatement of the previous four paragraphs: +** +** +** +**
    sqlite3_vtab_distinct() return value +** Rows are returned in aOrderBy order +** Rows with the same value in all aOrderBy columns are adjacent +** Duplicates over all colUsed columns may be omitted +**
    0yesyesno +**
    1noyesno +**
    2noyesyes +**
    3yesyesyes +**
    +** ** ^For the purposes of comparing virtual table output values to see if the ** values are same value for sorting purposes, two NULL values are considered ** to be the same. In other words, the comparison operator is "IS" @@ -10862,6 +11020,13 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const c ** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy ** of the database exists. ** +** After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set, +** the returned buffer content will remain accessible and unchanged +** until either the next write operation on the connection or when +** the connection is closed, and applications must not modify the +** buffer. If the bit had been clear, the returned buffer will not +** be accessed by SQLite after the call. +** ** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the ** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory ** allocation error occurs. @@ -10910,6 +11075,9 @@ SQLITE_API unsigned char *sqlite3_serialize( ** SQLite will try to increase the buffer size using sqlite3_realloc64() ** if writes on the database cause it to grow larger than M bytes. ** +** Applications must not modify the buffer P or invalidate it before +** the database connection D is closed. +** ** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the ** database is currently in a read transaction or is involved in a backup ** operation. @@ -10918,6 +11086,13 @@ SQLITE_API unsigned char *sqlite3_serialize( ** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the ** function returns SQLITE_ERROR. ** +** The deserialized database should not be in [WAL mode]. If the database +** is in WAL mode, then any attempt to use the database file will result +** in an [SQLITE_CANTOPEN] error. The application can set the +** [file format version numbers] (bytes 18 and 19) of the input database P +** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the +** database file into rollback mode and work around this limitation. +** ** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the ** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then ** [sqlite3_free()] is invoked on argument P prior to returning. @@ -11990,6 +12165,18 @@ SQLITE_API int sqlite3changeset_concat( ); +/* +** CAPI3REF: Upgrade the Schema of a Changeset/Patchset +*/ +SQLITE_API int sqlite3changeset_upgrade( + sqlite3 *db, + const char *zDb, + int nIn, const void *pIn, /* Input changeset */ + int *pnOut, void **ppOut /* OUT: Inverse of input */ +); + + + /* ** CAPI3REF: Changegroup Handle ** @@ -12036,6 +12223,38 @@ typedef struct sqlite3_changegroup sqlite3_changegroup; */ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); +/* +** CAPI3REF: Add a Schema to a Changegroup +** METHOD: sqlite3_changegroup_schema +** +** This method may be used to optionally enforce the rule that the changesets +** added to the changegroup handle must match the schema of database zDb +** ("main", "temp", or the name of an attached database). If +** sqlite3changegroup_add() is called to add a changeset that is not compatible +** with the configured schema, SQLITE_SCHEMA is returned and the changegroup +** object is left in an undefined state. +** +** A changeset schema is considered compatible with the database schema in +** the same way as for sqlite3changeset_apply(). Specifically, for each +** table in the changeset, there exists a database table with: +** +**

      +**
    • The name identified by the changeset, and +**
    • at least as many columns as recorded in the changeset, and +**
    • the primary key columns in the same position as recorded in +** the changeset. +**
    +** +** The output of the changegroup object always has the same schema as the +** database nominated using this function. In cases where changesets passed +** to sqlite3changegroup_add() have fewer columns than the corresponding table +** in the database schema, these are filled in using the default column +** values from the database schema. This makes it possible to combined +** changesets that have different numbers of columns for a single table +** within a changegroup, provided that they are otherwise compatible. +*/ +SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb); + /* ** CAPI3REF: Add A Changeset To A Changegroup ** METHOD: sqlite3_changegroup @@ -12104,16 +12323,45 @@ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); ** If the new changeset contains changes to a table that is already present ** in the changegroup, then the number of columns and the position of the ** primary key columns for the table must be consistent. If this is not the -** case, this function fails with SQLITE_SCHEMA. If the input changeset -** appears to be corrupt and the corruption is detected, SQLITE_CORRUPT is -** returned. Or, if an out-of-memory condition occurs during processing, this -** function returns SQLITE_NOMEM. In all cases, if an error occurs the state -** of the final contents of the changegroup is undefined. +** case, this function fails with SQLITE_SCHEMA. Except, if the changegroup +** object has been configured with a database schema using the +** sqlite3changegroup_schema() API, then it is possible to combine changesets +** with different numbers of columns for a single table, provided that +** they are otherwise compatible. ** -** If no error occurs, SQLITE_OK is returned. +** If the input changeset appears to be corrupt and the corruption is +** detected, SQLITE_CORRUPT is returned. Or, if an out-of-memory condition +** occurs during processing, this function returns SQLITE_NOMEM. +** +** In all cases, if an error occurs the state of the final contents of the +** changegroup is undefined. If no error occurs, SQLITE_OK is returned. */ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); +/* +** CAPI3REF: Add A Single Change To A Changegroup +** METHOD: sqlite3_changegroup +** +** This function adds the single change currently indicated by the iterator +** passed as the second argument to the changegroup object. The rules for +** adding the change are just as described for [sqlite3changegroup_add()]. +** +** If the change is successfully added to the changegroup, SQLITE_OK is +** returned. Otherwise, an SQLite error code is returned. +** +** The iterator must point to a valid entry when this function is called. +** If it does not, SQLITE_ERROR is returned and no change is added to the +** changegroup. Additionally, the iterator must not have been opened with +** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also +** returned. +*/ +SQLITE_API int sqlite3changegroup_add_change( + sqlite3_changegroup*, + sqlite3_changeset_iter* +); + + + /* ** CAPI3REF: Obtain A Composite Changeset From A Changegroup ** METHOD: sqlite3_changegroup @@ -12375,10 +12623,17 @@ SQLITE_API int sqlite3changeset_apply_v2( **
  • an insert change if all fields of the conflicting row match ** the row being inserted. ** +** +**
    SQLITE_CHANGESETAPPLY_FKNOACTION
    +** If this flag it set, then all foreign key constraints in the target +** database behave as if they were declared with "ON UPDATE NO ACTION ON +** DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL +** or SET DEFAULT. */ #define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 #define SQLITE_CHANGESETAPPLY_INVERT 0x0002 #define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 +#define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008 /* ** CAPI3REF: Constants Passed To The Conflict Handler @@ -12911,8 +13166,8 @@ struct Fts5PhraseIter { ** EXTENSION API FUNCTIONS ** ** xUserData(pFts): -** Return a copy of the context pointer the extension function was -** registered with. +** Return a copy of the pUserData pointer passed to the xCreateFunction() +** API when the extension function was registered. ** ** xColumnTotalSize(pFts, iCol, pnToken): ** If parameter iCol is less than zero, set output variable *pnToken @@ -12944,8 +13199,11 @@ struct Fts5PhraseIter { ** created with the "columnsize=0" option. ** ** xColumnText: -** This function attempts to retrieve the text of column iCol of the -** current document. If successful, (*pz) is set to point to a buffer +** If parameter iCol is less than zero, or greater than or equal to the +** number of columns in the table, SQLITE_RANGE is returned. +** +** Otherwise, this function attempts to retrieve the text of column iCol of +** the current document. If successful, (*pz) is set to point to a buffer ** containing the text in utf-8 encoding, (*pn) is set to the size in bytes ** (not characters) of the buffer and SQLITE_OK is returned. Otherwise, ** if an error occurs, an SQLite error code is returned and the final values @@ -12955,8 +13213,10 @@ struct Fts5PhraseIter { ** Returns the number of phrases in the current query expression. ** ** xPhraseSize: -** Returns the number of tokens in phrase iPhrase of the query. Phrases -** are numbered starting from zero. +** If parameter iCol is less than zero, or greater than or equal to the +** number of phrases in the current query, as returned by xPhraseCount, +** 0 is returned. Otherwise, this function returns the number of tokens in +** phrase iPhrase of the query. Phrases are numbered starting from zero. ** ** xInstCount: ** Set *pnInst to the total number of occurrences of all phrases within @@ -12972,12 +13232,13 @@ struct Fts5PhraseIter { ** Query for the details of phrase match iIdx within the current row. ** Phrase matches are numbered starting from zero, so the iIdx argument ** should be greater than or equal to zero and smaller than the value -** output by xInstCount(). +** output by xInstCount(). If iIdx is less than zero or greater than +** or equal to the value returned by xInstCount(), SQLITE_RANGE is returned. ** -** Usually, output parameter *piPhrase is set to the phrase number, *piCol +** Otherwise, output parameter *piPhrase is set to the phrase number, *piCol ** to the column in which it occurs and *piOff the token offset of the -** first token of the phrase. Returns SQLITE_OK if successful, or an error -** code (i.e. SQLITE_NOMEM) if an error occurs. +** first token of the phrase. SQLITE_OK is returned if successful, or an +** error code (i.e. SQLITE_NOMEM) if an error occurs. ** ** This API can be quite slow if used with an FTS5 table created with the ** "detail=none" or "detail=column" option. @@ -13003,6 +13264,10 @@ struct Fts5PhraseIter { ** Invoking Api.xUserData() returns a copy of the pointer passed as ** the third argument to pUserData. ** +** If parameter iPhrase is less than zero, or greater than or equal to +** the number of phrases in the query, as returned by xPhraseCount(), +** this function returns SQLITE_RANGE. +** ** If the callback function returns any value other than SQLITE_OK, the ** query is abandoned and the xQueryPhrase function returns immediately. ** If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK. @@ -13117,9 +13382,42 @@ struct Fts5PhraseIter { ** ** xPhraseNextColumn() ** See xPhraseFirstColumn above. +** +** xQueryToken(pFts5, iPhrase, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase iPhrase of the current +** query. Before returning, output parameter *ppToken is set to point +** to a buffer containing the requested token, and *pnToken to the +** size of this buffer in bytes. +** +** If iPhrase or iToken are less than zero, or if iPhrase is greater than +** or equal to the number of phrases in the query as reported by +** xPhraseCount(), or if iToken is equal to or greater than the number of +** tokens in the phrase, SQLITE_RANGE is returned and *ppToken and *pnToken + are both zeroed. +** +** The output text is not a copy of the query text that specified the +** token. It is the output of the tokenizer module. For tokendata=1 +** tables, this includes any embedded 0x00 and trailing data. +** +** xInstToken(pFts5, iIdx, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase hit iIdx within the +** current row. If iIdx is less than zero or greater than or equal to the +** value returned by xInstCount(), SQLITE_RANGE is returned. Otherwise, +** output variable (*ppToken) is set to point to a buffer containing the +** matching document token, and (*pnToken) to the size of that buffer in +** bytes. This API is not available if the specified token matches a +** prefix query term. In that case both output variables are always set +** to 0. +** +** The output text is not a copy of the document text that was tokenized. +** It is the output of the tokenizer module. For tokendata=1 tables, this +** includes any embedded 0x00 and trailing data. +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. */ struct Fts5ExtensionApi { - int iVersion; /* Currently always set to 2 */ + int iVersion; /* Currently always set to 3 */ void *(*xUserData)(Fts5Context*); @@ -13154,6 +13452,13 @@ struct Fts5ExtensionApi { int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*); void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol); + + /* Below this point are iVersion>=3 only */ + int (*xQueryToken)(Fts5Context*, + int iPhrase, int iToken, + const char **ppToken, int *pnToken + ); + int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*); }; /* @@ -13640,7 +13945,7 @@ struct fts5_api { ** max_page_count macro. */ #ifndef SQLITE_MAX_PAGE_COUNT -# define SQLITE_MAX_PAGE_COUNT 1073741823 +# define SQLITE_MAX_PAGE_COUNT 0xfffffffe /* 4294967294 */ #endif /* @@ -13769,6 +14074,29 @@ struct fts5_api { # endif #endif +/* +** Enable SQLITE_USE_SEH by default on MSVC builds. Only omit +** SEH support if the -DSQLITE_OMIT_SEH option is given. +*/ +#if defined(_MSC_VER) && !defined(SQLITE_OMIT_SEH) +# define SQLITE_USE_SEH 1 +#else +# undef SQLITE_USE_SEH +#endif + +/* +** Enable SQLITE_DIRECT_OVERFLOW_READ, unless the build explicitly +** disables it using -DSQLITE_DIRECT_OVERFLOW_READ=0 +*/ +#if defined(SQLITE_DIRECT_OVERFLOW_READ) && SQLITE_DIRECT_OVERFLOW_READ+1==1 + /* Disable if -DSQLITE_DIRECT_OVERFLOW_READ=0 */ +# undef SQLITE_DIRECT_OVERFLOW_READ +#else + /* In all other cases, enable */ +# define SQLITE_DIRECT_OVERFLOW_READ 1 +#endif + + /* ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2. ** 0 means mutexes are permanently disable and the library is never @@ -14037,6 +14365,8 @@ struct fts5_api { # define SQLITE_OMIT_ALTERTABLE #endif +#define SQLITE_DIGIT_SEPARATOR '_' + /* ** Return true (non-zero) if the input is an integer that is too large ** to fit in 32-bits. This macro is used inside of various testcase() @@ -14329,8 +14659,8 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_TRUEFALSE 170 #define TK_ISNOT 171 #define TK_FUNCTION 172 -#define TK_UMINUS 173 -#define TK_UPLUS 174 +#define TK_UPLUS 173 +#define TK_UMINUS 174 #define TK_TRUTH 175 #define TK_REGISTER 176 #define TK_VECTOR 177 @@ -14339,8 +14669,9 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_ASTERISK 180 #define TK_SPAN 181 #define TK_ERROR 182 -#define TK_SPACE 183 -#define TK_ILLEGAL 184 +#define TK_QNUMBER 183 +#define TK_SPACE 184 +#define TK_ILLEGAL 185 /************** End of parse.h ***********************************************/ /************** Continuing where we left off in sqliteInt.h ******************/ @@ -14602,7 +14933,7 @@ typedef INT16_TYPE LogEst; # define SQLITE_PTRSIZE __SIZEOF_POINTER__ # elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ defined(_M_ARM) || defined(__arm__) || defined(__x86) || \ - (defined(__APPLE__) && defined(__POWERPC__)) || \ + (defined(__APPLE__) && defined(__ppc__)) || \ (defined(__TOS_AIX__) && !defined(__64BIT__)) # define SQLITE_PTRSIZE 4 # else @@ -14662,16 +14993,33 @@ typedef INT16_TYPE LogEst; ** using C-preprocessor macros. If that is unsuccessful, or if ** -DSQLITE_BYTEORDER=0 is set, then byte-order is determined ** at run-time. +** +** If you are building SQLite on some obscure platform for which the +** following ifdef magic does not work, you can always include either: +** +** -DSQLITE_BYTEORDER=1234 +** +** or +** +** -DSQLITE_BYTEORDER=4321 +** +** to cause the build to work for little-endian or big-endian processors, +** respectively. */ -#ifndef SQLITE_BYTEORDER -# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ +#ifndef SQLITE_BYTEORDER /* Replicate changes at tag-20230904a */ +# if defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ +# define SQLITE_BYTEORDER 4321 +# elif defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define SQLITE_BYTEORDER 1234 +# elif defined(__BIG_ENDIAN__) && __BIG_ENDIAN__==1 +# define SQLITE_BYTEORDER 4321 +# elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ defined(__ARMEL__) || defined(__AARCH64EL__) || defined(_M_ARM64) -# define SQLITE_BYTEORDER 1234 -# elif defined(sparc) || defined(__ppc__) || \ - defined(__ARMEB__) || defined(__AARCH64EB__) -# define SQLITE_BYTEORDER 4321 +# define SQLITE_BYTEORDER 1234 +# elif defined(sparc) || defined(__ARMEB__) || defined(__AARCH64EB__) +# define SQLITE_BYTEORDER 4321 # else # define SQLITE_BYTEORDER 0 # endif @@ -14822,6 +15170,7 @@ SQLITE_PRIVATE u32 sqlite3TreeTrace; ** 0x00010000 Beginning of DELETE/INSERT/UPDATE processing ** 0x00020000 Transform DISTINCT into GROUP BY ** 0x00040000 SELECT tree dump after all code has been generated +** 0x00080000 NOT NULL strength reduction */ /* @@ -14852,7 +15201,7 @@ SQLITE_PRIVATE u32 sqlite3WhereTrace; ** 0x00000010 Display sqlite3_index_info xBestIndex calls ** 0x00000020 Range an equality scan metrics ** 0x00000040 IN operator decisions -** 0x00000080 WhereLoop cost adjustements +** 0x00000080 WhereLoop cost adjustments ** 0x00000100 ** 0x00000200 Covering index decisions ** 0x00000400 OR optimization @@ -14995,6 +15344,7 @@ typedef struct Column Column; typedef struct Cte Cte; typedef struct CteUse CteUse; typedef struct Db Db; +typedef struct DbClientData DbClientData; typedef struct DbFixer DbFixer; typedef struct Schema Schema; typedef struct Expr Expr; @@ -15633,7 +15983,7 @@ SQLITE_PRIVATE sqlite3_file *sqlite3PagerJrnlFile(Pager*); SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*); SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*); SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*); -SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, int *); +SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, u64*); SQLITE_PRIVATE void sqlite3PagerClearCache(Pager*); SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *); @@ -16000,6 +16350,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( sqlite3 *db, /* Database connection that is running the check */ Btree *p, /* The btree to be checked */ Pgno *aRoot, /* An array of root pages numbers for individual trees */ + sqlite3_value *aCnt, /* OUT: entry counts for each btree in aRoot[] */ int nRoot, /* Number of entries in aRoot[] */ int mxErr, /* Stop reporting errors after this many */ int *pnErr, /* OUT: Write number of errors seen to this variable */ @@ -16220,6 +16571,7 @@ typedef struct VdbeOpList VdbeOpList; #define P4_INT64 (-13) /* P4 is a 64-bit signed integer */ #define P4_INTARRAY (-14) /* P4 is a vector of 32-bit integers */ #define P4_FUNCCTX (-15) /* P4 is a pointer to an sqlite3_context object */ +#define P4_TABLEREF (-16) /* Like P4_TABLE, but reference counted */ /* Error message codes for OP_Halt */ #define P5_ConstraintNotNull 1 @@ -16269,12 +16621,12 @@ typedef struct VdbeOpList VdbeOpList; #define OP_Vacuum 5 #define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */ #define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */ -#define OP_Init 8 /* jump, synopsis: Start at P2 */ +#define OP_Init 8 /* jump0, synopsis: Start at P2 */ #define OP_Goto 9 /* jump */ #define OP_Gosub 10 /* jump */ -#define OP_InitCoroutine 11 /* jump */ -#define OP_Yield 12 /* jump */ -#define OP_MustBeInt 13 /* jump */ +#define OP_InitCoroutine 11 /* jump0 */ +#define OP_Yield 12 /* jump0 */ +#define OP_MustBeInt 13 /* jump0 */ #define OP_Jump 14 /* jump */ #define OP_Once 15 /* jump */ #define OP_If 16 /* jump */ @@ -16282,22 +16634,22 @@ typedef struct VdbeOpList VdbeOpList; #define OP_IsType 18 /* jump, synopsis: if typeof(P1.P3) in P5 goto P2 */ #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */ #define OP_IfNullRow 20 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ -#define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */ +#define OP_SeekLT 21 /* jump0, synopsis: key=r[P3@P4] */ +#define OP_SeekLE 22 /* jump0, synopsis: key=r[P3@P4] */ +#define OP_SeekGE 23 /* jump0, synopsis: key=r[P3@P4] */ +#define OP_SeekGT 24 /* jump0, synopsis: key=r[P3@P4] */ #define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */ #define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */ #define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */ #define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */ #define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */ -#define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */ +#define OP_SeekRowid 30 /* jump0, synopsis: intkey=r[P3] */ #define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */ -#define OP_Last 32 /* jump */ -#define OP_IfSmaller 33 /* jump */ +#define OP_Last 32 /* jump0 */ +#define OP_IfSizeBetween 33 /* jump */ #define OP_SorterSort 34 /* jump */ #define OP_Sort 35 /* jump */ -#define OP_Rewind 36 /* jump */ +#define OP_Rewind 36 /* jump0 */ #define OP_SorterNext 37 /* jump */ #define OP_Prev 38 /* jump */ #define OP_Next 39 /* jump */ @@ -16309,7 +16661,7 @@ typedef struct VdbeOpList VdbeOpList; #define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */ #define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */ #define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ -#define OP_Program 48 /* jump */ +#define OP_Program 48 /* jump0 */ #define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ @@ -16339,7 +16691,7 @@ typedef struct VdbeOpList VdbeOpList; #define OP_Null 75 /* synopsis: r[P2..P3]=NULL */ #define OP_SoftNull 76 /* synopsis: r[P1]=NULL */ #define OP_Blob 77 /* synopsis: r[P2]=P4 (len=P1) */ -#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1,P4) */ +#define OP_Variable 78 /* synopsis: r[P2]=parameter(P1) */ #define OP_Move 79 /* synopsis: r[P2@P3]=r[P1@P3] */ #define OP_Copy 80 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ #define OP_SCopy 81 /* synopsis: r[P2]=r[P1] */ @@ -16435,19 +16787,22 @@ typedef struct VdbeOpList VdbeOpList; #define OP_VCreate 171 #define OP_VDestroy 172 #define OP_VOpen 173 -#define OP_VInitIn 174 /* synopsis: r[P2]=ValueList(P1,P3) */ -#define OP_VColumn 175 /* synopsis: r[P3]=vcolumn(P2) */ -#define OP_VRename 176 -#define OP_Pagecount 177 -#define OP_MaxPgcnt 178 -#define OP_ClrSubtype 179 /* synopsis: r[P1].subtype = 0 */ -#define OP_FilterAdd 180 /* synopsis: filter(P1) += key(P3@P4) */ -#define OP_Trace 181 -#define OP_CursorHint 182 -#define OP_ReleaseReg 183 /* synopsis: release r[P1@P2] mask P3 */ -#define OP_Noop 184 -#define OP_Explain 185 -#define OP_Abortable 186 +#define OP_VCheck 174 +#define OP_VInitIn 175 /* synopsis: r[P2]=ValueList(P1,P3) */ +#define OP_VColumn 176 /* synopsis: r[P3]=vcolumn(P2) */ +#define OP_VRename 177 +#define OP_Pagecount 178 +#define OP_MaxPgcnt 179 +#define OP_ClrSubtype 180 /* synopsis: r[P1].subtype = 0 */ +#define OP_GetSubtype 181 /* synopsis: r[P2] = r[P1].subtype */ +#define OP_SetSubtype 182 /* synopsis: r[P2].subtype = r[P1] */ +#define OP_FilterAdd 183 /* synopsis: filter(P1) += key(P3@P4) */ +#define OP_Trace 184 +#define OP_CursorHint 185 +#define OP_ReleaseReg 186 /* synopsis: release r[P1@P2] mask P3 */ +#define OP_Noop 187 +#define OP_Explain 188 +#define OP_Abortable 189 /* Properties such as "out2" or "jump" that are specified in ** comments following the "case" for each opcode in the vdbe.c @@ -16460,14 +16815,15 @@ typedef struct VdbeOpList VdbeOpList; #define OPFLG_OUT2 0x10 /* out2: P2 is an output */ #define OPFLG_OUT3 0x20 /* out3: P3 is an output */ #define OPFLG_NCYCLE 0x40 /* ncycle:Cycles count against P1 */ +#define OPFLG_JUMP0 0x80 /* jump0: P2 might be zero */ #define OPFLG_INITIALIZER {\ /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x41, 0x00,\ -/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\ -/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x49, 0x49, 0x49,\ -/* 24 */ 0x49, 0x01, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,\ -/* 32 */ 0x41, 0x01, 0x41, 0x41, 0x41, 0x01, 0x41, 0x41,\ +/* 8 */ 0x81, 0x01, 0x01, 0x81, 0x83, 0x83, 0x01, 0x01,\ +/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0xc9, 0xc9, 0xc9,\ +/* 24 */ 0xc9, 0x01, 0x49, 0x49, 0x49, 0x49, 0xc9, 0x49,\ +/* 32 */ 0xc1, 0x01, 0x41, 0x41, 0xc1, 0x01, 0x41, 0x41,\ /* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x23, 0x0b,\ -/* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ +/* 48 */ 0x81, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x41,\ /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\ /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\ @@ -16482,9 +16838,9 @@ typedef struct VdbeOpList VdbeOpList; /* 144 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\ /* 152 */ 0x00, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x04,\ /* 160 */ 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x50, 0x40,\ -/* 176 */ 0x00, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00,\ -/* 184 */ 0x00, 0x00, 0x00,} +/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x10, 0x50,\ +/* 176 */ 0x40, 0x00, 0x10, 0x10, 0x02, 0x12, 0x12, 0x00,\ +/* 184 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,} /* The resolve3P2Values() routine is able to run faster if it knows ** the value of the largest JUMP opcode. The smaller the maximum @@ -16627,6 +16983,8 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*); SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *); SQLITE_PRIVATE int sqlite3VdbeHasSubProgram(Vdbe*); +SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val); + SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context*); #ifdef SQLITE_ENABLE_BYTECODE_VTAB SQLITE_PRIVATE int sqlite3VdbeBytecodeVtabInit(sqlite3*); @@ -17214,6 +17572,10 @@ struct FuncDefHash { }; #define SQLITE_FUNC_HASH(C,L) (((C)+(L))%SQLITE_FUNC_HASH_SZ) +#if defined(SQLITE_USER_AUTHENTICATION) +# warning "The SQLITE_USER_AUTHENTICATION extension is deprecated. \ + See ext/userauth/user-auth.txt for details." +#endif #ifdef SQLITE_USER_AUTHENTICATION /* ** Information held in the "sqlite3" database connection object and used @@ -17393,6 +17755,7 @@ struct sqlite3 { i64 nDeferredCons; /* Net deferred constraints this transaction. */ i64 nDeferredImmCons; /* Net deferred immediate constraints */ int *pnBytesFreed; /* If not NULL, increment this in DbFree() */ + DbClientData *pDbData; /* sqlite3_set_clientdata() content */ #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY /* The following variables are all protected by the STATIC_MAIN ** mutex, not by sqlite3.mutex. They are used by code in notify.c. @@ -17475,6 +17838,7 @@ struct sqlite3 { /* the count using a callback. */ #define SQLITE_CorruptRdOnly HI(0x00002) /* Prohibit writes due to error */ #define SQLITE_ReadUncommit HI(0x00004) /* READ UNCOMMITTED in shared-cache */ +#define SQLITE_FkNoAction HI(0x00008) /* Treat all FK as NO ACTION */ /* Flags used only if debugging */ #ifdef SQLITE_DEBUG @@ -17515,7 +17879,7 @@ struct sqlite3 { #define SQLITE_CursorHints 0x00000400 /* Add OP_CursorHint opcodes */ #define SQLITE_Stat4 0x00000800 /* Use STAT4 data */ /* TH3 expects this value ^^^^^^^^^^ to be 0x0000800. Don't change it */ -#define SQLITE_PushDown 0x00001000 /* The push-down optimization */ +#define SQLITE_PushDown 0x00001000 /* WHERE-clause push-down opt */ #define SQLITE_SimplifyJoin 0x00002000 /* Convert LEFT JOIN to JOIN */ #define SQLITE_SkipScan 0x00004000 /* Skip-scans */ #define SQLITE_PropagateConst 0x00008000 /* The constant propagation opt */ @@ -17643,14 +18007,15 @@ struct FuncDestructor { #define SQLITE_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a ** single query - might change over time */ #define SQLITE_FUNC_TEST 0x4000 /* Built-in testing functions */ -/* 0x8000 -- available for reuse */ +#define SQLITE_FUNC_RUNONLY 0x8000 /* Cannot be used by valueFromFunction */ #define SQLITE_FUNC_WINDOW 0x00010000 /* Built-in window-only function */ #define SQLITE_FUNC_INTERNAL 0x00040000 /* For use by NestedParse() only */ #define SQLITE_FUNC_DIRECT 0x00080000 /* Not for use in TRIGGERs or VIEWs */ -#define SQLITE_FUNC_SUBTYPE 0x00100000 /* Result likely to have sub-type */ +/* SQLITE_SUBTYPE 0x00100000 // Consumer of subtypes */ #define SQLITE_FUNC_UNSAFE 0x00200000 /* Function has side effects */ #define SQLITE_FUNC_INLINE 0x00400000 /* Functions implemented in-line */ #define SQLITE_FUNC_BUILTIN 0x00800000 /* This is a built-in function */ +/* SQLITE_RESULT_SUBTYPE 0x01000000 // Generator of subtypes */ #define SQLITE_FUNC_ANYORDER 0x08000000 /* count/min/max aggregate */ /* Identifier numbers for each in-line function */ @@ -17742,10 +18107,11 @@ struct FuncDestructor { #define MFUNCTION(zName, nArg, xPtr, xFunc) \ {nArg, SQLITE_FUNC_BUILTIN|SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \ xPtr, 0, xFunc, 0, 0, 0, #zName, {0} } -#define JFUNCTION(zName, nArg, iArg, xFunc) \ - {nArg, SQLITE_FUNC_BUILTIN|SQLITE_DETERMINISTIC|\ - SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } +#define JFUNCTION(zName, nArg, bUseCache, bWS, bRS, bJsonB, iArg, xFunc) \ + {nArg, SQLITE_FUNC_BUILTIN|SQLITE_DETERMINISTIC|SQLITE_FUNC_CONSTANT|\ + SQLITE_UTF8|((bUseCache)*SQLITE_FUNC_RUNONLY)|\ + ((bRS)*SQLITE_SUBTYPE)|((bWS)*SQLITE_RESULT_SUBTYPE), \ + SQLITE_INT_TO_PTR(iArg|((bJsonB)*JSON_BLOB)),0,xFunc,0, 0, 0, #zName, {0} } #define INLINE_FUNC(zName, nArg, iArg, mFlags) \ {nArg, SQLITE_FUNC_BUILTIN|\ SQLITE_UTF8|SQLITE_FUNC_INLINE|SQLITE_FUNC_CONSTANT|(mFlags), \ @@ -18086,8 +18452,7 @@ struct Table { #define TF_HasStored 0x00000040 /* Has one or more STORED columns */ #define TF_HasGenerated 0x00000060 /* Combo: HasVirtual + HasStored */ #define TF_WithoutRowid 0x00000080 /* No rowid. PRIMARY KEY is the key */ -#define TF_StatsUsed 0x00000100 /* Query planner decisions affected by - ** Index.aiRowLogEst[] values */ +#define TF_MaybeReanalyze 0x00000100 /* Maybe run ANALYZE on this table */ #define TF_NoVisibleRowid 0x00000200 /* No user-visible "rowid" column */ #define TF_OOOHidden 0x00000400 /* Out-of-Order hidden columns */ #define TF_HasNotNull 0x00000800 /* Contains NOT NULL constraints */ @@ -18143,6 +18508,15 @@ struct Table { #define HasRowid(X) (((X)->tabFlags & TF_WithoutRowid)==0) #define VisibleRowid(X) (((X)->tabFlags & TF_NoVisibleRowid)==0) +/* Macro is true if the SQLITE_ALLOW_ROWID_IN_VIEW (mis-)feature is +** available. By default, this macro is false +*/ +#ifndef SQLITE_ALLOW_ROWID_IN_VIEW +# define ViewCanHaveRowid 0 +#else +# define ViewCanHaveRowid (sqlite3Config.mNoVisibleRowid==0) +#endif + /* ** Each foreign key constraint is an instance of the following structure. ** @@ -18380,6 +18754,7 @@ struct Index { unsigned isCovering:1; /* True if this is a covering index */ unsigned noSkipScan:1; /* Do not try to use skip-scan if true */ unsigned hasStat1:1; /* aiRowLogEst values come from sqlite_stat1 */ + unsigned bLowQual:1; /* sqlite_stat1 says this is a low-quality index */ unsigned bNoQuery:1; /* Do not use this index to optimize queries */ unsigned bAscKeyBug:1; /* True if the bba7b69f9849b5bf bug applies */ unsigned bHasVCol:1; /* Index references one or more VIRTUAL columns */ @@ -18490,6 +18865,10 @@ struct AggInfo { FuncDef *pFunc; /* The aggregate function implementation */ int iDistinct; /* Ephemeral table used to enforce DISTINCT */ int iDistAddr; /* Address of OP_OpenEphemeral */ + int iOBTab; /* Ephemeral table to implement ORDER BY */ + u8 bOBPayload; /* iOBTab has payload columns separate from key */ + u8 bOBUnique; /* Enforce uniqueness on iOBTab keys */ + u8 bUseSubtype; /* Transfer subtype info through sorter */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ u32 selId; /* Select to which this AggInfo belongs */ @@ -18674,7 +19053,7 @@ struct Expr { #define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */ #define EP_Win 0x008000 /* Contains window functions */ #define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */ - /* 0x020000 // Available for reuse */ +#define EP_FullSize 0x020000 /* Expr structure must remain full sized */ #define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */ #define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */ #define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */ @@ -18704,6 +19083,7 @@ struct Expr { #define ExprClearProperty(E,P) (E)->flags&=~(P) #define ExprAlwaysTrue(E) (((E)->flags&(EP_OuterON|EP_IsTrue))==EP_IsTrue) #define ExprAlwaysFalse(E) (((E)->flags&(EP_OuterON|EP_IsFalse))==EP_IsFalse) +#define ExprIsFullSize(E) (((E)->flags&(EP_Reduced|EP_TokenOnly))==0) /* Macros used to ensure that the correct members of unions are accessed ** in Expr. @@ -18821,6 +19201,7 @@ struct ExprList { #define ENAME_NAME 0 /* The AS clause of a result set */ #define ENAME_SPAN 1 /* Complete text of the result set expression */ #define ENAME_TAB 2 /* "DB.TABLE.NAME" for the result set */ +#define ENAME_ROWID 3 /* "DB.TABLE._rowid_" for * expansion of rowid */ /* ** An instance of this structure can hold a simple list of identifiers, @@ -18871,10 +19252,12 @@ struct IdList { ** ** Union member validity: ** -** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc -** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy -** u2.pIBIndex fg.isIndexedBy && !fg.isCte -** u2.pCteUse fg.isCte && !fg.isIndexedBy +** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc +** u1.pFuncArg fg.isTabFunc && !fg.isIndexedBy +** u1.nRow !fg.isTabFunc && !fg.isIndexedBy +** +** u2.pIBIndex fg.isIndexedBy && !fg.isCte +** u2.pCteUse fg.isCte && !fg.isIndexedBy */ struct SrcItem { Schema *pSchema; /* Schema to which this item is fixed */ @@ -18902,6 +19285,7 @@ struct SrcItem { unsigned isOn :1; /* u3.pOn was once valid and non-NULL */ unsigned isSynthUsing :1; /* u3.pUsing is synthesized from NATURAL */ unsigned isNestedFrom :1; /* pSelect is a SF_NestedFrom subquery */ + unsigned rowidUsed :1; /* The ROWID of this table is referenced */ } fg; int iCursor; /* The VDBE cursor number used to access this table */ union { @@ -18912,6 +19296,7 @@ struct SrcItem { union { char *zIndexedBy; /* Identifier from "INDEXED BY " clause */ ExprList *pFuncArg; /* Arguments to table-valued-function */ + u32 nRow; /* Number of rows in a VALUES clause */ } u1; union { Index *pIBIndex; /* Index structure corresponding to u1.zIndexedBy */ @@ -19021,6 +19406,7 @@ struct NameContext { int nRef; /* Number of names resolved by this context */ int nNcErr; /* Number of errors encountered while resolving names */ int ncFlags; /* Zero or more NC_* flags defined below */ + u32 nNestedSelect; /* Number of nested selects using this NC */ Select *pWinSelect; /* SELECT statement for any window functions */ }; @@ -19054,6 +19440,7 @@ struct NameContext { #define NC_InAggFunc 0x020000 /* True if analyzing arguments to an agg func */ #define NC_FromDDL 0x040000 /* SQL text comes from sqlite_schema */ #define NC_NoSelect 0x080000 /* Do not descend into sub-selects */ +#define NC_Where 0x100000 /* Processing WHERE clause of a SELECT */ #define NC_OrderAgg 0x8000000 /* Has an aggregate other than count/min/max */ /* @@ -19077,6 +19464,7 @@ struct Upsert { Expr *pUpsertWhere; /* WHERE clause for the ON CONFLICT UPDATE */ Upsert *pNextUpsert; /* Next ON CONFLICT clause in the list */ u8 isDoUpdate; /* True for DO UPDATE. False for DO NOTHING */ + u8 isDup; /* True if 2nd or later with same pUpsertIdx */ /* Above this point is the parse tree for the ON CONFLICT clauses. ** The next group of fields stores intermediate data. */ void *pToFree; /* Free memory when deleting the Upsert object */ @@ -19166,11 +19554,12 @@ struct Select { #define SF_View 0x0200000 /* SELECT statement is a view */ #define SF_NoopOrderBy 0x0400000 /* ORDER BY is ignored for this query */ #define SF_UFSrcCheck 0x0800000 /* Check pSrc as required by UPDATE...FROM */ -#define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */ +#define SF_PushDown 0x1000000 /* Modified by WHERE-clause push-down opt */ #define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */ #define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */ #define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */ #define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */ +#define SF_Correlated 0x20000000 /* True if references the outer context */ /* True if S exists and has SF_NestedFrom */ #define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0) @@ -19410,6 +19799,7 @@ struct Parse { u8 disableLookaside; /* Number of times lookaside has been disabled */ u8 prepFlags; /* SQLITE_PREPARE_* flags */ u8 withinRJSubrtn; /* Nesting level for RIGHT JOIN body subroutines */ + u8 bHasWith; /* True if statement contains WITH */ #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */ #endif @@ -19429,6 +19819,7 @@ struct Parse { int *aLabel; /* Space to hold the labels */ ExprList *pConstExpr;/* Constant expressions */ IndexedExpr *pIdxEpr;/* List of expressions used by active indexes */ + IndexedExpr *pIdxPartExpr; /* Exprs constrained by index WHERE clauses */ Token constraintName;/* Name of the constraint currently being parsed */ yDbMask writeMask; /* Start a write transaction on these databases */ yDbMask cookieMask; /* Bitmask of schema verified databases */ @@ -19700,6 +20091,7 @@ struct Returning { int iRetCur; /* Transient table holding RETURNING results */ int nRetCol; /* Number of in pReturnEL after expansion */ int iRetReg; /* Register array for holding a row of RETURNING */ + char zName[40]; /* Name of trigger: "sqlite_returning_%p" */ }; /* @@ -19735,6 +20127,9 @@ struct sqlite3_str { ** ** 3. Make a (read-only) copy of a read-only RCStr string using ** sqlite3RCStrRef(). +** +** "String" is in the name, but an RCStr object can also be used to hold +** binary data. */ struct RCStr { u64 nRCRef; /* Number of references */ @@ -19793,6 +20188,9 @@ struct Sqlite3Config { u8 bSmallMalloc; /* Avoid large memory allocations if true */ u8 bExtraSchemaChecks; /* Verify type,name,tbl_name in schema */ u8 bUseLongDouble; /* Make use of long double */ +#ifdef SQLITE_DEBUG + u8 bJsonSelfcheck; /* Double-check JSON parsing */ +#endif int mxStrlen; /* Maximum string length */ int neverCorrupt; /* Database is always well-formed */ int szLookaside; /* Default lookaside buffer size */ @@ -19839,6 +20237,11 @@ struct Sqlite3Config { #endif #ifndef SQLITE_UNTESTABLE int (*xTestCallback)(int); /* Invoked by sqlite3FaultSim() */ +#endif +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + u32 mNoVisibleRowid; /* TF_NoVisibleRowid if the ROWID_IN_VIEW + ** feature is disabled. 0 if rowids can + ** occur in views. */ #endif int bLocaltimeFault; /* True to fail localtime() calls */ int (*xAltLocaltime)(const void*,void*); /* Alternative localtime() routine */ @@ -20000,6 +20403,16 @@ struct CteUse { }; +/* Client data associated with sqlite3_set_clientdata() and +** sqlite3_get_clientdata(). +*/ +struct DbClientData { + DbClientData *pNext; /* Next in a linked list */ + void *pData; /* The data */ + void (*xDestructor)(void*); /* Destructor. Might be NULL */ + char zName[1]; /* Name of this client data. MUST BE LAST */ +}; + #ifdef SQLITE_DEBUG /* ** An instance of the TreeView object is used for printing the content of @@ -20066,6 +20479,9 @@ struct Window { ** due to the SQLITE_SUBTYPE flag */ }; +SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow); +SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal); + #ifndef SQLITE_OMIT_WINDOWFUNC SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3*, Window*); SQLITE_PRIVATE void sqlite3WindowUnlinkFromSelect(Window*); @@ -20285,10 +20701,13 @@ SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex*); # define EXP754 (((u64)0x7ff)<<52) # define MAN754 ((((u64)1)<<52)-1) # define IsNaN(X) (((X)&EXP754)==EXP754 && ((X)&MAN754)!=0) +# define IsOvfl(X) (((X)&EXP754)==EXP754) SQLITE_PRIVATE int sqlite3IsNaN(double); +SQLITE_PRIVATE int sqlite3IsOverflow(double); #else -# define IsNaN(X) 0 -# define sqlite3IsNaN(X) 0 +# define IsNaN(X) 0 +# define sqlite3IsNaN(X) 0 +# define sqlite3IsOVerflow(X) 0 #endif /* @@ -20380,6 +20799,7 @@ SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3*,int); SQLITE_PRIVATE void sqlite3Dequote(char*); SQLITE_PRIVATE void sqlite3DequoteExpr(Expr*); SQLITE_PRIVATE void sqlite3DequoteToken(Token*); +SQLITE_PRIVATE void sqlite3DequoteNumber(Parse*, Expr*); SQLITE_PRIVATE void sqlite3TokenInit(Token*,char*); SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int); SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*); @@ -20404,10 +20824,13 @@ SQLITE_PRIVATE void sqlite3PExprAddSelect(Parse*, Expr*, Select*); SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse*,Expr*, Expr*); SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr*); SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, const Token*, int); +SQLITE_PRIVATE void sqlite3ExprAddFunctionOrderBy(Parse*,Expr*,ExprList*); +SQLITE_PRIVATE void sqlite3ExprOrderByAggregateError(Parse*,Expr*); SQLITE_PRIVATE void sqlite3ExprFunctionUsable(Parse*,const Expr*,const FuncDef*); SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*, u32); SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*); -SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse*, Expr*); +SQLITE_PRIVATE void sqlite3ExprDeleteGeneric(sqlite3*,void*); +SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse*, Expr*); SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse*, Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); @@ -20416,6 +20839,7 @@ SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int,int); SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,const Token*,int); SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,const char*,const char*); SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*); +SQLITE_PRIVATE void sqlite3ExprListDeleteGeneric(sqlite3*,void*); SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList*); SQLITE_PRIVATE int sqlite3IndexHasDuplicateRootPage(Index*); SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**); @@ -20506,6 +20930,7 @@ SQLITE_PRIVATE int sqlite3DbMaskAllZero(yDbMask); SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int); SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int); SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*); +SQLITE_PRIVATE void sqlite3DeleteTableGeneric(sqlite3*, void*); SQLITE_PRIVATE void sqlite3FreeIndex(sqlite3*, Index*); #ifndef SQLITE_OMIT_AUTOINCREMENT SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse); @@ -20542,6 +20967,7 @@ SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*); SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*, Expr*,ExprList*,u32,Expr*); SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*); +SQLITE_PRIVATE void sqlite3SelectDeleteGeneric(sqlite3*,void*); SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*); SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, Trigger*); SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); @@ -20627,12 +21053,10 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*); SQLITE_PRIVATE u32 sqlite3IsTrueOrFalse(const char*); SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr*); SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr*); -SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*); -SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*); +SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse*,Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8); SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse*, Expr*, ExprList*); -SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int); -SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int); +SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int,int); #ifdef SQLITE_ENABLE_CURSOR_HINTS SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr*); #endif @@ -20640,6 +21064,7 @@ SQLITE_PRIVATE int sqlite3ExprIsInteger(const Expr*, int*); SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*); SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char); SQLITE_PRIVATE int sqlite3IsRowid(const char*); +SQLITE_PRIVATE const char *sqlite3RowidAlias(Table *pTab); SQLITE_PRIVATE void sqlite3GenerateRowDelete( Parse*,Table*,Trigger*,int,int,int,i16,u8,u8,u8,int); SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int, int*, int); @@ -20767,6 +21192,7 @@ SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar); #endif SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte); SQLITE_PRIVATE u32 sqlite3Utf8Read(const u8**); +SQLITE_PRIVATE int sqlite3Utf8ReadLimited(const u8*, int, u32*); SQLITE_PRIVATE LogEst sqlite3LogEst(u64); SQLITE_PRIVATE LogEst sqlite3LogEstAdd(LogEst,LogEst); SQLITE_PRIVATE LogEst sqlite3LogEstFromDouble(double); @@ -20815,7 +21241,9 @@ SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...); SQLITE_PRIVATE void sqlite3Error(sqlite3*,int); SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3*); SQLITE_PRIVATE void sqlite3SystemError(sqlite3*,int); +#if !defined(SQLITE_OMIT_BLOB_LITERAL) SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n); +#endif SQLITE_PRIVATE u8 sqlite3HexToInt(int h); SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); @@ -20911,7 +21339,8 @@ SQLITE_PRIVATE int sqlite3MatchEName( const struct ExprList_item*, const char*, const char*, - const char* + const char*, + int* ); SQLITE_PRIVATE Bitmask sqlite3ExprColUsed(Expr*); SQLITE_PRIVATE u8 sqlite3StrIHash(const char*); @@ -20968,7 +21397,7 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int); SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *); SQLITE_PRIVATE char *sqlite3RCStrRef(char*); -SQLITE_PRIVATE void sqlite3RCStrUnref(char*); +SQLITE_PRIVATE void sqlite3RCStrUnref(void*); SQLITE_PRIVATE char *sqlite3RCStrNew(u64); SQLITE_PRIVATE char *sqlite3RCStrResize(char*,u64); @@ -21112,6 +21541,7 @@ SQLITE_PRIVATE Cte *sqlite3CteNew(Parse*,Token*,ExprList*,Select*,u8); SQLITE_PRIVATE void sqlite3CteDelete(sqlite3*,Cte*); SQLITE_PRIVATE With *sqlite3WithAdd(Parse*,With*,Cte*); SQLITE_PRIVATE void sqlite3WithDelete(sqlite3*,With*); +SQLITE_PRIVATE void sqlite3WithDeleteGeneric(sqlite3*,void*); SQLITE_PRIVATE With *sqlite3WithPush(Parse*, With*, u8); #else # define sqlite3CteNew(P,T,E,S) ((void*)0) @@ -21124,7 +21554,7 @@ SQLITE_PRIVATE With *sqlite3WithPush(Parse*, With*, u8); SQLITE_PRIVATE Upsert *sqlite3UpsertNew(sqlite3*,ExprList*,Expr*,ExprList*,Expr*,Upsert*); SQLITE_PRIVATE void sqlite3UpsertDelete(sqlite3*,Upsert*); SQLITE_PRIVATE Upsert *sqlite3UpsertDup(sqlite3*,Upsert*); -SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(Parse*,SrcList*,Upsert*); +SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget(Parse*,SrcList*,Upsert*,Upsert*); SQLITE_PRIVATE void sqlite3UpsertDoUpdate(Parse*,Upsert*,Table*,Index*,int); SQLITE_PRIVATE Upsert *sqlite3UpsertOfIndex(Upsert*,Index*); SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert*); @@ -21514,6 +21944,9 @@ static const char * const sqlite3azCompileOpt[] = { "ALLOW_COVERING_INDEX_SCAN=" CTIMEOPT_VAL(SQLITE_ALLOW_COVERING_INDEX_SCAN), # endif #endif +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + "ALLOW_ROWID_IN_VIEW", +#endif #ifdef SQLITE_ALLOW_URI_AUTHORITY "ALLOW_URI_AUTHORITY", #endif @@ -21804,6 +22237,9 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_EXPLAIN_ESTIMATED_ROWS "EXPLAIN_ESTIMATED_ROWS", #endif +#ifdef SQLITE_EXTRA_AUTOEXT + "EXTRA_AUTOEXT=" CTIMEOPT_VAL(SQLITE_EXTRA_AUTOEXT), +#endif #ifdef SQLITE_EXTRA_IFNULLROW "EXTRA_IFNULLROW", #endif @@ -22085,6 +22521,9 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS "OMIT_SCHEMA_VERSION_PRAGMAS", #endif +#ifdef SQLITE_OMIT_SEH + "OMIT_SEH", +#endif #ifdef SQLITE_OMIT_SHARED_CACHE "OMIT_SHARED_CACHE", #endif @@ -22483,6 +22922,9 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { 0, /* bSmallMalloc */ 1, /* bExtraSchemaChecks */ sizeof(LONGDOUBLE_TYPE)>8, /* bUseLongDouble */ +#ifdef SQLITE_DEBUG + 0, /* bJsonSelfcheck */ +#endif 0x7ffffffe, /* mxStrlen */ 0, /* neverCorrupt */ SQLITE_DEFAULT_LOOKASIDE, /* szLookaside, nLookaside */ @@ -22524,6 +22966,9 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { #endif #ifndef SQLITE_UNTESTABLE 0, /* xTestCallback */ +#endif +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + 0, /* mNoVisibleRowid. 0 == allow rowid-in-view */ #endif 0, /* bLocaltimeFault */ 0, /* xAltLocaltime */ @@ -23735,7 +24180,7 @@ SQLITE_API int sqlite3_db_status( case SQLITE_DBSTATUS_CACHE_MISS: case SQLITE_DBSTATUS_CACHE_WRITE:{ int i; - int nRet = 0; + u64 nRet = 0; assert( SQLITE_DBSTATUS_CACHE_MISS==SQLITE_DBSTATUS_CACHE_HIT+1 ); assert( SQLITE_DBSTATUS_CACHE_WRITE==SQLITE_DBSTATUS_CACHE_HIT+2 ); @@ -23748,7 +24193,7 @@ SQLITE_API int sqlite3_db_status( *pHighwater = 0; /* IMP: R-42420-56072 */ /* IMP: R-54100-20147 */ /* IMP: R-29431-39229 */ - *pCurrent = nRet; + *pCurrent = (int)nRet & 0x7fffffff; break; } @@ -23845,13 +24290,14 @@ struct DateTime { int tz; /* Timezone offset in minutes */ double s; /* Seconds */ char validJD; /* True (1) if iJD is valid */ - char rawS; /* Raw numeric value stored in s */ char validYMD; /* True (1) if Y,M,D are valid */ char validHMS; /* True (1) if h,m,s are valid */ - char validTZ; /* True (1) if tz is valid */ - char tzSet; /* Timezone was set explicitly */ - char isError; /* An overflow has occurred */ - char useSubsec; /* Display subsecond precision */ + char nFloor; /* Days to implement "floor" */ + unsigned rawS : 1; /* Raw numeric value stored in s */ + unsigned isError : 1; /* An overflow has occurred */ + unsigned useSubsec : 1; /* Display subsecond precision */ + unsigned isUtc : 1; /* Time is known to be UTC */ + unsigned isLocal : 1; /* Time is known to be localtime */ }; @@ -23949,6 +24395,8 @@ static int parseTimezone(const char *zDate, DateTime *p){ sgn = +1; }else if( c=='Z' || c=='z' ){ zDate++; + p->isLocal = 0; + p->isUtc = 1; goto zulu_time; }else{ return c!=0; @@ -23961,7 +24409,6 @@ static int parseTimezone(const char *zDate, DateTime *p){ p->tz = sgn*(nMn + nHr*60); zulu_time: while( sqlite3Isspace(*zDate) ){ zDate++; } - p->tzSet = 1; return *zDate!=0; } @@ -24005,7 +24452,6 @@ static int parseHhMmSs(const char *zDate, DateTime *p){ p->m = m; p->s = s + ms; if( parseTimezone(zDate, p) ) return 1; - p->validTZ = (p->tz!=0)?1:0; return 0; } @@ -24052,15 +24498,40 @@ static void computeJD(DateTime *p){ p->validJD = 1; if( p->validHMS ){ p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5); - if( p->validTZ ){ + if( p->tz ){ p->iJD -= p->tz*60000; p->validYMD = 0; p->validHMS = 0; - p->validTZ = 0; + p->tz = 0; + p->isUtc = 1; + p->isLocal = 0; } } } +/* +** Given the YYYY-MM-DD information current in p, determine if there +** is day-of-month overflow and set nFloor to the number of days that +** would need to be subtracted from the date in order to bring the +** date back to the end of the month. +*/ +static void computeFloor(DateTime *p){ + assert( p->validYMD || p->isError ); + assert( p->D>=0 && p->D<=31 ); + assert( p->M>=0 && p->M<=12 ); + if( p->D<=28 ){ + p->nFloor = 0; + }else if( (1<M) & 0x15aa ){ + p->nFloor = 0; + }else if( p->M!=2 ){ + p->nFloor = (p->D==31); + }else if( p->Y%4!=0 || (p->Y%100==0 && p->Y%400!=0) ){ + p->nFloor = p->D - 28; + }else{ + p->nFloor = p->D - 29; + } +} + /* ** Parse dates of the form ** @@ -24099,12 +24570,16 @@ static int parseYyyyMmDd(const char *zDate, DateTime *p){ p->Y = neg ? -Y : Y; p->M = M; p->D = D; - if( p->validTZ ){ + computeFloor(p); + if( p->tz ){ computeJD(p); } return 0; } + +static void clearYMD_HMS_TZ(DateTime *p); /* Forward declaration */ + /* ** Set the time to the current time reported by the VFS. ** @@ -24114,6 +24589,9 @@ static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){ p->iJD = sqlite3StmtCurrentTime(context); if( p->iJD>0 ){ p->validJD = 1; + p->isUtc = 1; + p->isLocal = 0; + clearYMD_HMS_TZ(p); return 0; }else{ return 1; @@ -24252,7 +24730,7 @@ static void computeYMD_HMS(DateTime *p){ static void clearYMD_HMS_TZ(DateTime *p){ p->validYMD = 0; p->validHMS = 0; - p->validTZ = 0; + p->tz = 0; } #ifndef SQLITE_OMIT_LOCALTIME @@ -24384,7 +24862,7 @@ static int toLocaltime( p->validHMS = 1; p->validJD = 0; p->rawS = 0; - p->validTZ = 0; + p->tz = 0; p->isError = 0; return SQLITE_OK; } @@ -24404,12 +24882,12 @@ static const struct { float rLimit; /* Maximum NNN value for this transform */ float rXform; /* Constant used for this transform */ } aXformType[] = { - { 6, "second", 4.6427e+14, 1.0 }, - { 6, "minute", 7.7379e+12, 60.0 }, - { 4, "hour", 1.2897e+11, 3600.0 }, - { 3, "day", 5373485.0, 86400.0 }, - { 5, "month", 176546.0, 2592000.0 }, - { 4, "year", 14713.0, 31536000.0 }, + /* 0 */ { 6, "second", 4.6427e+14, 1.0 }, + /* 1 */ { 6, "minute", 7.7379e+12, 60.0 }, + /* 2 */ { 4, "hour", 1.2897e+11, 3600.0 }, + /* 3 */ { 3, "day", 5373485.0, 86400.0 }, + /* 4 */ { 5, "month", 176546.0, 30.0*86400.0 }, + /* 5 */ { 4, "year", 14713.0, 365.0*86400.0 }, }; /* @@ -24441,14 +24919,20 @@ static void autoAdjustDate(DateTime *p){ ** NNN.NNNN seconds ** NNN months ** NNN years +** +/-YYYY-MM-DD HH:MM:SS.SSS +** ceiling +** floor ** start of month ** start of year ** start of week ** start of day ** weekday N ** unixepoch +** auto ** localtime ** utc +** subsec +** subsecond ** ** Return 0 on success and 1 if there is any kind of error. If the error ** is in a system call (i.e. localtime()), then an error message is written @@ -24479,6 +24963,37 @@ static int parseModifier( } break; } + case 'c': { + /* + ** ceiling + ** + ** Resolve day-of-month overflow by rolling forward into the next + ** month. As this is the default action, this modifier is really + ** a no-op that is only included for symmetry. See "floor". + */ + if( sqlite3_stricmp(z, "ceiling")==0 ){ + computeJD(p); + clearYMD_HMS_TZ(p); + rc = 0; + p->nFloor = 0; + } + break; + } + case 'f': { + /* + ** floor + ** + ** Resolve day-of-month overflow by rolling back to the end of the + ** previous month. + */ + if( sqlite3_stricmp(z, "floor")==0 ){ + computeJD(p); + p->iJD -= p->nFloor*86400000; + clearYMD_HMS_TZ(p); + rc = 0; + } + break; + } case 'j': { /* ** julianday @@ -24505,7 +25020,9 @@ static int parseModifier( ** show local time. */ if( sqlite3_stricmp(z, "localtime")==0 && sqlite3NotPureFunc(pCtx) ){ - rc = toLocaltime(p, pCtx); + rc = p->isLocal ? SQLITE_OK : toLocaltime(p, pCtx); + p->isUtc = 0; + p->isLocal = 1; } break; } @@ -24530,7 +25047,7 @@ static int parseModifier( } #ifndef SQLITE_OMIT_LOCALTIME else if( sqlite3_stricmp(z, "utc")==0 && sqlite3NotPureFunc(pCtx) ){ - if( p->tzSet==0 ){ + if( p->isUtc==0 ){ i64 iOrigJD; /* Original localtime */ i64 iGuess; /* Guess at the corresponding utc time */ int cnt = 0; /* Safety to prevent infinite loop */ @@ -24553,7 +25070,8 @@ static int parseModifier( memset(p, 0, sizeof(*p)); p->iJD = iGuess; p->validJD = 1; - p->tzSet = 1; + p->isUtc = 1; + p->isLocal = 0; } rc = SQLITE_OK; } @@ -24573,7 +25091,7 @@ static int parseModifier( && r>=0.0 && r<7.0 && (n=(int)r)==r ){ sqlite3_int64 Z; computeYMD_HMS(p); - p->validTZ = 0; + p->tz = 0; p->validJD = 0; computeJD(p); Z = ((p->iJD + 129600000)/86400000) % 7; @@ -24613,7 +25131,7 @@ static int parseModifier( p->h = p->m = 0; p->s = 0.0; p->rawS = 0; - p->validTZ = 0; + p->tz = 0; p->validJD = 0; if( sqlite3_stricmp(z,"month")==0 ){ p->D = 1; @@ -24684,6 +25202,7 @@ static int parseModifier( x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12; p->Y += x; p->M -= x*12; + computeFloor(p); computeJD(p); p->validHMS = 0; p->validYMD = 0; @@ -24730,11 +25249,12 @@ static int parseModifier( z += n; while( sqlite3Isspace(*z) ) z++; n = sqlite3Strlen30(z); - if( n>10 || n<3 ) break; + if( n<3 || n>10 ) break; if( sqlite3UpperToLower[(u8)z[n-1]]=='s' ) n--; computeJD(p); assert( rc==1 ); rRounder = r<0 ? -0.5 : +0.5; + p->nFloor = 0; for(i=0; iM += (int)r; x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12; p->Y += x; p->M -= x*12; + computeFloor(p); p->validJD = 0; r -= (int)r; break; } case 5: { /* Special processing to add years */ int y = (int)r; - assert( strcmp(aXformType[i].zName,"year")==0 ); + assert( strcmp(aXformType[5].zName,"year")==0 ); computeYMD_HMS(p); + assert( p->M>=0 && p->M<=12 ); p->Y += y; + computeFloor(p); p->validJD = 0; r -= (int)r; break; @@ -24817,6 +25340,12 @@ static int isDate( } computeJD(p); if( p->isError || !validJulianDay(p->iJD) ) return 1; + if( argc==1 && p->validYMD && p->D>28 ){ + /* Make sure a YYYY-MM-DD is normalized. + ** Example: 2023-02-31 -> 2023-03-03 */ + assert( p->validJD ); + p->validYMD = 0; + } return 0; } @@ -25004,22 +25533,83 @@ static void dateFunc( } } +/* +** Compute the number of days after the most recent January 1. +** +** In other words, compute the zero-based day number for the +** current year: +** +** Jan01 = 0, Jan02 = 1, ..., Jan31 = 30, Feb01 = 31, ... +** Dec31 = 364 or 365. +*/ +static int daysAfterJan01(DateTime *pDate){ + DateTime jan01 = *pDate; + assert( jan01.validYMD ); + assert( jan01.validHMS ); + assert( pDate->validJD ); + jan01.validJD = 0; + jan01.M = 1; + jan01.D = 1; + computeJD(&jan01); + return (int)((pDate->iJD-jan01.iJD+43200000)/86400000); +} + +/* +** Return the number of days after the most recent Monday. +** +** In other words, return the day of the week according +** to this code: +** +** 0=Monday, 1=Tuesday, 2=Wednesday, ..., 6=Sunday. +*/ +static int daysAfterMonday(DateTime *pDate){ + assert( pDate->validJD ); + return (int)((pDate->iJD+43200000)/86400000) % 7; +} + +/* +** Return the number of days after the most recent Sunday. +** +** In other words, return the day of the week according +** to this code: +** +** 0=Sunday, 1=Monday, 2=Tues, ..., 6=Saturday +*/ +static int daysAfterSunday(DateTime *pDate){ + assert( pDate->validJD ); + return (int)((pDate->iJD+129600000)/86400000) % 7; +} + /* ** strftime( FORMAT, TIMESTRING, MOD, MOD, ...) ** ** Return a string described by FORMAT. Conversions as follows: ** -** %d day of month +** %d day of month 01-31 +** %e day of month 1-31 ** %f ** fractional seconds SS.SSS +** %F ISO date. YYYY-MM-DD +** %G ISO year corresponding to %V 0000-9999. +** %g 2-digit ISO year corresponding to %V 00-99 ** %H hour 00-24 -** %j day of year 000-366 +** %k hour 0-24 (leading zero converted to space) +** %I hour 01-12 +** %j day of year 001-366 ** %J ** julian day number +** %l hour 1-12 (leading zero converted to space) ** %m month 01-12 ** %M minute 00-59 +** %p "am" or "pm" +** %P "AM" or "PM" +** %R time as HH:MM ** %s seconds since 1970-01-01 ** %S seconds 00-59 -** %w day of week 0-6 Sunday==0 -** %W week of year 00-53 +** %T time as HH:MM:SS +** %u day of week 1-7 Monday==1, Sunday==7 +** %w day of week 0-6 Sunday==0, Monday==1 +** %U week of year 00-53 (First Sunday is start of week 01) +** %V week of year 01-53 (First week containing Thursday is week 01) +** %W week of year 00-53 (First Monday is start of week 01) ** %Y year 0000-9999 ** %% % */ @@ -25044,44 +25634,61 @@ static void strftimeFunc( computeJD(&x); computeYMD_HMS(&x); for(i=j=0; zFmt[i]; i++){ + char cf; if( zFmt[i]!='%' ) continue; if( j59.999 ) s = 59.999; sqlite3_str_appendf(&sRes, "%06.3f", s); break; } - case 'H': { - sqlite3_str_appendf(&sRes, "%02d", x.h); + case 'F': { + sqlite3_str_appendf(&sRes, "%04d-%02d-%02d", x.Y, x.M, x.D); break; } - case 'W': /* Fall thru */ - case 'j': { - int nDay; /* Number of days since 1st day of year */ + case 'G': /* Fall thru */ + case 'g': { DateTime y = x; - y.validJD = 0; - y.M = 1; - y.D = 1; - computeJD(&y); - nDay = (int)((x.iJD-y.iJD+43200000)/86400000); - if( zFmt[i]=='W' ){ - int wd; /* 0=Monday, 1=Tuesday, ... 6=Sunday */ - wd = (int)(((x.iJD+43200000)/86400000)%7); - sqlite3_str_appendf(&sRes,"%02d",(nDay+7-wd)/7); + assert( y.validJD ); + /* Move y so that it is the Thursday in the same week as x */ + y.iJD += (3 - daysAfterMonday(&x))*86400000; + y.validYMD = 0; + computeYMD(&y); + if( cf=='g' ){ + sqlite3_str_appendf(&sRes, "%02d", y.Y%100); }else{ - sqlite3_str_appendf(&sRes,"%03d",nDay+1); + sqlite3_str_appendf(&sRes, "%04d", y.Y); } break; } - case 'J': { + case 'H': + case 'k': { + sqlite3_str_appendf(&sRes, cf=='H' ? "%02d" : "%2d", x.h); + break; + } + case 'I': /* Fall thru */ + case 'l': { + int h = x.h; + if( h>12 ) h -= 12; + if( h==0 ) h = 12; + sqlite3_str_appendf(&sRes, cf=='I' ? "%02d" : "%2d", h); + break; + } + case 'j': { /* Day of year. Jan01==1, Jan02==2, and so forth */ + sqlite3_str_appendf(&sRes,"%03d",daysAfterJan01(&x)+1); + break; + } + case 'J': { /* Julian day number. (Non-standard) */ sqlite3_str_appendf(&sRes,"%.16g",x.iJD/86400000.0); break; } @@ -25093,6 +25700,19 @@ static void strftimeFunc( sqlite3_str_appendf(&sRes,"%02d",x.m); break; } + case 'p': /* Fall thru */ + case 'P': { + if( x.h>=12 ){ + sqlite3_str_append(&sRes, cf=='p' ? "PM" : "pm", 2); + }else{ + sqlite3_str_append(&sRes, cf=='p' ? "AM" : "am", 2); + } + break; + } + case 'R': { + sqlite3_str_appendf(&sRes, "%02d:%02d", x.h, x.m); + break; + } case 's': { if( x.useSubsec ){ sqlite3_str_appendf(&sRes,"%.3f", @@ -25107,9 +25727,35 @@ static void strftimeFunc( sqlite3_str_appendf(&sRes,"%02d",(int)x.s); break; } - case 'w': { - sqlite3_str_appendchar(&sRes, 1, - (char)(((x.iJD+129600000)/86400000) % 7) + '0'); + case 'T': { + sqlite3_str_appendf(&sRes,"%02d:%02d:%02d", x.h, x.m, (int)x.s); + break; + } + case 'u': /* Day of week. 1 to 7. Monday==1, Sunday==7 */ + case 'w': { /* Day of week. 0 to 6. Sunday==0, Monday==1 */ + char c = (char)daysAfterSunday(&x) + '0'; + if( c=='0' && cf=='u' ) c = '7'; + sqlite3_str_appendchar(&sRes, 1, c); + break; + } + case 'U': { /* Week num. 00-53. First Sun of the year is week 01 */ + sqlite3_str_appendf(&sRes,"%02d", + (daysAfterJan01(&x)-daysAfterSunday(&x)+7)/7); + break; + } + case 'V': { /* Week num. 01-53. First week with a Thur is week 01 */ + DateTime y = x; + /* Adjust y so that is the Thursday in the same week as x */ + assert( y.validJD ); + y.iJD += (3 - daysAfterMonday(&x))*86400000; + y.validYMD = 0; + computeYMD(&y); + sqlite3_str_appendf(&sRes,"%02d", daysAfterJan01(&y)/7+1); + break; + } + case 'W': { /* Week num. 00-53. First Mon of the year is week 01 */ + sqlite3_str_appendf(&sRes,"%02d", + (daysAfterJan01(&x)-daysAfterMonday(&x)+7)/7); break; } case 'Y': { @@ -25258,9 +25904,7 @@ static void timediffFunc( d1.iJD = d2.iJD - d1.iJD; d1.iJD += (u64)1486995408 * (u64)100000; } - d1.validYMD = 0; - d1.validHMS = 0; - d1.validTZ = 0; + clearYMD_HMS_TZ(&d1); computeYMD_HMS(&d1); sqlite3StrAccumInit(&sRes, 0, 0, 0, 100); sqlite3_str_appendf(&sRes, "%c%04d-%02d-%02d %02d:%02d:%06.3f", @@ -25329,6 +25973,36 @@ static void currentTimeFunc( } #endif +#if !defined(SQLITE_OMIT_DATETIME_FUNCS) && defined(SQLITE_DEBUG) +/* +** datedebug(...) +** +** This routine returns JSON that describes the internal DateTime object. +** Used for debugging and testing only. Subject to change. +*/ +static void datedebugFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + DateTime x; + if( isDate(context, argc, argv, &x)==0 ){ + char *zJson; + zJson = sqlite3_mprintf( + "{iJD:%lld,Y:%d,M:%d,D:%d,h:%d,m:%d,tz:%d," + "s:%.3f,validJD:%d,validYMS:%d,validHMS:%d," + "nFloor:%d,rawS:%d,isError:%d,useSubsec:%d," + "isUtc:%d,isLocal:%d}", + x.iJD, x.Y, x.M, x.D, x.h, x.m, x.tz, + x.s, x.validJD, x.validYMD, x.validHMS, + x.nFloor, x.rawS, x.isError, x.useSubsec, + x.isUtc, x.isLocal); + sqlite3_result_text(context, zJson, -1, sqlite3_free); + } +} +#endif /* !SQLITE_OMIT_DATETIME_FUNCS && SQLITE_DEBUG */ + + /* ** This function registered all of the above C functions as SQL ** functions. This should be the only routine in this file with @@ -25344,6 +26018,9 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){ PURE_DATE(datetime, -1, 0, 0, datetimeFunc ), PURE_DATE(strftime, -1, 0, 0, strftimeFunc ), PURE_DATE(timediff, 2, 0, 0, timediffFunc ), +#ifdef SQLITE_DEBUG + PURE_DATE(datedebug, -1, 0, 0, datedebugFunc ), +#endif DFUNCTION(current_time, 0, 0, 0, ctimeFunc ), DFUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc), DFUNCTION(current_date, 0, 0, 0, cdateFunc ), @@ -28198,7 +28875,7 @@ static void checkMutexFree(sqlite3_mutex *p){ assert( SQLITE_MUTEX_FAST<2 ); assert( SQLITE_MUTEX_WARNONCONTENTION<2 ); -#if SQLITE_ENABLE_API_ARMOR +#ifdef SQLITE_ENABLE_API_ARMOR if( ((CheckMutex*)p)->iType<2 ) #endif { @@ -28870,7 +29547,7 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ */ static void pthreadMutexFree(sqlite3_mutex *p){ assert( p->nRef==0 ); -#if SQLITE_ENABLE_API_ARMOR +#ifdef SQLITE_ENABLE_API_ARMOR if( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE ) #endif { @@ -29223,7 +29900,7 @@ SQLITE_PRIVATE void sqlite3MemoryBarrier(void){ SQLITE_MEMORY_BARRIER; #elif defined(__GNUC__) __sync_synchronize(); -#elif MSVC_VERSION>=1300 +#elif MSVC_VERSION>=1400 _ReadWriteBarrier(); #elif defined(MemoryBarrier) MemoryBarrier(); @@ -29759,6 +30436,24 @@ static void sqlite3MallocAlarm(int nByte){ sqlite3_mutex_enter(mem0.mutex); } +#ifdef SQLITE_DEBUG +/* +** This routine is called whenever an out-of-memory condition is seen, +** It's only purpose to to serve as a breakpoint for gdb or similar +** code debuggers when working on out-of-memory conditions, for example +** caused by PRAGMA hard_heap_limit=N. +*/ +static SQLITE_NOINLINE void test_oom_breakpoint(u64 n){ + static u64 nOomFault = 0; + nOomFault += n; + /* The assert() is never reached in a human lifetime. It is here mostly + ** to prevent code optimizers from optimizing out this function. */ + assert( (nOomFault>>32) < 0xffffffff ); +} +#else +# define test_oom_breakpoint(X) /* No-op for production builds */ +#endif + /* ** Do a memory allocation with statistics and alarms. Assume the ** lock is already held. @@ -29785,6 +30480,7 @@ static void mallocWithAlarm(int n, void **pp){ if( mem0.hardLimit ){ nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); if( nUsed >= mem0.hardLimit - nFull ){ + test_oom_breakpoint(1); *pp = 0; return; } @@ -30073,6 +30769,7 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){ sqlite3MallocAlarm(nDiff); if( mem0.hardLimit>0 && nUsed >= mem0.hardLimit - nDiff ){ sqlite3_mutex_leave(mem0.mutex); + test_oom_breakpoint(1); return 0; } } @@ -30434,7 +31131,7 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){ if( db->mallocFailed || rc ){ return apiHandleError(db, rc); } - return rc & db->errMask; + return 0; } /************** End of malloc.c **********************************************/ @@ -30939,6 +31636,7 @@ SQLITE_API void sqlite3_str_vappendf( if( xtype==etFLOAT ){ iRound = -precision; }else if( xtype==etGENERIC ){ + if( precision==0 ) precision = 1; iRound = precision; }else{ iRound = precision+1; @@ -30974,13 +31672,14 @@ SQLITE_API void sqlite3_str_vappendf( } exp = s.iDP-1; - if( xtype==etGENERIC && precision>0 ) precision--; /* ** If the field type is etGENERIC, then convert to either etEXP ** or etFLOAT, as appropriate. */ if( xtype==etGENERIC ){ + assert( precision>0 ); + precision--; flag_rtz = !flag_alternateform; if( exp<-4 || exp>precision ){ xtype = etEXP; @@ -31296,9 +31995,13 @@ SQLITE_API void sqlite3_str_vappendf( sqlite3_str_appendall(pAccum, pItem->zAlias); }else{ Select *pSel = pItem->pSelect; - assert( pSel!=0 ); + assert( pSel!=0 ); /* Because of tag-20240424-1 */ if( pSel->selFlags & SF_NestedFrom ){ sqlite3_str_appendf(pAccum, "(join-%u)", pSel->selId); + }else if( pSel->selFlags & SF_MultiValue ){ + assert( !pItem->fg.isTabFunc && !pItem->fg.isIndexedBy ); + sqlite3_str_appendf(pAccum, "%u-ROW VALUES CLAUSE", + pItem->u1.nRow); }else{ sqlite3_str_appendf(pAccum, "(subquery-%u)", pSel->selId); } @@ -31810,7 +32513,7 @@ SQLITE_API void sqlite3_str_appendf(StrAccum *p, const char *zFormat, ...){ /***************************************************************************** -** Reference counted string storage +** Reference counted string/blob storage *****************************************************************************/ /* @@ -31830,7 +32533,7 @@ SQLITE_PRIVATE char *sqlite3RCStrRef(char *z){ ** Decrease the reference count by one. Free the string when the ** reference count reaches zero. */ -SQLITE_PRIVATE void sqlite3RCStrUnref(char *z){ +SQLITE_PRIVATE void sqlite3RCStrUnref(void *z){ RCStr *p = (RCStr*)z; assert( p!=0 ); p--; @@ -32075,8 +32778,10 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc) x.printfFlags |= SQLITE_PRINTF_INTERNAL; sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem); if( pItem->pTab ){ - sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx", - pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab, pItem->colUsed); + sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx%s", + pItem->pTab->zName, pItem->pTab->nCol, pItem->pTab, + pItem->colUsed, + pItem->fg.rowidUsed ? "+rowid" : ""); } if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==(JT_LEFT|JT_RIGHT) ){ sqlite3_str_appendf(&x, " FULL-OUTER-JOIN"); @@ -32116,12 +32821,14 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc) sqlite3TreeViewIdList(pView, pItem->u3.pUsing, (--n)>0, "USING"); } if( pItem->pSelect ){ + sqlite3TreeViewPush(&pView, i+1nSrc); if( pItem->pTab ){ Table *pTab = pItem->pTab; sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1); } assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0); + sqlite3TreeViewPop(&pView); } if( pItem->fg.isTabFunc ){ sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:"); @@ -32225,7 +32932,7 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m sqlite3TreeViewItem(pView, "LIMIT", (n--)>0); sqlite3TreeViewExpr(pView, p->pLimit->pLeft, p->pLimit->pRight!=0); if( p->pLimit->pRight ){ - sqlite3TreeViewItem(pView, "OFFSET", (n--)>0); + sqlite3TreeViewItem(pView, "OFFSET", 0); sqlite3TreeViewExpr(pView, p->pLimit->pRight, 0); sqlite3TreeViewPop(&pView); } @@ -32293,6 +33000,7 @@ SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u sqlite3TreeViewItem(pView, "FILTER", 1); sqlite3TreeViewExpr(pView, pWin->pFilter, 0); sqlite3TreeViewPop(&pView); + if( pWin->eFrmType==TK_FILTER ) return; } sqlite3TreeViewPush(&pView, more); if( pWin->zName ){ @@ -32302,7 +33010,7 @@ SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u } if( pWin->zBase ) nElement++; if( pWin->pOrderBy ) nElement++; - if( pWin->eFrmType ) nElement++; + if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ) nElement++; if( pWin->eExclude ) nElement++; if( pWin->zBase ){ sqlite3TreeViewPush(&pView, (--nElement)>0); @@ -32315,7 +33023,7 @@ SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u if( pWin->pOrderBy ){ sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY"); } - if( pWin->eFrmType ){ + if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ){ char zBuf[30]; const char *zFrmType = "ROWS"; if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE"; @@ -32563,7 +33271,7 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m assert( ExprUseXList(pExpr) ); pFarg = pExpr->x.pList; #ifndef SQLITE_OMIT_WINDOWFUNC - pWin = ExprHasProperty(pExpr, EP_WinFunc) ? pExpr->y.pWin : 0; + pWin = IsWindowFunc(pExpr) ? pExpr->y.pWin : 0; #else pWin = 0; #endif @@ -32589,7 +33297,13 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m sqlite3TreeViewLine(pView, "FUNCTION %Q%s", pExpr->u.zToken, zFlgs); } if( pFarg ){ - sqlite3TreeViewExprList(pView, pFarg, pWin!=0, 0); + sqlite3TreeViewExprList(pView, pFarg, pWin!=0 || pExpr->pLeft, 0); + if( pExpr->pLeft ){ + Expr *pOB = pExpr->pLeft; + assert( pOB->op==TK_ORDER ); + assert( ExprUseXList(pOB) ); + sqlite3TreeViewExprList(pView, pOB->x.pList, pWin!=0, "ORDERBY"); + } } #ifndef SQLITE_OMIT_WINDOWFUNC if( pWin ){ @@ -32598,6 +33312,10 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m #endif break; } + case TK_ORDER: { + sqlite3TreeViewExprList(pView, pExpr->x.pList, 0, "ORDERBY"); + break; + } #ifndef SQLITE_OMIT_SUBQUERY case TK_EXISTS: { assert( ExprUseXSelect(pExpr) ); @@ -32651,7 +33369,7 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m assert( pExpr->x.pList->nExpr==2 ); pY = pExpr->x.pList->a[0].pExpr; pZ = pExpr->x.pList->a[1].pExpr; - sqlite3TreeViewLine(pView, "BETWEEN"); + sqlite3TreeViewLine(pView, "BETWEEN%s", zFlgs); sqlite3TreeViewExpr(pView, pX, 1); sqlite3TreeViewExpr(pView, pY, 1); sqlite3TreeViewExpr(pView, pZ, 0); @@ -33786,7 +34504,38 @@ SQLITE_PRIVATE u32 sqlite3Utf8Read( return c; } - +/* +** Read a single UTF8 character out of buffer z[], but reading no +** more than n characters from the buffer. z[] is not zero-terminated. +** +** Return the number of bytes used to construct the character. +** +** Invalid UTF8 might generate a strange result. No effort is made +** to detect invalid UTF8. +** +** At most 4 bytes will be read out of z[]. The return value will always +** be between 1 and 4. +*/ +SQLITE_PRIVATE int sqlite3Utf8ReadLimited( + const u8 *z, + int n, + u32 *piOut +){ + u32 c; + int i = 1; + assert( n>0 ); + c = z[0]; + if( c>=0xc0 ){ + c = sqlite3Utf8Trans1[c-0xc0]; + if( n>4 ) n = 4; + while( irc = SQLITE_INTERRUPT; } #ifndef SQLITE_OMIT_PROGRESS_CALLBACK - if( db->xProgress && (++p->nProgressSteps)>=db->nProgressOps ){ - if( db->xProgress(db->pProgressArg) ){ - p->nErr++; - p->rc = SQLITE_INTERRUPT; + if( db->xProgress ){ + if( p->rc==SQLITE_INTERRUPT ){ + p->nProgressSteps = 0; + }else if( (++p->nProgressSteps)>=db->nProgressOps ){ + if( db->xProgress(db->pProgressArg) ){ + p->nErr++; + p->rc = SQLITE_INTERRUPT; + } + p->nProgressSteps = 0; } - p->nProgressSteps = 0; } #endif } @@ -34467,6 +35233,44 @@ SQLITE_PRIVATE void sqlite3DequoteExpr(Expr *p){ sqlite3Dequote(p->u.zToken); } +/* +** Expression p is a QNUMBER (quoted number). Dequote the value in p->u.zToken +** and set the type to INTEGER or FLOAT. "Quoted" integers or floats are those +** that contain '_' characters that must be removed before further processing. +*/ +SQLITE_PRIVATE void sqlite3DequoteNumber(Parse *pParse, Expr *p){ + assert( p!=0 || pParse->db->mallocFailed ); + if( p ){ + const char *pIn = p->u.zToken; + char *pOut = p->u.zToken; + int bHex = (pIn[0]=='0' && (pIn[1]=='x' || pIn[1]=='X')); + int iValue; + assert( p->op==TK_QNUMBER ); + p->op = TK_INTEGER; + do { + if( *pIn!=SQLITE_DIGIT_SEPARATOR ){ + *pOut++ = *pIn; + if( *pIn=='e' || *pIn=='E' || *pIn=='.' ) p->op = TK_FLOAT; + }else{ + if( (bHex==0 && (!sqlite3Isdigit(pIn[-1]) || !sqlite3Isdigit(pIn[1]))) + || (bHex==1 && (!sqlite3Isxdigit(pIn[-1]) || !sqlite3Isxdigit(pIn[1]))) + ){ + sqlite3ErrorMsg(pParse, "unrecognized token: \"%s\"", p->u.zToken); + } + } + }while( *pIn++ ); + if( bHex ) p->op = TK_INTEGER; + + /* tag-20240227-a: If after dequoting, the number is an integer that + ** fits in 32 bits, then it must be converted into EP_IntValue. Other + ** parts of the code expect this. See also tag-20240227-b. */ + if( p->op==TK_INTEGER && sqlite3GetInt32(p->u.zToken, &iValue) ){ + p->u.iValue = iValue; + p->flags |= EP_IntValue; + } + } +} + /* ** If the input token p is quoted, try to adjust the token to remove ** the quotes. This is not always possible: @@ -34783,6 +35587,9 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en u64 s2; rr[0] = (double)s; s2 = (u64)rr[0]; +#if defined(_MSC_VER) && _MSC_VER<1700 + if( s2==0x8000000000000000LL ){ s2 = 2*(u64)(0.5*rr[0]); } +#endif rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); if( e>0 ){ while( e>=100 ){ @@ -35185,29 +35992,29 @@ SQLITE_PRIVATE void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRou double rr[2]; rr[0] = r; rr[1] = 0.0; - if( rr[0]>1.84e+19 ){ - while( rr[0]>1.84e+119 ){ + if( rr[0]>9.223372036854774784e+18 ){ + while( rr[0]>9.223372036854774784e+118 ){ exp += 100; dekkerMul2(rr, 1.0e-100, -1.99918998026028836196e-117); } - while( rr[0]>1.84e+29 ){ + while( rr[0]>9.223372036854774784e+28 ){ exp += 10; dekkerMul2(rr, 1.0e-10, -3.6432197315497741579e-27); } - while( rr[0]>1.84e+19 ){ + while( rr[0]>9.223372036854774784e+18 ){ exp += 1; dekkerMul2(rr, 1.0e-01, -5.5511151231257827021e-18); } }else{ - while( rr[0]<1.84e-82 ){ + while( rr[0]<9.223372036854774784e-83 ){ exp -= 100; dekkerMul2(rr, 1.0e+100, -1.5902891109759918046e+83); } - while( rr[0]<1.84e+08 ){ + while( rr[0]<9.223372036854774784e+07 ){ exp -= 10; dekkerMul2(rr, 1.0e+10, 0.0); } - while( rr[0]<1.84e+18 ){ + while( rr[0]<9.22337203685477478e+17 ){ exp -= 1; dekkerMul2(rr, 1.0e+01, 0.0); } @@ -35225,7 +36032,7 @@ SQLITE_PRIVATE void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRou assert( p->n>0 ); assert( p->nzBuf) ); p->iDP = p->n + exp; - if( iRound<0 ){ + if( iRound<=0 ){ iRound = p->iDP - iRound; if( iRound==0 && p->zBuf[i+1]>='5' ){ iRound = 1; @@ -35523,121 +36330,32 @@ SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ ** this function assumes the single-byte case has already been handled. */ SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){ - u32 a,b; + u64 v64; + u8 n; - /* The 1-byte case. Overwhelmingly the most common. Handled inline - ** by the getVarin32() macro */ - a = *p; - /* a: p0 (unmasked) */ -#ifndef getVarint32 - if (!(a&0x80)) - { - /* Values between 0 and 127 */ - *v = a; - return 1; - } -#endif + /* Assume that the single-byte case has already been handled by + ** the getVarint32() macro */ + assert( (p[0] & 0x80)!=0 ); - /* The 2-byte case */ - p++; - b = *p; - /* b: p1 (unmasked) */ - if (!(b&0x80)) - { - /* Values between 128 and 16383 */ - a &= 0x7f; - a = a<<7; - *v = a | b; + if( (p[1] & 0x80)==0 ){ + /* This is the two-byte case */ + *v = ((p[0]&0x7f)<<7) | p[1]; return 2; } - - /* The 3-byte case */ - p++; - a = a<<14; - a |= *p; - /* a: p0<<14 | p2 (unmasked) */ - if (!(a&0x80)) - { - /* Values between 16384 and 2097151 */ - a &= (0x7f<<14)|(0x7f); - b &= 0x7f; - b = b<<7; - *v = a | b; + if( (p[2] & 0x80)==0 ){ + /* This is the three-byte case */ + *v = ((p[0]&0x7f)<<14) | ((p[1]&0x7f)<<7) | p[2]; return 3; } - - /* A 32-bit varint is used to store size information in btrees. - ** Objects are rarely larger than 2MiB limit of a 3-byte varint. - ** A 3-byte varint is sufficient, for example, to record the size - ** of a 1048569-byte BLOB or string. - ** - ** We only unroll the first 1-, 2-, and 3- byte cases. The very - ** rare larger cases can be handled by the slower 64-bit varint - ** routine. - */ -#if 1 - { - u64 v64; - u8 n; - - n = sqlite3GetVarint(p-2, &v64); - assert( n>3 && n<=9 ); - if( (v64 & SQLITE_MAX_U32)!=v64 ){ - *v = 0xffffffff; - }else{ - *v = (u32)v64; - } - return n; - } - -#else - /* For following code (kept for historical record only) shows an - ** unrolling for the 3- and 4-byte varint cases. This code is - ** slightly faster, but it is also larger and much harder to test. - */ - p++; - b = b<<14; - b |= *p; - /* b: p1<<14 | p3 (unmasked) */ - if (!(b&0x80)) - { - /* Values between 2097152 and 268435455 */ - b &= (0x7f<<14)|(0x7f); - a &= (0x7f<<14)|(0x7f); - a = a<<7; - *v = a | b; - return 4; - } - - p++; - a = a<<14; - a |= *p; - /* a: p0<<28 | p2<<14 | p4 (unmasked) */ - if (!(a&0x80)) - { - /* Values between 268435456 and 34359738367 */ - a &= SLOT_4_2_0; - b &= SLOT_4_2_0; - b = b<<7; - *v = a | b; - return 5; - } - - /* We can only reach this point when reading a corrupt database - ** file. In that case we are not in any hurry. Use the (relatively - ** slow) general-purpose sqlite3GetVarint() routine to extract the - ** value. */ - { - u64 v64; - u8 n; - - p -= 4; - n = sqlite3GetVarint(p, &v64); - assert( n>5 && n<=9 ); + /* four or more bytes */ + n = sqlite3GetVarint(p, &v64); + assert( n>3 && n<=9 ); + if( (v64 & SQLITE_MAX_U32)!=v64 ){ + *v = 0xffffffff; + }else{ *v = (u32)v64; - return n; } -#endif + return n; } /* @@ -36492,7 +37210,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"), /* 31 */ "NotExists" OpHelp("intkey=r[P3]"), /* 32 */ "Last" OpHelp(""), - /* 33 */ "IfSmaller" OpHelp(""), + /* 33 */ "IfSizeBetween" OpHelp(""), /* 34 */ "SorterSort" OpHelp(""), /* 35 */ "Sort" OpHelp(""), /* 36 */ "Rewind" OpHelp(""), @@ -36537,7 +37255,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 75 */ "Null" OpHelp("r[P2..P3]=NULL"), /* 76 */ "SoftNull" OpHelp("r[P1]=NULL"), /* 77 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), - /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"), + /* 78 */ "Variable" OpHelp("r[P2]=parameter(P1)"), /* 79 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), /* 80 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), /* 81 */ "SCopy" OpHelp("r[P2]=r[P1]"), @@ -36633,19 +37351,22 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 171 */ "VCreate" OpHelp(""), /* 172 */ "VDestroy" OpHelp(""), /* 173 */ "VOpen" OpHelp(""), - /* 174 */ "VInitIn" OpHelp("r[P2]=ValueList(P1,P3)"), - /* 175 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), - /* 176 */ "VRename" OpHelp(""), - /* 177 */ "Pagecount" OpHelp(""), - /* 178 */ "MaxPgcnt" OpHelp(""), - /* 179 */ "ClrSubtype" OpHelp("r[P1].subtype = 0"), - /* 180 */ "FilterAdd" OpHelp("filter(P1) += key(P3@P4)"), - /* 181 */ "Trace" OpHelp(""), - /* 182 */ "CursorHint" OpHelp(""), - /* 183 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"), - /* 184 */ "Noop" OpHelp(""), - /* 185 */ "Explain" OpHelp(""), - /* 186 */ "Abortable" OpHelp(""), + /* 174 */ "VCheck" OpHelp(""), + /* 175 */ "VInitIn" OpHelp("r[P2]=ValueList(P1,P3)"), + /* 176 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 177 */ "VRename" OpHelp(""), + /* 178 */ "Pagecount" OpHelp(""), + /* 179 */ "MaxPgcnt" OpHelp(""), + /* 180 */ "ClrSubtype" OpHelp("r[P1].subtype = 0"), + /* 181 */ "GetSubtype" OpHelp("r[P2] = r[P1].subtype"), + /* 182 */ "SetSubtype" OpHelp("r[P2].subtype = r[P1]"), + /* 183 */ "FilterAdd" OpHelp("filter(P1) += key(P3@P4)"), + /* 184 */ "Trace" OpHelp(""), + /* 185 */ "CursorHint" OpHelp(""), + /* 186 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"), + /* 187 */ "Noop" OpHelp(""), + /* 188 */ "Explain" OpHelp(""), + /* 189 */ "Abortable" OpHelp(""), }; return azName[i]; } @@ -38932,8 +39653,12 @@ static int unixLogErrorAtLine( ** available, the error message will often be an empty string. Not a ** huge problem. Incorrectly concluding that the GNU version is available ** could lead to a segfault though. + ** + ** Forum post 3f13857fa4062301 reports that the Android SDK may use + ** int-type return, depending on its version. */ -#if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU) +#if (defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)) \ + && !defined(ANDROID) && !defined(__ANDROID__) zErr = # endif strerror_r(iErrno, aErr, sizeof(aErr)-1); @@ -40787,9 +41512,6 @@ static int afpUnlock(sqlite3_file *id, int eFileLock) { unixInodeInfo *pInode; afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; int skipShared = 0; -#ifdef SQLITE_TEST - int h = pFile->h; -#endif assert( pFile ); OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock, @@ -40805,9 +41527,6 @@ static int afpUnlock(sqlite3_file *id, int eFileLock) { assert( pInode->nShared!=0 ); if( pFile->eFileLock>SHARED_LOCK ){ assert( pInode->eFileLock==pFile->eFileLock ); - SimulateIOErrorBenign(1); - SimulateIOError( h=(-1) ) - SimulateIOErrorBenign(0); #ifdef SQLITE_DEBUG /* When reducing a lock such that other processes can start @@ -40856,9 +41575,6 @@ static int afpUnlock(sqlite3_file *id, int eFileLock) { unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte; pInode->nShared--; if( pInode->nShared==0 ){ - SimulateIOErrorBenign(1); - SimulateIOError( h=(-1) ) - SimulateIOErrorBenign(0); if( !skipShared ){ rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0); } @@ -41700,7 +42416,13 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ #ifdef SQLITE_ENABLE_SETLK_TIMEOUT case SQLITE_FCNTL_LOCK_TIMEOUT: { int iOld = pFile->iBusyTimeout; +#if SQLITE_ENABLE_SETLK_TIMEOUT==1 pFile->iBusyTimeout = *(int*)pArg; +#elif SQLITE_ENABLE_SETLK_TIMEOUT==2 + pFile->iBusyTimeout = !!(*(int*)pArg); +#else +# error "SQLITE_ENABLE_SETLK_TIMEOUT must be set to 1 or 2" +#endif *(int*)pArg = iOld; return SQLITE_OK; } @@ -41953,6 +42675,25 @@ static int unixGetpagesize(void){ ** Either unixShmNode.pShmMutex must be held or unixShmNode.nRef==0 and ** unixMutexHeld() is true when reading or writing any other field ** in this structure. +** +** aLock[SQLITE_SHM_NLOCK]: +** This array records the various locks held by clients on each of the +** SQLITE_SHM_NLOCK slots. If the aLock[] entry is set to 0, then no +** locks are held by the process on this slot. If it is set to -1, then +** some client holds an EXCLUSIVE lock on the locking slot. If the aLock[] +** value is set to a positive value, then it is the number of shared +** locks currently held on the slot. +** +** aMutex[SQLITE_SHM_NLOCK]: +** Normally, when SQLITE_ENABLE_SETLK_TIMEOUT is not defined, mutex +** pShmMutex is used to protect the aLock[] array and the right to +** call fcntl() on unixShmNode.hShm to obtain or release locks. +** +** If SQLITE_ENABLE_SETLK_TIMEOUT is defined though, we use an array +** of mutexes - one for each locking slot. To read or write locking +** slot aLock[iSlot], the caller must hold the corresponding mutex +** aMutex[iSlot]. Similarly, to call fcntl() to obtain or release a +** lock corresponding to slot iSlot, mutex aMutex[iSlot] must be held. */ struct unixShmNode { unixInodeInfo *pInode; /* unixInodeInfo that owns this SHM node */ @@ -41966,10 +42707,11 @@ struct unixShmNode { char **apRegion; /* Array of mapped shared-memory regions */ int nRef; /* Number of unixShm objects pointing to this */ unixShm *pFirst; /* All unixShm objects pointing to this */ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + sqlite3_mutex *aMutex[SQLITE_SHM_NLOCK]; +#endif int aLock[SQLITE_SHM_NLOCK]; /* # shared locks on slot, -1==excl lock */ #ifdef SQLITE_DEBUG - u8 exclMask; /* Mask of exclusive locks held */ - u8 sharedMask; /* Mask of shared locks held */ u8 nextShmId; /* Next available unixShm.id value */ #endif }; @@ -42052,16 +42794,35 @@ static int unixShmSystemLock( struct flock f; /* The posix advisory locking structure */ int rc = SQLITE_OK; /* Result code form fcntl() */ - /* Access to the unixShmNode object is serialized by the caller */ pShmNode = pFile->pInode->pShmNode; - assert( pShmNode->nRef==0 || sqlite3_mutex_held(pShmNode->pShmMutex) ); - assert( pShmNode->nRef>0 || unixMutexHeld() ); + + /* Assert that the parameters are within expected range and that the + ** correct mutex or mutexes are held. */ + assert( pShmNode->nRef>=0 ); + assert( (ofst==UNIX_SHM_DMS && n==1) + || (ofst>=UNIX_SHM_BASE && ofst+n<=(UNIX_SHM_BASE+SQLITE_SHM_NLOCK)) + ); + if( ofst==UNIX_SHM_DMS ){ + assert( pShmNode->nRef>0 || unixMutexHeld() ); + assert( pShmNode->nRef==0 || sqlite3_mutex_held(pShmNode->pShmMutex) ); + }else{ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + int ii; + for(ii=ofst-UNIX_SHM_BASE; iiaMutex[ii]) ); + } +#else + assert( sqlite3_mutex_held(pShmNode->pShmMutex) ); + assert( pShmNode->nRef>0 ); +#endif + } /* Shared locks never span more than one byte */ assert( n==1 || lockType!=F_RDLCK ); /* Locks are within range */ assert( n>=1 && n<=SQLITE_SHM_NLOCK ); + assert( ofst>=UNIX_SHM_BASE && ofst<=(UNIX_SHM_DMS+SQLITE_SHM_NLOCK) ); if( pShmNode->hShm>=0 ){ int res; @@ -42072,7 +42833,7 @@ static int unixShmSystemLock( f.l_len = n; res = osSetPosixAdvisoryLock(pShmNode->hShm, &f, pFile); if( res==-1 ){ -#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +#if defined(SQLITE_ENABLE_SETLK_TIMEOUT) && SQLITE_ENABLE_SETLK_TIMEOUT==1 rc = (pFile->iBusyTimeout ? SQLITE_BUSY_TIMEOUT : SQLITE_BUSY); #else rc = SQLITE_BUSY; @@ -42080,39 +42841,28 @@ static int unixShmSystemLock( } } - /* Update the global lock state and do debug tracing */ + /* Do debug tracing */ #ifdef SQLITE_DEBUG - { u16 mask; OSTRACE(("SHM-LOCK ")); - mask = ofst>31 ? 0xffff : (1<<(ofst+n)) - (1<exclMask &= ~mask; - pShmNode->sharedMask &= ~mask; + OSTRACE(("unlock %d..%d ok\n", ofst, ofst+n-1)); }else if( lockType==F_RDLCK ){ - OSTRACE(("read-lock %d ok", ofst)); - pShmNode->exclMask &= ~mask; - pShmNode->sharedMask |= mask; + OSTRACE(("read-lock %d..%d ok\n", ofst, ofst+n-1)); }else{ assert( lockType==F_WRLCK ); - OSTRACE(("write-lock %d ok", ofst)); - pShmNode->exclMask |= mask; - pShmNode->sharedMask &= ~mask; + OSTRACE(("write-lock %d..%d ok\n", ofst, ofst+n-1)); } }else{ if( lockType==F_UNLCK ){ - OSTRACE(("unlock %d failed", ofst)); + OSTRACE(("unlock %d..%d failed\n", ofst, ofst+n-1)); }else if( lockType==F_RDLCK ){ - OSTRACE(("read-lock failed")); + OSTRACE(("read-lock %d..%d failed\n", ofst, ofst+n-1)); }else{ assert( lockType==F_WRLCK ); - OSTRACE(("write-lock %d failed", ofst)); + OSTRACE(("write-lock %d..%d failed\n", ofst, ofst+n-1)); } } - OSTRACE((" - afterwards %03x,%03x\n", - pShmNode->sharedMask, pShmNode->exclMask)); - } #endif return rc; @@ -42149,6 +42899,11 @@ static void unixShmPurge(unixFile *pFd){ int i; assert( p->pInode==pFd->pInode ); sqlite3_mutex_free(p->pShmMutex); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + for(i=0; iaMutex[i]); + } +#endif for(i=0; inRegion; i+=nShmPerMap){ if( p->hShm>=0 ){ osMunmap(p->apRegion[i], p->szRegion); @@ -42208,7 +42963,20 @@ static int unixLockSharedMemory(unixFile *pDbFd, unixShmNode *pShmNode){ pShmNode->isUnlocked = 1; rc = SQLITE_READONLY_CANTINIT; }else{ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* Do not use a blocking lock here. If the lock cannot be obtained + ** immediately, it means some other connection is truncating the + ** *-shm file. And after it has done so, it will not release its + ** lock, but only downgrade it to a shared lock. So no point in + ** blocking here. The call below to obtain the shared DMS lock may + ** use a blocking lock. */ + int iSaveTimeout = pDbFd->iBusyTimeout; + pDbFd->iBusyTimeout = 0; +#endif rc = unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + pDbFd->iBusyTimeout = iSaveTimeout; +#endif /* The first connection to attach must truncate the -shm file. We ** truncate to 3 bytes (an arbitrary small number, less than the ** -shm header size) rather than 0 as a system debugging aid, to @@ -42329,6 +43097,18 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ rc = SQLITE_NOMEM_BKPT; goto shm_open_err; } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + { + int ii; + for(ii=0; iiaMutex[ii] = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pShmNode->aMutex[ii]==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto shm_open_err; + } + } + } +#endif } if( pInode->bProcessLock==0 ){ @@ -42550,9 +43330,11 @@ static int unixShmMap( */ #ifdef SQLITE_DEBUG static int assertLockingArrayOk(unixShmNode *pShmNode){ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + return 1; +#else unixShm *pX; int aLock[SQLITE_SHM_NLOCK]; - assert( sqlite3_mutex_held(pShmNode->pShmMutex) ); memset(aLock, 0, sizeof(aLock)); for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ @@ -42570,13 +43352,14 @@ static int assertLockingArrayOk(unixShmNode *pShmNode){ assert( 0==memcmp(pShmNode->aLock, aLock, sizeof(aLock)) ); return (memcmp(pShmNode->aLock, aLock, sizeof(aLock))==0); +#endif } #endif /* ** Change the lock state for a shared-memory segment. ** -** Note that the relationship between SHAREd and EXCLUSIVE locks is a little +** Note that the relationship between SHARED and EXCLUSIVE locks is a little ** different here than in posix. In xShmLock(), one can go from unlocked ** to shared and back or from unlocked to exclusive and back. But one may ** not go from shared to exclusive or from exclusive to shared. @@ -42591,7 +43374,7 @@ static int unixShmLock( unixShm *p; /* The shared memory being locked */ unixShmNode *pShmNode; /* The underlying file iNode */ int rc = SQLITE_OK; /* Result code */ - u16 mask; /* Mask of locks to take or release */ + u16 mask = (1<<(ofst+n)) - (1<pShm; @@ -42626,88 +43409,151 @@ static int unixShmLock( ** It is not permitted to block on the RECOVER lock. */ #ifdef SQLITE_ENABLE_SETLK_TIMEOUT - assert( (flags & SQLITE_SHM_UNLOCK) || pDbFd->iBusyTimeout==0 || ( - (ofst!=2) /* not RECOVER */ - && (ofst!=1 || (p->exclMask|p->sharedMask)==0) - && (ofst!=0 || (p->exclMask|p->sharedMask)<3) - && (ofst<3 || (p->exclMask|p->sharedMask)<(1<exclMask|p->sharedMask); + assert( (flags & SQLITE_SHM_UNLOCK) || pDbFd->iBusyTimeout==0 || ( + (ofst!=2) /* not RECOVER */ + && (ofst!=1 || lockMask==0 || lockMask==2) + && (ofst!=0 || lockMask<3) + && (ofst<3 || lockMask<(1<1 || mask==(1<pShmMutex); - assert( assertLockingArrayOk(pShmNode) ); - if( flags & SQLITE_SHM_UNLOCK ){ - if( (p->exclMask|p->sharedMask) & mask ){ - int ii; - int bUnlock = 1; + /* Check if there is any work to do. There are three cases: + ** + ** a) An unlock operation where there are locks to unlock, + ** b) An shared lock where the requested lock is not already held + ** c) An exclusive lock where the requested lock is not already held + ** + ** The SQLite core never requests an exclusive lock that it already holds. + ** This is assert()ed below. + */ + assert( flags!=(SQLITE_SHM_EXCLUSIVE|SQLITE_SHM_LOCK) + || 0==(p->exclMask & mask) + ); + if( ((flags & SQLITE_SHM_UNLOCK) && ((p->exclMask|p->sharedMask) & mask)) + || (flags==(SQLITE_SHM_SHARED|SQLITE_SHM_LOCK) && 0==(p->sharedMask & mask)) + || (flags==(SQLITE_SHM_EXCLUSIVE|SQLITE_SHM_LOCK)) + ){ - for(ii=ofst; ii((p->sharedMask & (1<aMutex[iMutex]); + if( rc!=SQLITE_OK ) goto leave_shmnode_mutexes; + }else{ + sqlite3_mutex_enter(pShmNode->aMutex[iMutex]); } + } +#else + sqlite3_mutex_enter(pShmNode->pShmMutex); +#endif - if( bUnlock ){ - rc = unixShmSystemLock(pDbFd, F_UNLCK, ofst+UNIX_SHM_BASE, n); - if( rc==SQLITE_OK ){ - memset(&aLock[ofst], 0, sizeof(int)*n); + if( ALWAYS(rc==SQLITE_OK) ){ + if( flags & SQLITE_SHM_UNLOCK ){ + /* Case (a) - unlock. */ + int bUnlock = 1; + assert( (p->exclMask & p->sharedMask)==0 ); + assert( !(flags & SQLITE_SHM_EXCLUSIVE) || (p->exclMask & mask)==mask ); + assert( !(flags & SQLITE_SHM_SHARED) || (p->sharedMask & mask)==mask ); + + /* If this is a SHARED lock being unlocked, it is possible that other + ** clients within this process are holding the same SHARED lock. In + ** this case, set bUnlock to 0 so that the posix lock is not removed + ** from the file-descriptor below. */ + if( flags & SQLITE_SHM_SHARED ){ + assert( n==1 ); + assert( aLock[ofst]>=1 ); + if( aLock[ofst]>1 ){ + bUnlock = 0; + aLock[ofst]--; + p->sharedMask &= ~mask; + } } - }else if( ALWAYS(p->sharedMask & (1<1 ); - aLock[ofst]--; - } - /* Undo the local locks */ - if( rc==SQLITE_OK ){ - p->exclMask &= ~mask; - p->sharedMask &= ~mask; - } - } - }else if( flags & SQLITE_SHM_SHARED ){ - assert( n==1 ); - assert( (p->exclMask & (1<sharedMask & mask)==0 ){ - if( aLock[ofst]<0 ){ - rc = SQLITE_BUSY; - }else if( aLock[ofst]==0 ){ - rc = unixShmSystemLock(pDbFd, F_RDLCK, ofst+UNIX_SHM_BASE, n); - } + if( bUnlock ){ + rc = unixShmSystemLock(pDbFd, F_UNLCK, ofst+UNIX_SHM_BASE, n); + if( rc==SQLITE_OK ){ + memset(&aLock[ofst], 0, sizeof(int)*n); + p->sharedMask &= ~mask; + p->exclMask &= ~mask; + } + } + }else if( flags & SQLITE_SHM_SHARED ){ + /* Case (b) - a shared lock. */ - /* Get the local shared locks */ - if( rc==SQLITE_OK ){ - p->sharedMask |= mask; - aLock[ofst]++; - } - } - }else{ - /* Make sure no sibling connections hold locks that will block this - ** lock. If any do, return SQLITE_BUSY right away. */ - int ii; - for(ii=ofst; iisharedMask & mask)==0 ); - if( ALWAYS((p->exclMask & (1<sharedMask |= mask; + aLock[ofst]++; + } + }else{ + /* Case (c) - an exclusive lock. */ + int ii; + + assert( flags==(SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) ); assert( (p->sharedMask & mask)==0 ); - p->exclMask |= mask; + assert( (p->exclMask & mask)==0 ); + + /* Make sure no sibling connections hold locks that will block this + ** lock. If any do, return SQLITE_BUSY right away. */ for(ii=ofst; iiexclMask |= mask; + for(ii=ofst; ii=ofst; iMutex--){ + sqlite3_mutex_leave(pShmNode->aMutex[iMutex]); + } +#else + sqlite3_mutex_leave(pShmNode->pShmMutex); +#endif } - assert( assertLockingArrayOk(pShmNode) ); - sqlite3_mutex_leave(pShmNode->pShmMutex); + OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n", p->id, osGetpid(0), p->sharedMask, p->exclMask)); return rc; @@ -42957,11 +43803,16 @@ static int unixFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){ #if SQLITE_MAX_MMAP_SIZE>0 if( pFd->mmapSizeMax>0 ){ + /* Ensure that there is always at least a 256 byte buffer of addressable + ** memory following the returned page. If the database is corrupt, + ** SQLite may overread the page slightly (in practice only a few bytes, + ** but 256 is safe, round, number). */ + const int nEofBuffer = 256; if( pFd->pMapRegion==0 ){ int rc = unixMapfile(pFd, -1); if( rc!=SQLITE_OK ) return rc; } - if( pFd->mmapSize >= iOff+nAmt ){ + if( pFd->mmapSize >= (iOff+nAmt+nEofBuffer) ){ *pp = &((u8 *)pFd->pMapRegion)[iOff]; pFd->nFetchOut++; } @@ -43905,12 +44756,19 @@ static int unixOpen( rc = SQLITE_READONLY_DIRECTORY; }else if( errno!=EISDIR && isReadWrite ){ /* Failed to open the file for read/write access. Try read-only. */ + UnixUnusedFd *pReadonly = 0; flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); openFlags &= ~(O_RDWR|O_CREAT); flags |= SQLITE_OPEN_READONLY; openFlags |= O_RDONLY; isReadonly = 1; - fd = robust_open(zName, openFlags, openMode); + pReadonly = findReusableFd(zName, flags); + if( pReadonly ){ + fd = pReadonly->fd; + sqlite3_free(pReadonly); + }else{ + fd = robust_open(zName, openFlags, openMode); + } } } if( fd<0 ){ @@ -50314,6 +51172,11 @@ static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){ #if SQLITE_MAX_MMAP_SIZE>0 if( pFd->mmapSizeMax>0 ){ + /* Ensure that there is always at least a 256 byte buffer of addressable + ** memory following the returned page. If the database is corrupt, + ** SQLite may overread the page slightly (in practice only a few bytes, + ** but 256 is safe, round, number). */ + const int nEofBuffer = 256; if( pFd->pMapRegion==0 ){ int rc = winMapfile(pFd, -1); if( rc!=SQLITE_OK ){ @@ -50322,7 +51185,7 @@ static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){ return rc; } } - if( pFd->mmapSize >= iOff+nAmt ){ + if( pFd->mmapSize >= (iOff+nAmt+nEofBuffer) ){ assert( pFd->pMapRegion!=0 ); *pp = &((u8 *)pFd->pMapRegion)[iOff]; pFd->nFetchOut++; @@ -52801,6 +53664,14 @@ SQLITE_API unsigned char *sqlite3_serialize( pOut = 0; }else{ sz = sqlite3_column_int64(pStmt, 0)*szPage; + if( sz==0 ){ + sqlite3_reset(pStmt); + sqlite3_exec(db, "BEGIN IMMEDIATE; COMMIT;", 0, 0, 0); + rc = sqlite3_step(pStmt); + if( rc==SQLITE_ROW ){ + sz = sqlite3_column_int64(pStmt, 0)*szPage; + } + } if( piSize ) *piSize = sz; if( mFlags & SQLITE_SERIALIZE_NOCOPY ){ pOut = 0; @@ -56925,7 +57796,7 @@ struct Pager { char *zJournal; /* Name of the journal file */ int (*xBusyHandler)(void*); /* Function to call when busy */ void *pBusyHandlerArg; /* Context argument for xBusyHandler */ - int aStat[4]; /* Total cache hits, misses, writes, spills */ + u32 aStat[4]; /* Total cache hits, misses, writes, spills */ #ifdef SQLITE_TEST int nRead; /* Database pages read */ #endif @@ -57055,9 +57926,8 @@ SQLITE_PRIVATE int sqlite3PagerDirectReadOk(Pager *pPager, Pgno pgno){ #ifndef SQLITE_OMIT_WAL if( pPager->pWal ){ u32 iRead = 0; - int rc; - rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iRead); - return (rc==SQLITE_OK && iRead==0); + (void)sqlite3WalFindFrame(pPager->pWal, pgno, &iRead); + return iRead==0; } #endif return 1; @@ -57729,9 +58599,32 @@ static int writeJournalHdr(Pager *pPager){ memset(zHeader, 0, sizeof(aJournalMagic)+4); } + + /* The random check-hash initializer */ - sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit); + if( pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){ + sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit); + } +#ifdef SQLITE_DEBUG + else{ + /* The Pager.cksumInit variable is usually randomized above to protect + ** against there being existing records in the journal file. This is + ** dangerous, as following a crash they may be mistaken for records + ** written by the current transaction and rolled back into the database + ** file, causing corruption. The following assert statements verify + ** that this is not required in "journal_mode=memory" mode, as in that + ** case the journal file is always 0 bytes in size at this point. + ** It is advantageous to avoid the sqlite3_randomness() call if possible + ** as it takes the global PRNG mutex. */ + i64 sz = 0; + sqlite3OsFileSize(pPager->jfd, &sz); + assert( sz==0 ); + assert( pPager->journalOff==journalHdrOffset(pPager) ); + assert( sqlite3JournalIsInMemory(pPager->jfd) ); + } +#endif put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit); + /* The initial database size */ put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize); /* The assumed sector size for this process */ @@ -58375,6 +59268,9 @@ static int pager_end_transaction(Pager *pPager, int hasSuper, int bCommit){ return (rc==SQLITE_OK?rc2:rc); } +/* Forward reference */ +static int pager_playback(Pager *pPager, int isHot); + /* ** Execute a rollback if a transaction is active and unlock the ** database file. @@ -58403,6 +59299,21 @@ static void pagerUnlockAndRollback(Pager *pPager){ assert( pPager->eState==PAGER_READER ); pager_end_transaction(pPager, 0, 0); } + }else if( pPager->eState==PAGER_ERROR + && pPager->journalMode==PAGER_JOURNALMODE_MEMORY + && isOpen(pPager->jfd) + ){ + /* Special case for a ROLLBACK due to I/O error with an in-memory + ** journal: We have to rollback immediately, before the journal is + ** closed, because once it is closed, all content is forgotten. */ + int errCode = pPager->errCode; + u8 eLock = pPager->eLock; + pPager->eState = PAGER_OPEN; + pPager->errCode = SQLITE_OK; + pPager->eLock = EXCLUSIVE_LOCK; + pager_playback(pPager, 1); + pPager->errCode = errCode; + pPager->eLock = eLock; } pager_unlock(pPager); } @@ -61258,10 +62169,13 @@ SQLITE_PRIVATE int sqlite3PagerOpen( */ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char *zName){ Pager *pPager; + const char *p; while( zName[-1]!=0 || zName[-2]!=0 || zName[-3]!=0 || zName[-4]!=0 ){ zName--; } - pPager = *(Pager**)(zName - 4 - sizeof(Pager*)); + p = zName - 4 - sizeof(Pager*); + assert( EIGHT_BYTE_ALIGNMENT(p) ); + pPager = *(Pager**)p; return pPager->fd; } @@ -61895,8 +62809,20 @@ SQLITE_PRIVATE int sqlite3PagerGet( DbPage **ppPage, /* Write a pointer to the page here */ int flags /* PAGER_GET_XXX flags */ ){ - /* printf("PAGE %u\n", pgno); fflush(stdout); */ +#if 0 /* Trace page fetch by setting to 1 */ + int rc; + printf("PAGE %u\n", pgno); + fflush(stdout); + rc = pPager->xGet(pPager, pgno, ppPage, flags); + if( rc ){ + printf("PAGE %u failed with 0x%02x\n", pgno, rc); + fflush(stdout); + } + return rc; +#else + /* Normal, high-speed version of sqlite3PagerGet() */ return pPager->xGet(pPager, pgno, ppPage, flags); +#endif } /* @@ -62772,6 +63698,13 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne( rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0); if( rc==SQLITE_OK ){ rc = pager_write_pagelist(pPager, pList); + if( rc==SQLITE_OK && pPager->dbSize>pPager->dbFileSize ){ + char *pTmp = pPager->pTmpSpace; + int szPage = (int)pPager->pageSize; + memset(pTmp, 0, szPage); + rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, + ((i64)pPager->dbSize*pPager->pageSize)-szPage); + } if( rc==SQLITE_OK ){ rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); } @@ -63006,11 +63939,11 @@ SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){ a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize; a[4] = pPager->eState; a[5] = pPager->errCode; - a[6] = pPager->aStat[PAGER_STAT_HIT]; - a[7] = pPager->aStat[PAGER_STAT_MISS]; + a[6] = (int)pPager->aStat[PAGER_STAT_HIT] & 0x7fffffff; + a[7] = (int)pPager->aStat[PAGER_STAT_MISS] & 0x7fffffff; a[8] = 0; /* Used to be pPager->nOvfl */ a[9] = pPager->nRead; - a[10] = pPager->aStat[PAGER_STAT_WRITE]; + a[10] = (int)pPager->aStat[PAGER_STAT_WRITE] & 0x7fffffff; return a; } #endif @@ -63026,7 +63959,7 @@ SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){ ** reset parameter is non-zero, the cache hit or miss count is zeroed before ** returning. */ -SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, int *pnVal){ +SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, u64 *pnVal){ assert( eStat==SQLITE_DBSTATUS_CACHE_HIT || eStat==SQLITE_DBSTATUS_CACHE_MISS @@ -63262,7 +64195,7 @@ SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){ ** This will be either the rollback journal or the WAL file. */ SQLITE_PRIVATE sqlite3_file *sqlite3PagerJrnlFile(Pager *pPager){ -#if SQLITE_OMIT_WAL +#ifdef SQLITE_OMIT_WAL return pPager->jfd; #else return pPager->pWal ? sqlite3WalFile(pPager->pWal) : pPager->jfd; @@ -63583,7 +64516,7 @@ SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ } assert( state==pPager->eState ); } - }else if( eMode==PAGER_JOURNALMODE_OFF ){ + }else if( eMode==PAGER_JOURNALMODE_OFF || eMode==PAGER_JOURNALMODE_MEMORY ){ sqlite3OsClose(pPager->jfd); } } @@ -63966,7 +64899,7 @@ SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){ } #endif -#ifdef SQLITE_USE_SEH +#if defined(SQLITE_USE_SEH) && !defined(SQLITE_OMIT_WAL) SQLITE_PRIVATE int sqlite3PagerWalSystemErrno(Pager *pPager){ return sqlite3WalSystemErrno(pPager->pWal); } @@ -65982,6 +66915,19 @@ static int walIteratorInit(Wal *pWal, u32 nBackfill, WalIterator **pp){ } #ifdef SQLITE_ENABLE_SETLK_TIMEOUT + + +/* +** Attempt to enable blocking locks that block for nMs ms. Return 1 if +** blocking locks are successfully enabled, or 0 otherwise. +*/ +static int walEnableBlockingMs(Wal *pWal, int nMs){ + int rc = sqlite3OsFileControl( + pWal->pDbFd, SQLITE_FCNTL_LOCK_TIMEOUT, (void*)&nMs + ); + return (rc==SQLITE_OK); +} + /* ** Attempt to enable blocking locks. Blocking locks are enabled only if (a) ** they are supported by the VFS, and (b) the database handle is configured @@ -65993,11 +66939,7 @@ static int walEnableBlocking(Wal *pWal){ if( pWal->db ){ int tmout = pWal->db->busyTimeout; if( tmout ){ - int rc; - rc = sqlite3OsFileControl( - pWal->pDbFd, SQLITE_FCNTL_LOCK_TIMEOUT, (void*)&tmout - ); - res = (rc==SQLITE_OK); + res = walEnableBlockingMs(pWal, tmout); } } return res; @@ -66046,20 +66988,10 @@ SQLITE_PRIVATE void sqlite3WalDb(Wal *pWal, sqlite3 *db){ pWal->db = db; } -/* -** Take an exclusive WRITE lock. Blocking if so configured. -*/ -static int walLockWriter(Wal *pWal){ - int rc; - walEnableBlocking(pWal); - rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1); - walDisableBlocking(pWal); - return rc; -} #else # define walEnableBlocking(x) 0 # define walDisableBlocking(x) -# define walLockWriter(pWal) walLockExclusive((pWal), WAL_WRITE_LOCK, 1) +# define walEnableBlockingMs(pWal, ms) 0 # define sqlite3WalDb(pWal, db) #endif /* ifdef SQLITE_ENABLE_SETLK_TIMEOUT */ @@ -66660,7 +67592,9 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){ } }else{ int bWriteLock = pWal->writeLock; - if( bWriteLock || SQLITE_OK==(rc = walLockWriter(pWal)) ){ + if( bWriteLock + || SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) + ){ pWal->writeLock = 1; if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){ badHdr = walIndexTryHdr(pWal, pChanged); @@ -66668,7 +67602,8 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){ /* If the wal-index header is still malformed even while holding ** a WRITE lock, it can only mean that the header is corrupted and ** needs to be reconstructed. So run recovery to do exactly that. - */ + ** Disable blocking locks first. */ + walDisableBlocking(pWal); rc = walIndexRecover(pWal); *pChanged = 1; } @@ -66878,6 +67813,37 @@ static int walBeginShmUnreliable(Wal *pWal, int *pChanged){ return rc; } +/* +** The final argument passed to walTryBeginRead() is of type (int*). The +** caller should invoke walTryBeginRead as follows: +** +** int cnt = 0; +** do { +** rc = walTryBeginRead(..., &cnt); +** }while( rc==WAL_RETRY ); +** +** The final value of "cnt" is of no use to the caller. It is used by +** the implementation of walTryBeginRead() as follows: +** +** + Each time walTryBeginRead() is called, it is incremented. Once +** it reaches WAL_RETRY_PROTOCOL_LIMIT - indicating that walTryBeginRead() +** has many times been invoked and failed with WAL_RETRY - walTryBeginRead() +** returns SQLITE_PROTOCOL. +** +** + If SQLITE_ENABLE_SETLK_TIMEOUT is defined and walTryBeginRead() failed +** because a blocking lock timed out (SQLITE_BUSY_TIMEOUT from the OS +** layer), the WAL_RETRY_BLOCKED_MASK bit is set in "cnt". In this case +** the next invocation of walTryBeginRead() may omit an expected call to +** sqlite3OsSleep(). There has already been a delay when the previous call +** waited on a lock. +*/ +#define WAL_RETRY_PROTOCOL_LIMIT 100 +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +# define WAL_RETRY_BLOCKED_MASK 0x10000000 +#else +# define WAL_RETRY_BLOCKED_MASK 0 +#endif + /* ** Attempt to start a read transaction. This might fail due to a race or ** other transient condition. When that happens, it returns WAL_RETRY to @@ -66928,13 +67894,16 @@ static int walBeginShmUnreliable(Wal *pWal, int *pChanged){ ** so it takes care to hold an exclusive lock on the corresponding ** WAL_READ_LOCK() while changing values. */ -static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ +static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int *pCnt){ volatile WalCkptInfo *pInfo; /* Checkpoint information in wal-index */ u32 mxReadMark; /* Largest aReadMark[] value */ int mxI; /* Index of largest aReadMark[] value */ int i; /* Loop counter */ int rc = SQLITE_OK; /* Return code */ u32 mxFrame; /* Wal frame to lock to */ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + int nBlockTmout = 0; +#endif assert( pWal->readLock<0 ); /* Not currently locked */ @@ -66958,14 +67927,34 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ ** so that on the 100th (and last) RETRY we delay for 323 milliseconds. ** The total delay time before giving up is less than 10 seconds. */ - if( cnt>5 ){ + (*pCnt)++; + if( *pCnt>5 ){ int nDelay = 1; /* Pause time in microseconds */ - if( cnt>100 ){ + int cnt = (*pCnt & ~WAL_RETRY_BLOCKED_MASK); + if( cnt>WAL_RETRY_PROTOCOL_LIMIT ){ VVA_ONLY( pWal->lockError = 1; ) return SQLITE_PROTOCOL; } - if( cnt>=10 ) nDelay = (cnt-9)*(cnt-9)*39; + if( *pCnt>=10 ) nDelay = (cnt-9)*(cnt-9)*39; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* In SQLITE_ENABLE_SETLK_TIMEOUT builds, configure the file-descriptor + ** to block for locks for approximately nDelay us. This affects three + ** locks: (a) the shared lock taken on the DMS slot in os_unix.c (if + ** using os_unix.c), (b) the WRITER lock taken in walIndexReadHdr() if the + ** first attempted read fails, and (c) the shared lock taken on the + ** read-mark. + ** + ** If the previous call failed due to an SQLITE_BUSY_TIMEOUT error, + ** then sleep for the minimum of 1us. The previous call already provided + ** an extra delay while it was blocking on the lock. + */ + nBlockTmout = (nDelay+998) / 1000; + if( !useWal && walEnableBlockingMs(pWal, nBlockTmout) ){ + if( *pCnt & WAL_RETRY_BLOCKED_MASK ) nDelay = 1; + } +#endif sqlite3OsSleep(pWal->pVfs, nDelay); + *pCnt &= ~WAL_RETRY_BLOCKED_MASK; } if( !useWal ){ @@ -66973,6 +67962,13 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ if( pWal->bShmUnreliable==0 ){ rc = walIndexReadHdr(pWal, pChanged); } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + walDisableBlocking(pWal); + if( rc==SQLITE_BUSY_TIMEOUT ){ + rc = SQLITE_BUSY; + *pCnt |= WAL_RETRY_BLOCKED_MASK; + } +#endif if( rc==SQLITE_BUSY ){ /* If there is not a recovery running in another thread or process ** then convert BUSY errors to WAL_RETRY. If recovery is known to @@ -67087,9 +68083,19 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTINIT; } + (void)walEnableBlockingMs(pWal, nBlockTmout); rc = walLockShared(pWal, WAL_READ_LOCK(mxI)); + walDisableBlocking(pWal); if( rc ){ - return rc==SQLITE_BUSY ? WAL_RETRY : rc; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_BUSY_TIMEOUT ){ + *pCnt |= WAL_RETRY_BLOCKED_MASK; + } +#else + assert( rc!=SQLITE_BUSY_TIMEOUT ); +#endif + assert( (rc&0xFF)!=SQLITE_BUSY||rc==SQLITE_BUSY||rc==SQLITE_BUSY_TIMEOUT ); + return (rc&0xFF)==SQLITE_BUSY ? WAL_RETRY : rc; } /* Now that the read-lock has been obtained, check that neither the ** value in the aReadMark[] array or the contents of the wal-index @@ -67277,7 +68283,7 @@ static int walBeginReadTransaction(Wal *pWal, int *pChanged){ #endif do{ - rc = walTryBeginRead(pWal, pChanged, 0, ++cnt); + rc = walTryBeginRead(pWal, pChanged, 0, &cnt); }while( rc==WAL_RETRY ); testcase( (rc&0xff)==SQLITE_BUSY ); testcase( (rc&0xff)==SQLITE_IOERR ); @@ -67458,6 +68464,7 @@ static int walFindFrame( iRead = iFrame; } if( (nCollide--)==0 ){ + *piRead = 0; return SQLITE_CORRUPT_BKPT; } iKey = walNextHash(iKey); @@ -67761,7 +68768,7 @@ static int walRestartLog(Wal *pWal){ cnt = 0; do{ int notUsed; - rc = walTryBeginRead(pWal, ¬Used, 1, ++cnt); + rc = walTryBeginRead(pWal, ¬Used, 1, &cnt); }while( rc==WAL_RETRY ); assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */ testcase( (rc&0xff)==SQLITE_IOERR ); @@ -68182,10 +69189,9 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( if( pWal->readOnly ) return SQLITE_READONLY; WALTRACE(("WAL%p: checkpoint begins\n", pWal)); - /* Enable blocking locks, if possible. If blocking locks are successfully - ** enabled, set xBusy2=0 so that the busy-handler is never invoked. */ + /* Enable blocking locks, if possible. */ sqlite3WalDb(pWal, db); - (void)walEnableBlocking(pWal); + if( xBusy2 ) (void)walEnableBlocking(pWal); /* IMPLEMENTATION-OF: R-62028-47212 All calls obtain an exclusive ** "checkpoint" lock on the database file. @@ -68226,9 +69232,14 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( /* Read the wal-index header. */ SEH_TRY { if( rc==SQLITE_OK ){ + /* For a passive checkpoint, do not re-enable blocking locks after + ** reading the wal-index header. A passive checkpoint should not block + ** or invoke the busy handler. The only lock such a checkpoint may + ** attempt to obtain is a lock on a read-slot, and it should give up + ** immediately and do a partial checkpoint if it cannot obtain it. */ walDisableBlocking(pWal); rc = walIndexReadHdr(pWal, &isChanged); - (void)walEnableBlocking(pWal); + if( eMode2!=SQLITE_CHECKPOINT_PASSIVE ) (void)walEnableBlocking(pWal); if( isChanged && pWal->pDbFd->pMethods->iVersion>=3 ){ sqlite3OsUnfetch(pWal->pDbFd, 0, 0); } @@ -68565,7 +69576,7 @@ SQLITE_PRIVATE sqlite3_file *sqlite3WalFile(Wal *pWal){ ** 22 1 Min embedded payload fraction (must be 32) ** 23 1 Min leaf payload fraction (must be 32) ** 24 4 File change counter -** 28 4 Reserved for future use +** 28 4 The size of the database in pages ** 32 4 First freelist page ** 36 4 Number of freelist pages in the file ** 40 60 15 4-byte meta values passed to higher layers @@ -69196,7 +70207,7 @@ struct IntegrityCk { BtShared *pBt; /* The tree being checked out */ Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */ u8 *aPgRef; /* 1 bit per page in the db (see above) */ - Pgno nPage; /* Number of pages in the database */ + Pgno nCkPage; /* Pages in the database. 0 for partial check */ int mxErr; /* Stop accumulating errors when this reaches zero */ int nErr; /* Number of messages written to zErrMsg so far */ int rc; /* SQLITE_OK, SQLITE_NOMEM, or SQLITE_INTERRUPT */ @@ -69208,6 +70219,7 @@ struct IntegrityCk { StrAccum errMsg; /* Accumulate the error message text here */ u32 *heap; /* Min-heap used for analyzing cell coverage */ sqlite3 *db; /* Database connection running the check */ + i64 nRow; /* Number of rows visited in current tree */ }; /* @@ -69529,7 +70541,6 @@ SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){ /************** End of btmutex.c *********************************************/ /************** Begin file btree.c *******************************************/ - /* ** 2004 April 6 ** @@ -69683,8 +70694,47 @@ int corruptPageError(int lineno, MemPage *p){ # define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno) #endif +/* Default value for SHARED_LOCK_TRACE macro if shared-cache is disabled +** or if the lock tracking is disabled. This is always the value for +** release builds. +*/ +#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) /*no-op*/ + #ifndef SQLITE_OMIT_SHARED_CACHE +#if 0 +/* ^---- Change to 1 and recompile to enable shared-lock tracing +** for debugging purposes. +** +** Print all shared-cache locks on a BtShared. Debugging use only. +*/ +static void sharedLockTrace( + BtShared *pBt, + const char *zMsg, + int iRoot, + int eLockType +){ + BtLock *pLock; + if( iRoot>0 ){ + printf("%s-%p %u%s:", zMsg, pBt, iRoot, eLockType==READ_LOCK?"R":"W"); + }else{ + printf("%s-%p:", zMsg, pBt); + } + for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){ + printf(" %p/%u%s", pLock->pBtree, pLock->iTable, + pLock->eLock==READ_LOCK ? "R" : "W"); + while( pLock->pNext && pLock->pBtree==pLock->pNext->pBtree ){ + pLock = pLock->pNext; + printf(",%u%s", pLock->iTable, pLock->eLock==READ_LOCK ? "R" : "W"); + } + } + printf("\n"); + fflush(stdout); +} +#undef SHARED_LOCK_TRACE +#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) sharedLockTrace(X,MSG,TAB,TYPE) +#endif /* Shared-lock tracing */ + #ifdef SQLITE_DEBUG /* **** This function is only used as part of an assert() statement. *** @@ -69761,6 +70811,8 @@ static int hasSharedCacheTableLock( iTab = iRoot; } + SHARED_LOCK_TRACE(pBtree->pBt,"hasLock",iRoot,eLockType); + /* Search for the required lock. Either a write-lock on root-page iTab, a ** write-lock on the schema table, or (if the client is reading) a ** read-lock on iTab will suffice. Return 1 if any of these are found. */ @@ -69894,6 +70946,8 @@ static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){ BtLock *pLock = 0; BtLock *pIter; + SHARED_LOCK_TRACE(pBt,"setLock", iTable, eLock); + assert( sqlite3BtreeHoldsMutex(p) ); assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); assert( p->db!=0 ); @@ -69961,6 +71015,8 @@ static void clearAllSharedCacheTableLocks(Btree *p){ assert( p->sharable || 0==*ppIter ); assert( p->inTrans>0 ); + SHARED_LOCK_TRACE(pBt, "clearAllLocks", 0, 0); + while( *ppIter ){ BtLock *pLock = *ppIter; assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree ); @@ -69999,6 +71055,9 @@ static void clearAllSharedCacheTableLocks(Btree *p){ */ static void downgradeAllSharedCacheTableLocks(Btree *p){ BtShared *pBt = p->pBt; + + SHARED_LOCK_TRACE(pBt, "downgradeLocks", 0, 0); + if( pBt->pWriter==p ){ BtLock *pLock; pBt->pWriter = 0; @@ -74612,9 +75671,12 @@ static int accessPayload( if( pCur->aOverflow==0 || nOvfl*(int)sizeof(Pgno) > sqlite3MallocSize(pCur->aOverflow) ){ - Pgno *aNew = (Pgno*)sqlite3Realloc( - pCur->aOverflow, nOvfl*2*sizeof(Pgno) - ); + Pgno *aNew; + if( sqlite3FaultSim(413) ){ + aNew = 0; + }else{ + aNew = (Pgno*)sqlite3Realloc(pCur->aOverflow, nOvfl*2*sizeof(Pgno)); + } if( aNew==0 ){ return SQLITE_NOMEM_BKPT; }else{ @@ -74624,6 +75686,12 @@ static int accessPayload( memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno)); pCur->curFlags |= BTCF_ValidOvfl; }else{ + /* Sanity check the validity of the overflow page cache */ + assert( pCur->aOverflow[0]==nextPage + || pCur->aOverflow[0]==0 + || CORRUPT_DB ); + assert( pCur->aOverflow[0]!=0 || pCur->aOverflow[offset/ovflSize]==0 ); + /* If the overflow page-list cache has been allocated and the ** entry for the first required overflow page is valid, skip ** directly to it. @@ -74693,7 +75761,6 @@ static int accessPayload( assert( aWrite>=pBufStart ); /* due to (6) */ memcpy(aSave, aWrite, 4); rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1)); - if( rc && nextPage>pBt->nPage ) rc = SQLITE_CORRUPT_BKPT; nextPage = get4byte(aWrite); memcpy(aWrite, aSave, 4); }else @@ -75106,6 +76173,23 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ return rc; } +#ifdef SQLITE_DEBUG +/* The cursors is CURSOR_VALID and has BTCF_AtLast set. Verify that +** this flags are true for a consistent database. +** +** This routine is is called from within assert() statements only. +** It is an internal verification routine and does not appear in production +** builds. +*/ +static int cursorIsAtLastEntry(BtCursor *pCur){ + int ii; + for(ii=0; iiiPage; ii++){ + if( pCur->aiIdx[ii]!=pCur->apPage[ii]->nCell ) return 0; + } + return pCur->ix==pCur->pPage->nCell-1 && pCur->pPage->leaf!=0; +} +#endif + /* Move the cursor to the last entry in the table. Return SQLITE_OK ** on success. Set *pRes to 0 if the cursor actually points to something ** or set *pRes to 1 if the table is empty. @@ -75134,18 +76218,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ /* If the cursor already points to the last entry, this is a no-op. */ if( CURSOR_VALID==pCur->eState && (pCur->curFlags & BTCF_AtLast)!=0 ){ -#ifdef SQLITE_DEBUG - /* This block serves to assert() that the cursor really does point - ** to the last entry in the b-tree. */ - int ii; - for(ii=0; iiiPage; ii++){ - assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell ); - } - assert( pCur->ix==pCur->pPage->nCell-1 || CORRUPT_DB ); - testcase( pCur->ix!=pCur->pPage->nCell-1 ); - /* ^-- dbsqlfuzz b92b72e4de80b5140c30ab71372ca719b8feb618 */ - assert( pCur->pPage->leaf ); -#endif + assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB ); *pRes = 0; return SQLITE_OK; } @@ -75198,6 +76271,7 @@ SQLITE_PRIVATE int sqlite3BtreeTableMoveto( } if( pCur->info.nKeycurFlags & BTCF_AtLast)!=0 ){ + assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB ); *pRes = -1; return SQLITE_OK; } @@ -75664,10 +76738,10 @@ SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){ assert( cursorOwnsBtShared(pCur) ); assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); - /* Currently this interface is only called by the OP_IfSmaller - ** opcode, and it that case the cursor will always be valid and - ** will always point to a leaf node. */ - if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1; + /* Currently this interface is only called by the OP_IfSizeBetween + ** opcode and the OP_Count opcode with P3=1. In either case, + ** the cursor will always be valid unless the btree is empty. */ + if( pCur->eState!=CURSOR_VALID ) return 0; if( NEVER(pCur->pPage->leaf==0) ) return -1; n = pCur->pPage->nCell; @@ -75813,7 +76887,10 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){ } pPage = pCur->pPage; - assert( pPage->isInit ); + if( sqlite3FaultSim(412) ) pPage->isInit = 0; + if( !pPage->isInit ){ + return SQLITE_CORRUPT_BKPT; + } if( !pPage->leaf ){ int idx = pCur->ix; rc = moveToChild(pCur, get4byte(findCell(pPage, idx))); @@ -76486,7 +77563,10 @@ static int fillInCell( n = nHeader + nPayload; testcase( n==3 ); testcase( n==4 ); - if( n<4 ) n = 4; + if( n<4 ){ + n = 4; + pPayload[nPayload] = 0; + } *pnSize = n; assert( nSrc<=nPayload ); testcase( nSrcapEnd[] */ u8 *pSrcEnd; /* Current pCArray->apEnd[k] value */ + assert( nCell>0 ); assert( i(u32)usableSize) ){ j = 0; } + if( j>(u32)usableSize ){ j = 0; } memcpy(&pTmp[j], &aData[j], usableSize - j); for(k=0; ALWAYS(kixNx[k]<=i; k++){} @@ -77330,6 +78411,7 @@ static int editPage( return SQLITE_OK; editpage_fail: /* Unable to edit this page. Rebuild it from scratch instead. */ + if( nNew<1 ) return SQLITE_CORRUPT_BKPT; populateCellCache(pCArray, iNew, nNew); return rebuildPage(pCArray, iNew, nNew, pPg); } @@ -77790,7 +78872,7 @@ static int balance_nonroot( ** table-interior, index-leaf, or index-interior). */ if( pOld->aData[0]!=apOld[0]->aData[0] ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PAGE(pOld); goto balance_cleanup; } @@ -77814,7 +78896,7 @@ static int balance_nonroot( memset(&b.szCell[b.nCell], 0, sizeof(b.szCell[0])*(limit+pOld->nOverflow)); if( pOld->nOverflow>0 ){ if( NEVER(limitaiOvfl[0]) ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PAGE(pOld); goto balance_cleanup; } limit = pOld->aiOvfl[0]; @@ -78457,7 +79539,7 @@ static int anotherValidCursor(BtCursor *pCur){ && pOther->eState==CURSOR_VALID && pOther->pPage==pCur->pPage ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pCur->pPage); } } return SQLITE_OK; @@ -78517,7 +79599,7 @@ static int balance(BtCursor *pCur){ /* The page being written is not a root page, and there is currently ** more than one reference to it. This only happens if the page is one ** of its own ancestor pages. Corruption. */ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PAGE(pPage); }else{ MemPage * const pParent = pCur->apPage[iPage-1]; int const iIdx = pCur->aiIdx[iPage-1]; @@ -78681,7 +79763,7 @@ static SQLITE_NOINLINE int btreeOverwriteOverflowCell( rc = btreeGetPage(pBt, ovflPgno, &pPage, 0); if( rc ) return rc; if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 || pPage->isInit ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PAGE(pPage); }else{ if( iOffset+ovflPageSize<(u32)nTotal ){ ovflPgno = get4byte(pPage->aData); @@ -78709,7 +79791,7 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){ if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd || pCur->info.pPayload < pPage->aData + pPage->cellOffset ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } if( pCur->info.nLocal==nTotal ){ /* The entire cell is local */ @@ -78790,7 +79872,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( ** Which can only happen if the SQLITE_NoSchemaError flag was set when ** the schema was loaded. This cannot be asserted though, as a user might ** set the flag, load the schema, and then unset the flag. */ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot); } } @@ -78913,7 +79995,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( if( pPage->nFree<0 ){ if( NEVER(pCur->eState>CURSOR_INVALID) ){ /* ^^^^^--- due to the moveToRoot() call above */ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PAGE(pPage); }else{ rc = btreeComputeFreeSpace(pPage); } @@ -78930,7 +80012,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( if( flags & BTREE_PREFORMAT ){ rc = SQLITE_OK; szNew = p->pBt->nPreformatSize; - if( szNew<4 ) szNew = 4; + if( szNew<4 ){ + szNew = 4; + newCell[3] = 0; + } if( ISAUTOVACUUM(p->pBt) && szNew>pPage->maxLocal ){ CellInfo info; pPage->xParseCell(pPage, newCell, &info); @@ -78952,7 +80037,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( CellInfo info; assert( idx>=0 ); if( idx>=pPage->nCell ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } rc = sqlite3PagerWrite(pPage->pDbPage); if( rc ){ @@ -78979,10 +80064,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( ** necessary to add the PTRMAP_OVERFLOW1 pointer-map entry. */ assert( rc==SQLITE_OK ); /* clearCell never fails when nLocal==nPayload */ if( oldCell < pPage->aData+pPage->hdrOffset+10 ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } if( oldCell+szNew > pPage->aDataEnd ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } memcpy(oldCell, newCell, szNew); return SQLITE_OK; @@ -78992,7 +80077,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( }else if( loc<0 && pPage->nCell>0 ){ assert( pPage->leaf ); idx = ++pCur->ix; - pCur->curFlags &= ~BTCF_ValidNKey; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); }else{ assert( pPage->leaf ); } @@ -79022,7 +80107,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( */ if( pPage->nOverflow ){ assert( rc==SQLITE_OK ); - pCur->curFlags &= ~(BTCF_ValidNKey); + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); rc = balance(pCur); /* Must make sure nOverflow is reset to zero even if the balance() @@ -79084,7 +80169,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 nIn = pSrc->info.nLocal; aIn = pSrc->info.pPayload; if( aIn+nIn>pSrc->pPage->aDataEnd ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pSrc->pPage); } nRem = pSrc->info.nPayload; if( nIn==nRem && nInpPage->maxLocal ){ @@ -79109,7 +80194,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 if( nRem>nIn ){ if( aIn+nIn+4>pSrc->pPage->aDataEnd ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pSrc->pPage); } ovflIn = get4byte(&pSrc->info.pPayload[nIn]); } @@ -79205,7 +80290,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ assert( rc!=SQLITE_OK || CORRUPT_DB || pCur->eState==CURSOR_VALID ); if( rc || pCur->eState!=CURSOR_VALID ) return rc; }else{ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot); } } assert( pCur->eState==CURSOR_VALID ); @@ -79214,14 +80299,14 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ iCellIdx = pCur->ix; pPage = pCur->pPage; if( pPage->nCell<=iCellIdx ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } pCell = findCell(pPage, iCellIdx); if( pPage->nFree<0 && btreeComputeFreeSpace(pPage) ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } if( pCell<&pPage->aCellIdx[pPage->nCell] ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PAGE(pPage); } /* If the BTREE_SAVEPOSITION bit is on, then the cursor position must @@ -79312,7 +80397,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ n = pCur->pPage->pgno; } pCell = findCell(pLeaf, pLeaf->nCell-1); - if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_BKPT; + if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_PAGE(pLeaf); nCell = pLeaf->xCellSize(pLeaf, pCell); assert( MX_CELL_SIZE(pBt) >= nCell ); pTmp = pBt->pTmpSpace; @@ -79428,7 +80513,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){ */ sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot); if( pgnoRoot>btreePagecount(pBt) ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pgnoRoot); } pgnoRoot++; @@ -79476,7 +80561,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){ } rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage); if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(pgnoRoot); } if( rc!=SQLITE_OK ){ releasePage(pRoot); @@ -79566,14 +80651,14 @@ static int clearDatabasePage( assert( sqlite3_mutex_held(pBt->mutex) ); if( pgno>btreePagecount(pBt) ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pgno); } rc = getAndInitPage(pBt, pgno, &pPage, 0); if( rc ) return rc; if( (pBt->openFlags & BTREE_SINGLE)==0 && sqlite3PagerPageRefcount(pPage->pDbPage) != (1 + (pgno==1)) ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PAGE(pPage); goto cleardatabasepage_out; } hdr = pPage->hdrOffset; @@ -79677,7 +80762,7 @@ static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){ assert( p->inTrans==TRANS_WRITE ); assert( iTable>=2 ); if( iTable>btreePagecount(pBt) ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(iTable); } rc = sqlite3BtreeClearTable(p, iTable, 0); @@ -79989,7 +81074,8 @@ static void checkAppendMsg( ** corresponds to page iPg is already set. */ static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){ - assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 ); + assert( pCheck->aPgRef!=0 ); + assert( iPg<=pCheck->nCkPage && sizeof(pCheck->aPgRef[0])==1 ); return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07))); } @@ -79997,7 +81083,8 @@ static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){ ** Set the bit in the IntegrityCk.aPgRef[] array that corresponds to page iPg. */ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ - assert( iPg<=pCheck->nPage && sizeof(pCheck->aPgRef[0])==1 ); + assert( pCheck->aPgRef!=0 ); + assert( iPg<=pCheck->nCkPage && sizeof(pCheck->aPgRef[0])==1 ); pCheck->aPgRef[iPg/8] |= (1 << (iPg & 0x07)); } @@ -80011,7 +81098,7 @@ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ ** Also check that the page number is in bounds. */ static int checkRef(IntegrityCk *pCheck, Pgno iPage){ - if( iPage>pCheck->nPage || iPage==0 ){ + if( iPage>pCheck->nCkPage || iPage==0 ){ checkAppendMsg(pCheck, "invalid page number %u", iPage); return 1; } @@ -80238,6 +81325,7 @@ static int checkTreePage( if( (rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0 ){ checkAppendMsg(pCheck, "unable to get the page. error code=%d", rc); + if( rc==SQLITE_IOERR_NOMEM ) pCheck->rc = SQLITE_NOMEM; goto end_of_check; } @@ -80268,6 +81356,9 @@ static int checkTreePage( ** number of cells on the page. */ nCell = get2byte(&data[hdr+3]); assert( pPage->nCell==nCell ); + if( pPage->leaf || pPage->intKey==0 ){ + pCheck->nRow += nCell; + } /* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page ** immediately follows the b-tree page header. */ @@ -80379,6 +81470,7 @@ static int checkTreePage( btreeHeapInsert(heap, (pc<<16)|(pc+size-1)); } } + assert( heap!=0 ); /* Add the freeblocks to the min-heap ** ** EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header @@ -80478,6 +81570,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( sqlite3 *db, /* Database connection that is running the check */ Btree *p, /* The btree to be checked */ Pgno *aRoot, /* An array of root pages numbers for individual trees */ + Mem *aCnt, /* Memory cells to write counts for each tree to */ int nRoot, /* Number of entries in aRoot[] */ int mxErr, /* Stop reporting errors after this many */ int *pnErr, /* OUT: Write number of errors seen to this variable */ @@ -80491,7 +81584,9 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( int bPartial = 0; /* True if not checking all btrees */ int bCkFreelist = 1; /* True to scan the freelist */ VVA_ONLY( int nRef ); + assert( nRoot>0 ); + assert( aCnt!=0 ); /* aRoot[0]==0 means this is a partial check */ if( aRoot[0]==0 ){ @@ -80508,15 +81603,15 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( sCheck.db = db; sCheck.pBt = pBt; sCheck.pPager = pBt->pPager; - sCheck.nPage = btreePagecount(sCheck.pBt); + sCheck.nCkPage = btreePagecount(sCheck.pBt); sCheck.mxErr = mxErr; sqlite3StrAccumInit(&sCheck.errMsg, 0, zErr, sizeof(zErr), SQLITE_MAX_LENGTH); sCheck.errMsg.printfFlags = SQLITE_PRINTF_INTERNAL; - if( sCheck.nPage==0 ){ + if( sCheck.nCkPage==0 ){ goto integrity_ck_cleanup; } - sCheck.aPgRef = sqlite3MallocZero((sCheck.nPage / 8)+ 1); + sCheck.aPgRef = sqlite3MallocZero((sCheck.nCkPage / 8)+ 1); if( !sCheck.aPgRef ){ checkOom(&sCheck); goto integrity_ck_cleanup; @@ -80528,7 +81623,7 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( } i = PENDING_BYTE_PAGE(pBt); - if( i<=sCheck.nPage ) setPageReferenced(&sCheck, i); + if( i<=sCheck.nCkPage ) setPageReferenced(&sCheck, i); /* Check the integrity of the freelist */ @@ -80564,22 +81659,25 @@ SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( testcase( pBt->db->flags & SQLITE_CellSizeCk ); pBt->db->flags &= ~(u64)SQLITE_CellSizeCk; for(i=0; (int)iautoVacuum && aRoot[i]>1 && !bPartial ){ - checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0); - } + if( pBt->autoVacuum && aRoot[i]>1 && !bPartial ){ + checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0); + } #endif - sCheck.v0 = aRoot[i]; - checkTreePage(&sCheck, aRoot[i], ¬Used, LARGEST_INT64); + sCheck.v0 = aRoot[i]; + checkTreePage(&sCheck, aRoot[i], ¬Used, LARGEST_INT64); + } + sqlite3MemSetArrayInt64(aCnt, i, sCheck.nRow); } pBt->db->flags = savedDbFlags; /* Make sure every page in the file is referenced */ if( !bPartial ){ - for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){ + for(i=1; i<=sCheck.nCkPage && sCheck.mxErr; i++){ #ifdef SQLITE_OMIT_AUTOVACUUM if( getPageReferenced(&sCheck, i)==0 ){ checkAppendMsg(&sCheck, "Page %u: never used", i); @@ -82020,7 +83118,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemZeroTerminateIfAble(Mem *pMem){ pMem->flags |= MEM_Term; return; } - if( pMem->xDel==(void(*)(void*))sqlite3RCStrUnref ){ + if( pMem->xDel==sqlite3RCStrUnref ){ /* Blindly assume that all RCStr objects are zero-terminated */ pMem->flags |= MEM_Term; return; @@ -82627,6 +83725,13 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ } } +/* +** Set the iIdx'th entry of array aMem[] to contain integer value val. +*/ +SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val){ + sqlite3VdbeMemSetInt64(&aMem[iIdx], val); +} + /* A no-op destructor */ SQLITE_PRIVATE void sqlite3NoopDestructor(void *p){ UNUSED_PARAMETER(p); } @@ -83199,7 +84304,7 @@ static int valueFromFunction( #endif assert( pFunc ); if( (pFunc->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0 - || (pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL) + || (pFunc->funcFlags & (SQLITE_FUNC_NEEDCOLL|SQLITE_FUNC_RUNONLY))!=0 ){ return SQLITE_OK; } @@ -83315,14 +84420,20 @@ static int valueFromExpr( } /* Handle negative integers in a single step. This is needed in the - ** case when the value is -9223372036854775808. - */ - if( op==TK_UMINUS - && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){ - pExpr = pExpr->pLeft; - op = pExpr->op; - negInt = -1; - zNeg = "-"; + ** case when the value is -9223372036854775808. Except - do not do this + ** for hexadecimal literals. */ + if( op==TK_UMINUS ){ + Expr *pLeft = pExpr->pLeft; + if( (pLeft->op==TK_INTEGER || pLeft->op==TK_FLOAT) ){ + if( ExprHasProperty(pLeft, EP_IntValue) + || pLeft->u.zToken[0]!='0' || (pLeft->u.zToken[1] & ~0x20)!='X' + ){ + pExpr = pLeft; + op = pExpr->op; + negInt = -1; + zNeg = "-"; + } + } } if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){ @@ -83331,12 +84442,26 @@ static int valueFromExpr( if( ExprHasProperty(pExpr, EP_IntValue) ){ sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt); }else{ - zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken); - if( zVal==0 ) goto no_mem; - sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC); + i64 iVal; + if( op==TK_INTEGER && 0==sqlite3DecOrHexToI64(pExpr->u.zToken, &iVal) ){ + sqlite3VdbeMemSetInt64(pVal, iVal*negInt); + }else{ + zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken); + if( zVal==0 ) goto no_mem; + sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC); + } } - if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_BLOB ){ - sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8); + if( affinity==SQLITE_AFF_BLOB ){ + if( op==TK_FLOAT ){ + assert( pVal && pVal->z && pVal->flags==(MEM_Str|MEM_Term) ); + sqlite3AtoF(pVal->z, &pVal->u.r, pVal->n, SQLITE_UTF8); + pVal->flags = MEM_Real; + }else if( op==TK_INTEGER ){ + /* This case is required by -9223372036854775808 and other strings + ** that look like integers but cannot be handled by the + ** sqlite3DecOrHexToI64() call above. */ + sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8); + } }else{ sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8); } @@ -83400,6 +84525,7 @@ static int valueFromExpr( if( pVal ){ pVal->flags = MEM_Int; pVal->u.i = pExpr->u.zToken[4]==0; + sqlite3ValueApplyAffinity(pVal, affinity, enc); } } @@ -83605,17 +84731,17 @@ SQLITE_PRIVATE int sqlite3Stat4Column( sqlite3_value **ppVal /* OUT: Extracted value */ ){ u32 t = 0; /* a column type code */ - int nHdr; /* Size of the header in the record */ - int iHdr; /* Next unread header byte */ - int iField; /* Next unread data byte */ - int szField = 0; /* Size of the current data field */ + u32 nHdr; /* Size of the header in the record */ + u32 iHdr; /* Next unread header byte */ + i64 iField; /* Next unread data byte */ + u32 szField = 0; /* Size of the current data field */ int i; /* Column index */ u8 *a = (u8*)pRec; /* Typecast byte array */ Mem *pMem = *ppVal; /* Write result into this Mem object */ assert( iCol>0 ); iHdr = getVarint32(a, nHdr); - if( nHdr>nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT; + if( nHdr>(u32)nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT; iField = nHdr; for(i=0; i<=iCol; i++){ iHdr += getVarint32(&a[iHdr], t); @@ -83922,10 +85048,11 @@ static int growOpArray(Vdbe *v, int nOp){ ** sqlite3CantopenError(lineno) */ static void test_addop_breakpoint(int pc, Op *pOp){ - static int n = 0; + static u64 n = 0; (void)pc; (void)pOp; n++; + if( n==LARGEST_UINT64 ) abort(); /* so that n is used, preventing a warning */ } #endif @@ -84649,6 +85776,15 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ assert( aLabel!=0 ); /* True because of tag-20230419-1 */ pOp->p2 = aLabel[ADDR(pOp->p2)]; } + + /* OPFLG_JUMP opcodes never have P2==0, though OPFLG_JUMP0 opcodes + ** might */ + assert( pOp->p2>0 + || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP0)!=0 ); + + /* Jumps never go off the end of the bytecode array */ + assert( pOp->p2nOp + || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)==0 ); break; } } @@ -84713,6 +85849,10 @@ SQLITE_PRIVATE void sqlite3VdbeNoJumpsOutsideSubrtn( int iDest = pOp->p2; /* Jump destination */ if( iDest==0 ) continue; if( pOp->opcode==OP_Gosub ) continue; + if( pOp->p3==20230325 && pOp->opcode==OP_NotNull ){ + /* This is a deliberately taken illegal branch. tag-20230325-2 */ + continue; + } if( iDest<0 ){ int j = ADDR(iDest); assert( j>=0 ); @@ -85106,6 +86246,10 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){ if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4); break; } + case P4_TABLEREF: { + if( db->pnBytesFreed==0 ) sqlite3DeleteTable(db, (Table*)p4); + break; + } } } @@ -85233,7 +86377,7 @@ static void SQLITE_NOINLINE vdbeChangeP4Full( int n ){ if( pOp->p4type ){ - freeP4(p->db, pOp->p4type, pOp->p4.p); + assert( pOp->p4type > P4_FREE_IF_LE ); pOp->p4type = 0; pOp->p4.p = 0; } @@ -87048,7 +88192,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ /* Check for immediate foreign key violations. */ if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ - sqlite3VdbeCheckFk(p, 0); + (void)sqlite3VdbeCheckFk(p, 0); } /* If the auto-commit flag is set and this is the only active writer @@ -87762,6 +88906,23 @@ static void serialGet( pMem->flags = IsNaN(x) ? MEM_Null : MEM_Real; } } +static int serialGet7( + const unsigned char *buf, /* Buffer to deserialize from */ + Mem *pMem /* Memory cell to write value into */ +){ + u64 x = FOUR_BYTE_UINT(buf); + u32 y = FOUR_BYTE_UINT(buf+4); + x = (x<<32) + y; + assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 ); + swapMixedEndianFloat(x); + memcpy(&pMem->u.r, &x, sizeof(x)); + if( IsNaN(x) ){ + pMem->flags = MEM_Null; + return 1; + } + pMem->flags = MEM_Real; + return 0; +} SQLITE_PRIVATE void sqlite3VdbeSerialGet( const unsigned char *buf, /* Buffer to deserialize from */ u32 serial_type, /* Serial type to deserialize */ @@ -88172,32 +89333,44 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem return n1 - n2; } +/* The following two functions are used only within testcase() to prove +** test coverage. These functions do no exist for production builds. +** We must use separate SQLITE_NOINLINE functions here, since otherwise +** optimizer code movement causes gcov to become very confused. +*/ +#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_DEBUG) +static int SQLITE_NOINLINE doubleLt(double a, double b){ return a8 ){ + if( sqlite3IsNaN(r) ){ + /* SQLite considers NaN to be a NULL. And all integer values are greater + ** than NULL */ + return 1; + } + if( sqlite3Config.bUseLongDouble ){ LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i; testcase( xr ); testcase( x==r ); - if( xr ) return +1; /*NO_TEST*/ /* work around bugs in gcov */ - return 0; /*NO_TEST*/ /* work around bugs in gcov */ + return (xr); }else{ i64 y; - double s; if( r<-9223372036854775808.0 ) return +1; if( r>=9223372036854775808.0 ) return -1; y = (i64)r; if( iy ) return +1; - s = (double)i; - if( sr ) return +1; - return 0; + testcase( doubleLt(((double)i),r) ); + testcase( doubleLt(r,((double)i)) ); + testcase( doubleEq(r,((double)i)) ); + return (((double)i)r); } } @@ -88427,7 +89600,7 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip( }else if( serial_type==0 ){ rc = -1; }else if( serial_type==7 ){ - sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); + serialGet7(&aKey1[d1], &mem1); rc = -sqlite3IntFloatCompare(pRhs->u.i, mem1.u.r); }else{ i64 lhs = vdbeRecordDecodeInt(serial_type, &aKey1[d1]); @@ -88452,14 +89625,18 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip( }else if( serial_type==0 ){ rc = -1; }else{ - sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); if( serial_type==7 ){ - if( mem1.u.ru.r ){ + if( serialGet7(&aKey1[d1], &mem1) ){ + rc = -1; /* mem1 is a NaN */ + }else if( mem1.u.ru.r ){ rc = -1; }else if( mem1.u.r>pRhs->u.r ){ rc = +1; + }else{ + assert( rc==0 ); } }else{ + sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); rc = sqlite3IntFloatCompare(mem1.u.i, pRhs->u.r); } } @@ -88529,7 +89706,14 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip( /* RHS is null */ else{ serial_type = aKey1[idx1]; - rc = (serial_type!=0 && serial_type!=10); + if( serial_type==0 + || serial_type==10 + || (serial_type==7 && serialGet7(&aKey1[d1], &mem1)!=0) + ){ + assert( rc==0 ); + }else{ + rc = 1; + } } if( rc!=0 ){ @@ -89342,7 +90526,15 @@ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ int rc = SQLITE_OK; Vdbe *p = (Vdbe*)pStmt; #if SQLITE_THREADSAFE - sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex; + sqlite3_mutex *mutex; +#endif +#ifdef SQLITE_ENABLE_API_ARMOR + if( pStmt==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif +#if SQLITE_THREADSAFE + mutex = p->db->mutex; #endif sqlite3_mutex_enter(mutex); for(i=0; inVar; i++){ @@ -89565,7 +90757,7 @@ SQLITE_API void sqlite3_value_free(sqlite3_value *pOld){ ** is too big or if an OOM occurs. ** ** The invokeValueDestructor(P,X) routine invokes destructor function X() -** on value P is not going to be used and need to be destroyed. +** on value P if P is not going to be used and need to be destroyed. */ static void setResultStrOrError( sqlite3_context *pCtx, /* Function context */ @@ -89595,7 +90787,7 @@ static void setResultStrOrError( static int invokeValueDestructor( const void *p, /* Value to destroy */ void (*xDel)(void*), /* The destructor */ - sqlite3_context *pCtx /* Set a SQLITE_TOOBIG error if no NULL */ + sqlite3_context *pCtx /* Set a SQLITE_TOOBIG error if not NULL */ ){ assert( xDel!=SQLITE_DYNAMIC ); if( xDel==0 ){ @@ -89605,7 +90797,14 @@ static int invokeValueDestructor( }else{ xDel((void*)p); } +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx!=0 ){ + sqlite3_result_error_toobig(pCtx); + } +#else + assert( pCtx!=0 ); sqlite3_result_error_toobig(pCtx); +#endif return SQLITE_TOOBIG; } SQLITE_API void sqlite3_result_blob( @@ -89614,6 +90813,12 @@ SQLITE_API void sqlite3_result_blob( int n, void (*xDel)(void *) ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 || n<0 ){ + invokeValueDestructor(z, xDel, pCtx); + return; + } +#endif assert( n>=0 ); assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); setResultStrOrError(pCtx, z, n, 0, xDel); @@ -89624,8 +90829,14 @@ SQLITE_API void sqlite3_result_blob64( sqlite3_uint64 n, void (*xDel)(void *) ){ - assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); assert( xDel!=SQLITE_DYNAMIC ); +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(z, xDel, 0); + return; + } +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); if( n>0x7fffffff ){ (void)invokeValueDestructor(z, xDel, pCtx); }else{ @@ -89633,30 +90844,48 @@ SQLITE_API void sqlite3_result_blob64( } } SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetDouble(pCtx->pOut, rVal); } SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); pCtx->isError = SQLITE_ERROR; sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); } #ifndef SQLITE_OMIT_UTF16 SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); pCtx->isError = SQLITE_ERROR; sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); } #endif SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal); } SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetInt64(pCtx->pOut, iVal); } SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetNull(pCtx->pOut); } @@ -89666,14 +90895,37 @@ SQLITE_API void sqlite3_result_pointer( const char *zPType, void (*xDestructor)(void*) ){ - Mem *pOut = pCtx->pOut; + Mem *pOut; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(pPtr, xDestructor, 0); + return; + } +#endif + pOut = pCtx->pOut; assert( sqlite3_mutex_held(pOut->db->mutex) ); sqlite3VdbeMemRelease(pOut); pOut->flags = MEM_Null; sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor); } SQLITE_API void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){ - Mem *pOut = pCtx->pOut; + Mem *pOut; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif +#if defined(SQLITE_STRICT_SUBTYPE) && SQLITE_STRICT_SUBTYPE+0!=0 + if( pCtx->pFunc!=0 + && (pCtx->pFunc->funcFlags & SQLITE_RESULT_SUBTYPE)==0 + ){ + char zErr[200]; + sqlite3_snprintf(sizeof(zErr), zErr, + "misuse of sqlite3_result_subtype() by %s()", + pCtx->pFunc->zName); + sqlite3_result_error(pCtx, zErr, -1); + return; + } +#endif /* SQLITE_STRICT_SUBTYPE */ + pOut = pCtx->pOut; assert( sqlite3_mutex_held(pOut->db->mutex) ); pOut->eSubtype = eSubtype & 0xff; pOut->flags |= MEM_Subtype; @@ -89684,6 +90936,12 @@ SQLITE_API void sqlite3_result_text( int n, void (*xDel)(void *) ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(z, xDel, 0); + return; + } +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); } @@ -89694,6 +90952,12 @@ SQLITE_API void sqlite3_result_text64( void (*xDel)(void *), unsigned char enc ){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(z, xDel, 0); + return; + } +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); assert( xDel!=SQLITE_DYNAMIC ); if( enc!=SQLITE_UTF8 ){ @@ -89737,7 +91001,16 @@ SQLITE_API void sqlite3_result_text16le( } #endif /* SQLITE_OMIT_UTF16 */ SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ - Mem *pOut = pCtx->pOut; + Mem *pOut; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; + if( pValue==0 ){ + sqlite3_result_null(pCtx); + return; + } +#endif + pOut = pCtx->pOut; assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemCopy(pOut, pValue); sqlite3VdbeChangeEncoding(pOut, pCtx->enc); @@ -89749,7 +91022,12 @@ SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ sqlite3_result_zeroblob64(pCtx, n>0 ? n : 0); } SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){ - Mem *pOut = pCtx->pOut; + Mem *pOut; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return SQLITE_MISUSE_BKPT; +#endif + pOut = pCtx->pOut; assert( sqlite3_mutex_held(pOut->db->mutex) ); if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){ sqlite3_result_error_toobig(pCtx); @@ -89763,6 +91041,9 @@ SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){ #endif } SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif pCtx->isError = errCode ? errCode : -1; #ifdef SQLITE_DEBUG if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode; @@ -89775,6 +91056,9 @@ SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ /* Force an SQLITE_TOOBIG error. */ SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); pCtx->isError = SQLITE_TOOBIG; sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1, @@ -89783,6 +91067,9 @@ SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){ /* An SQLITE_NOMEM error. */ SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetNull(pCtx->pOut); pCtx->isError = SQLITE_NOMEM_BKPT; @@ -90035,6 +91322,9 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ ** pointer to it. */ SQLITE_API void *sqlite3_user_data(sqlite3_context *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return 0; +#endif assert( p && p->pFunc ); return p->pFunc->pUserData; } @@ -90050,7 +91340,11 @@ SQLITE_API void *sqlite3_user_data(sqlite3_context *p){ ** application defined function. */ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return 0; +#else assert( p && p->pOut ); +#endif return p->pOut->db; } @@ -90069,7 +91363,11 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ ** value, as a signal to the xUpdate routine that the column is unchanged. */ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return 0; +#else assert( p ); +#endif return sqlite3_value_nochange(p->pOut); } @@ -90097,7 +91395,7 @@ static int valueFromValueList( ValueList *pRhs; *ppOut = 0; - if( pVal==0 ) return SQLITE_MISUSE; + if( pVal==0 ) return SQLITE_MISUSE_BKPT; if( (pVal->flags & MEM_Dyn)==0 || pVal->xDel!=sqlite3VdbeValueListFree ){ return SQLITE_ERROR; }else{ @@ -90228,6 +91526,9 @@ SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ AuxData *pAuxData; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return 0; +#endif assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); #if SQLITE_ENABLE_STAT4 if( pCtx->pVdbe==0 ) return 0; @@ -90260,8 +91561,12 @@ SQLITE_API void sqlite3_set_auxdata( void (*xDelete)(void*) ){ AuxData *pAuxData; - Vdbe *pVdbe = pCtx->pVdbe; + Vdbe *pVdbe; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + pVdbe= pCtx->pVdbe; assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); #ifdef SQLITE_ENABLE_STAT4 if( pVdbe==0 ) goto failed; @@ -90698,7 +92003,7 @@ static int vdbeUnbind(Vdbe *p, unsigned int i){ } sqlite3_mutex_enter(p->db->mutex); if( p->eVdbeState!=VDBE_READY_STATE ){ - sqlite3Error(p->db, SQLITE_MISUSE); + sqlite3Error(p->db, SQLITE_MISUSE_BKPT); sqlite3_mutex_leave(p->db->mutex); sqlite3_log(SQLITE_MISUSE, "bind on a busy prepared statement: [%s]", p->zSql); @@ -90927,6 +92232,9 @@ SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){ int rc; Vdbe *p = (Vdbe *)pStmt; +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(p->db->mutex); if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){ rc = SQLITE_TOOBIG; @@ -91053,6 +92361,9 @@ SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){ SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode){ Vdbe *v = (Vdbe*)pStmt; int rc; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pStmt==0 ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(v->db->mutex); if( ((int)v->explain)==eMode ){ rc = SQLITE_OK; @@ -91219,10 +92530,16 @@ static UnpackedRecord *vdbeUnpackRecord( ** a field of the row currently being updated or deleted. */ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ - PreUpdate *p = db->pPreUpdate; + PreUpdate *p; Mem *pMem; int rc = SQLITE_OK; +#ifdef SQLITE_ENABLE_API_ARMOR + if( db==0 || ppValue==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + p = db->pPreUpdate; /* Test that this call is being made from within an SQLITE_DELETE or ** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */ if( !p || p->op==SQLITE_INSERT ){ @@ -91283,7 +92600,12 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa ** the number of columns in the row being updated, deleted or inserted. */ SQLITE_API int sqlite3_preupdate_count(sqlite3 *db){ - PreUpdate *p = db->pPreUpdate; + PreUpdate *p; +#ifdef SQLITE_ENABLE_API_ARMOR + p = db!=0 ? db->pPreUpdate : 0; +#else + p = db->pPreUpdate; +#endif return (p ? p->keyinfo.nKeyField : 0); } #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ @@ -91301,7 +92623,12 @@ SQLITE_API int sqlite3_preupdate_count(sqlite3 *db){ ** or SET DEFAULT action is considered a trigger. */ SQLITE_API int sqlite3_preupdate_depth(sqlite3 *db){ - PreUpdate *p = db->pPreUpdate; + PreUpdate *p; +#ifdef SQLITE_ENABLE_API_ARMOR + p = db!=0 ? db->pPreUpdate : 0; +#else + p = db->pPreUpdate; +#endif return (p ? p->v->nFrame : 0); } #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ @@ -91312,7 +92639,12 @@ SQLITE_API int sqlite3_preupdate_depth(sqlite3 *db){ ** only. */ SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *db){ - PreUpdate *p = db->pPreUpdate; + PreUpdate *p; +#ifdef SQLITE_ENABLE_API_ARMOR + p = db!=0 ? db->pPreUpdate : 0; +#else + p = db->pPreUpdate; +#endif return (p ? p->iBlobWrite : -1); } #endif @@ -91323,10 +92655,16 @@ SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *db){ ** a field of the row currently being updated or inserted. */ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ - PreUpdate *p = db->pPreUpdate; + PreUpdate *p; int rc = SQLITE_OK; Mem *pMem; +#ifdef SQLITE_ENABLE_API_ARMOR + if( db==0 || ppValue==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + p = db->pPreUpdate; if( !p || p->op==SQLITE_DELETE ){ rc = SQLITE_MISUSE_BKPT; goto preupdate_new_out; @@ -91405,11 +92743,20 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2( void *pOut /* OUT: Write the answer here */ ){ Vdbe *p = (Vdbe*)pStmt; - VdbeOp *aOp = p->aOp; - int nOp = p->nOp; + VdbeOp *aOp; + int nOp; ScanStatus *pScan = 0; int idx; +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 || pOut==0 + || iScanStatusOpSQLITE_SCANSTAT_NCYCLE ){ + return 1; + } +#endif + aOp = p->aOp; + nOp = p->nOp; if( p->pFrame ){ VdbeFrame *pFrame; for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); @@ -91431,7 +92778,6 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2( } if( flags & SQLITE_SCANSTAT_COMPLEX ){ idx = iScan; - pScan = &p->aScan[idx]; }else{ /* If the COMPLEX flag is clear, then this function must ignore any ** ScanStatus structures with ScanStatus.addrLoop set to 0. */ @@ -91444,6 +92790,8 @@ SQLITE_API int sqlite3_stmt_scanstatus_v2( } } if( idx>=p->nScan ) return 1; + assert( pScan==0 || pScan==&p->aScan[idx] ); + pScan = &p->aScan[idx]; switch( iScanStatusOp ){ case SQLITE_SCANSTAT_NLOOP: { @@ -91556,7 +92904,7 @@ SQLITE_API int sqlite3_stmt_scanstatus( SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){ Vdbe *p = (Vdbe*)pStmt; int ii; - for(ii=0; iinOp; ii++){ + for(ii=0; p!=0 && iinOp; ii++){ Op *pOp = &p->aOp[ii]; pOp->nExec = 0; pOp->nCycle = 0; @@ -91895,11 +93243,12 @@ SQLITE_API int sqlite3_found_count = 0; ** sqlite3CantopenError(lineno) */ static void test_trace_breakpoint(int pc, Op *pOp, Vdbe *v){ - static int n = 0; + static u64 n = 0; (void)pc; (void)pOp; (void)v; n++; + if( n==LARGEST_UINT64 ) abort(); /* So that n is used, preventing a warning */ } #endif @@ -92525,11 +93874,11 @@ static SQLITE_NOINLINE int vdbeColumnFromOverflow( sqlite3RCStrRef(pBuf); if( t&1 ){ rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, encoding, - (void(*)(void*))sqlite3RCStrUnref); + sqlite3RCStrUnref); pDest->flags |= MEM_Term; }else{ rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, 0, - (void(*)(void*))sqlite3RCStrUnref); + sqlite3RCStrUnref); } }else{ rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, iOffset, len, pDest); @@ -92891,7 +94240,7 @@ case OP_Return: { /* in1 */ ** ** See also: EndCoroutine */ -case OP_InitCoroutine: { /* jump */ +case OP_InitCoroutine: { /* jump0 */ assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); assert( pOp->p2>=0 && pOp->p2nOp ); assert( pOp->p3>=0 && pOp->p3nOp ); @@ -92914,7 +94263,9 @@ case OP_InitCoroutine: { /* jump */ ** ** The instruction at the address in register P1 is a Yield. ** Jump to the P2 parameter of that Yield. -** After the jump, register P1 becomes undefined. +** After the jump, the value register P1 is left with a value +** such that subsequent OP_Yields go back to the this same +** OP_EndCoroutine instruction. ** ** See also: InitCoroutine */ @@ -92926,8 +94277,8 @@ case OP_EndCoroutine: { /* in1 */ pCaller = &aOp[pIn1->u.i]; assert( pCaller->opcode==OP_Yield ); assert( pCaller->p2>=0 && pCaller->p2nOp ); + pIn1->u.i = (int)(pOp - p->aOp) - 1; pOp = &aOp[pCaller->p2 - 1]; - pIn1->flags = MEM_Undefined; break; } @@ -92944,7 +94295,7 @@ case OP_EndCoroutine: { /* in1 */ ** ** See also: InitCoroutine */ -case OP_Yield: { /* in1, jump */ +case OP_Yield: { /* in1, jump0 */ int pcDest; pIn1 = &aMem[pOp->p1]; assert( VdbeMemDynamic(pIn1)==0 ); @@ -93274,19 +94625,15 @@ case OP_Blob: { /* out2 */ break; } -/* Opcode: Variable P1 P2 * P4 * -** Synopsis: r[P2]=parameter(P1,P4) +/* Opcode: Variable P1 P2 * * * +** Synopsis: r[P2]=parameter(P1) ** ** Transfer the values of bound parameter P1 into register P2 -** -** If the parameter is named, then its name appears in P4. -** The P4 value is used by sqlite3_bind_parameter_name(). */ case OP_Variable: { /* out2 */ Mem *pVar; /* Value being transferred */ assert( pOp->p1>0 && pOp->p1<=p->nVar ); - assert( pOp->p4.z==0 || pOp->p4.z==sqlite3VListNumToName(p->pVList,pOp->p1) ); pVar = &p->aVar[pOp->p1 - 1]; if( sqlite3VdbeMemTooBig(pVar) ){ goto too_big; @@ -93796,7 +95143,7 @@ case OP_AddImm: { /* in1 */ pIn1 = &aMem[pOp->p1]; memAboutToChange(p, pIn1); sqlite3VdbeMemIntegerify(pIn1); - pIn1->u.i += pOp->p2; + *(u64*)&pIn1->u.i += (u64)pOp->p2; break; } @@ -93807,7 +95154,7 @@ case OP_AddImm: { /* in1 */ ** without data loss, then jump immediately to P2, or if P2==0 ** raise an SQLITE_MISMATCH exception. */ -case OP_MustBeInt: { /* jump, in1 */ +case OP_MustBeInt: { /* jump0, in1 */ pIn1 = &aMem[pOp->p1]; if( (pIn1->flags & MEM_Int)==0 ){ applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding); @@ -93848,7 +95195,7 @@ case OP_RealAffinity: { /* in1 */ } #endif -#ifndef SQLITE_OMIT_CAST +#if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_ANALYZE) /* Opcode: Cast P1 P2 * * * ** Synopsis: affinity(r[P1]) ** @@ -94063,7 +95410,9 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ } } }else if( affinity==SQLITE_AFF_TEXT && ((flags1 | flags3) & MEM_Str)!=0 ){ - if( (flags1 & MEM_Str)==0 && (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ + if( (flags1 & MEM_Str)!=0 ){ + pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal); + }else if( (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ testcase( pIn1->flags & MEM_Int ); testcase( pIn1->flags & MEM_Real ); testcase( pIn1->flags & MEM_IntReal ); @@ -94072,7 +95421,9 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask); if( NEVER(pIn1==pIn3) ) flags3 = flags1 | MEM_Str; } - if( (flags3 & MEM_Str)==0 && (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ + if( (flags3 & MEM_Str)!=0 ){ + pIn3->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal); + }else if( (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ testcase( pIn3->flags & MEM_Int ); testcase( pIn3->flags & MEM_Real ); testcase( pIn3->flags & MEM_IntReal ); @@ -95404,7 +96755,6 @@ case OP_MakeRecord: { /* NULL value. No change in zPayload */ }else{ u64 v; - u32 i; if( serial_type==7 ){ assert( sizeof(v)==sizeof(pRec->u.r) ); memcpy(&v, &pRec->u.r, sizeof(v)); @@ -95412,12 +96762,22 @@ case OP_MakeRecord: { }else{ v = pRec->u.i; } - len = i = sqlite3SmallTypeSizes[serial_type]; - assert( i>0 ); - while( 1 /*exit-by-break*/ ){ - zPayload[--i] = (u8)(v&0xFF); - if( i==0 ) break; - v >>= 8; + len = sqlite3SmallTypeSizes[serial_type]; + assert( len>=1 && len<=8 && len!=5 && len!=7 ); + switch( len ){ + default: zPayload[7] = (u8)(v&0xff); v >>= 8; + zPayload[6] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 6: zPayload[5] = (u8)(v&0xff); v >>= 8; + zPayload[4] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 4: zPayload[3] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 3: zPayload[2] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 2: zPayload[1] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 1: zPayload[0] = (u8)(v&0xff); } zPayload += len; } @@ -96335,7 +97695,8 @@ case OP_SequenceTest: { ** is the only cursor opcode that works with a pseudo-table. ** ** P3 is the number of fields in the records that will be stored by -** the pseudo-table. +** the pseudo-table. If P2 is 0 or negative then the pseudo-cursor +** will return NULL for every column. */ case OP_OpenPseudo: { VdbeCursor *pCx; @@ -96478,10 +97839,10 @@ case OP_ColumnsUsed: { ** ** See also: Found, NotFound, SeekGt, SeekGe, SeekLt */ -case OP_SeekLT: /* jump, in3, group, ncycle */ -case OP_SeekLE: /* jump, in3, group, ncycle */ -case OP_SeekGE: /* jump, in3, group, ncycle */ -case OP_SeekGT: { /* jump, in3, group, ncycle */ +case OP_SeekLT: /* jump0, in3, group, ncycle */ +case OP_SeekLE: /* jump0, in3, group, ncycle */ +case OP_SeekGE: /* jump0, in3, group, ncycle */ +case OP_SeekGT: { /* jump0, in3, group, ncycle */ int res; /* Comparison result */ int oc; /* Opcode */ VdbeCursor *pC; /* The cursor to seek */ @@ -97148,7 +98509,7 @@ case OP_Found: { /* jump, in3, ncycle */ ** ** See also: Found, NotFound, NoConflict, SeekRowid */ -case OP_SeekRowid: { /* jump, in3, ncycle */ +case OP_SeekRowid: { /* jump0, in3, ncycle */ VdbeCursor *pC; BtCursor *pCrsr; int res; @@ -97534,8 +98895,13 @@ case OP_RowCell: { ** the "primary" delete. The others are all on OPFLAG_FORDELETE ** cursors or else are marked with the AUXDELETE flag. ** -** If the OPFLAG_NCHANGE flag of P2 (NB: P2 not P5) is set, then the row -** change count is incremented (otherwise not). +** If the OPFLAG_NCHANGE (0x01) flag of P2 (NB: P2 not P5) is set, then +** the row change count is incremented (otherwise not). +** +** If the OPFLAG_ISNOOP (0x40) flag of P2 (not P5!) is set, then the +** pre-update-hook for deletes is run, but the btree is otherwise unchanged. +** This happens when the OP_Delete is to be shortly followed by an OP_Insert +** with the same key, causing the btree entry to be overwritten. ** ** P1 must not be pseudo-table. It has to be a real table with ** multiple rows. @@ -97902,7 +99268,7 @@ case OP_NullRow: { ** configured to use Prev, not Next. */ case OP_SeekEnd: /* ncycle */ -case OP_Last: { /* jump, ncycle */ +case OP_Last: { /* jump0, ncycle */ VdbeCursor *pC; BtCursor *pCrsr; int res; @@ -97936,28 +99302,38 @@ case OP_Last: { /* jump, ncycle */ break; } -/* Opcode: IfSmaller P1 P2 P3 * * +/* Opcode: IfSizeBetween P1 P2 P3 P4 * ** -** Estimate the number of rows in the table P1. Jump to P2 if that -** estimate is less than approximately 2**(0.1*P3). +** Let N be the approximate number of rows in the table or index +** with cursor P1 and let X be 10*log2(N) if N is positive or -1 +** if N is zero. +** +** Jump to P2 if X is in between P3 and P4, inclusive. */ -case OP_IfSmaller: { /* jump */ +case OP_IfSizeBetween: { /* jump */ VdbeCursor *pC; BtCursor *pCrsr; int res; i64 sz; assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p4type==P4_INT32 ); + assert( pOp->p3>=-1 && pOp->p3<=640*2 ); + assert( pOp->p4.i>=-1 && pOp->p4.i<=640*2 ); pC = p->apCsr[pOp->p1]; assert( pC!=0 ); pCrsr = pC->uc.pCursor; assert( pCrsr ); rc = sqlite3BtreeFirst(pCrsr, &res); if( rc ) goto abort_due_to_error; - if( res==0 ){ + if( res!=0 ){ + sz = -1; /* -Infinity encoding */ + }else{ sz = sqlite3BtreeRowCountEst(pCrsr); - if( ALWAYS(sz>=0) && sqlite3LogEst((u64)sz)p3 ) res = 1; + assert( sz>0 ); + sz = sqlite3LogEst((u64)sz); } + res = sz>=pOp->p3 && sz<=pOp->p4.i; VdbeBranchTaken(res!=0,2); if( res ) goto jump_to_p2; break; @@ -98010,7 +99386,7 @@ case OP_Sort: { /* jump ncycle */ ** from the beginning toward the end. In other words, the cursor is ** configured to use Next, not Prev. */ -case OP_Rewind: { /* jump, ncycle */ +case OP_Rewind: { /* jump0, ncycle */ VdbeCursor *pC; BtCursor *pCrsr; int res; @@ -98657,16 +100033,57 @@ case OP_CreateBtree: { /* out2 */ break; } -/* Opcode: SqlExec * * * P4 * +/* Opcode: SqlExec P1 P2 * P4 * ** ** Run the SQL statement or statements specified in the P4 string. +** +** The P1 parameter is a bitmask of options: +** +** 0x0001 Disable Auth and Trace callbacks while the statements +** in P4 are running. +** +** 0x0002 Set db->nAnalysisLimit to P2 while the statements in +** P4 are running. +** */ case OP_SqlExec: { + char *zErr; +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth; +#endif + u8 mTrace; + int savedAnalysisLimit; + sqlite3VdbeIncrWriteCounter(p, 0); db->nSqlExec++; - rc = sqlite3_exec(db, pOp->p4.z, 0, 0, 0); + zErr = 0; +#ifndef SQLITE_OMIT_AUTHORIZATION + xAuth = db->xAuth; +#endif + mTrace = db->mTrace; + savedAnalysisLimit = db->nAnalysisLimit; + if( pOp->p1 & 0x0001 ){ +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = 0; +#endif + db->mTrace = 0; + } + if( pOp->p1 & 0x0002 ){ + db->nAnalysisLimit = pOp->p2; + } + rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr); db->nSqlExec--; - if( rc ) goto abort_due_to_error; +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + db->mTrace = mTrace; + db->nAnalysisLimit = savedAnalysisLimit; + if( zErr || rc ){ + sqlite3VdbeError(p, "%s", zErr); + sqlite3_free(zErr); + if( rc==SQLITE_NOMEM ) goto no_mem; + goto abort_due_to_error; + } break; } @@ -98812,11 +100229,11 @@ case OP_DropTrigger: { /* Opcode: IntegrityCk P1 P2 P3 P4 P5 ** ** Do an analysis of the currently open database. Store in -** register P1 the text of an error message describing any problems. -** If no problems are found, store a NULL in register P1. +** register (P1+1) the text of an error message describing any problems. +** If no problems are found, store a NULL in register (P1+1). ** -** The register P3 contains one less than the maximum number of allowed errors. -** At most reg(P3) errors will be reported. +** The register (P1) contains one less than the maximum number of allowed +** errors. At most reg(P1) errors will be reported. ** In other words, the analysis stops as soon as reg(P1) errors are ** seen. Reg(P1) is updated with the number of errors remaining. ** @@ -98836,19 +100253,21 @@ case OP_IntegrityCk: { Mem *pnErr; /* Register keeping track of errors remaining */ assert( p->bIsReader ); + assert( pOp->p4type==P4_INTARRAY ); nRoot = pOp->p2; aRoot = pOp->p4.ai; assert( nRoot>0 ); + assert( aRoot!=0 ); assert( aRoot[0]==(Pgno)nRoot ); - assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); - pnErr = &aMem[pOp->p3]; + assert( pOp->p1>0 && (pOp->p1+1)<=(p->nMem+1 - p->nCursor) ); + pnErr = &aMem[pOp->p1]; assert( (pnErr->flags & MEM_Int)!=0 ); assert( (pnErr->flags & (MEM_Str|MEM_Blob))==0 ); - pIn1 = &aMem[pOp->p1]; + pIn1 = &aMem[pOp->p1+1]; assert( pOp->p5nDb ); assert( DbMaskTest(p->btreeMask, pOp->p5) ); - rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot, - (int)pnErr->u.i+1, &nErr, &z); + rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], + &aMem[pOp->p3], nRoot, (int)pnErr->u.i+1, &nErr, &z); sqlite3VdbeMemSetNull(pIn1); if( nErr==0 ){ assert( z==0 ); @@ -98975,7 +100394,9 @@ case OP_RowSetTest: { /* jump, in1, in3 */ ** P1 contains the address of the memory cell that contains the first memory ** cell in an array of values used as arguments to the sub-program. P2 ** contains the address to jump to if the sub-program throws an IGNORE -** exception using the RAISE() function. Register P3 contains the address +** exception using the RAISE() function. P2 might be zero, if there is +** no possibility that an IGNORE exception will be raised. +** Register P3 contains the address ** of a memory cell in this (the parent) VM that is used to allocate the ** memory required by the sub-vdbe at runtime. ** @@ -98983,7 +100404,7 @@ case OP_RowSetTest: { /* jump, in1, in3 */ ** ** If P5 is non-zero, then recursive program invocation is enabled. */ -case OP_Program: { /* jump */ +case OP_Program: { /* jump0 */ int nMem; /* Number of memory registers for sub-program */ int nByte; /* Bytes of runtime space required for sub-program */ Mem *pRt; /* Register to allocate runtime space */ @@ -99887,6 +101308,52 @@ case OP_VOpen: { /* ncycle */ } #endif /* SQLITE_OMIT_VIRTUALTABLE */ +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VCheck P1 P2 P3 P4 * +** +** P4 is a pointer to a Table object that is a virtual table in schema P1 +** that supports the xIntegrity() method. This opcode runs the xIntegrity() +** method for that virtual table, using P3 as the integer argument. If +** an error is reported back, the table name is prepended to the error +** message and that message is stored in P2. If no errors are seen, +** register P2 is set to NULL. +*/ +case OP_VCheck: { /* out2 */ + Table *pTab; + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + char *zErr = 0; + + pOut = &aMem[pOp->p2]; + sqlite3VdbeMemSetNull(pOut); /* Innocent until proven guilty */ + assert( pOp->p4type==P4_TABLEREF ); + pTab = pOp->p4.pTab; + assert( pTab!=0 ); + assert( pTab->nTabRef>0 ); + assert( IsVirtual(pTab) ); + if( pTab->u.vtab.p==0 ) break; + pVtab = pTab->u.vtab.p->pVtab; + assert( pVtab!=0 ); + pModule = pVtab->pModule; + assert( pModule!=0 ); + assert( pModule->iVersion>=4 ); + assert( pModule->xIntegrity!=0 ); + sqlite3VtabLock(pTab->u.vtab.p); + assert( pOp->p1>=0 && pOp->p1nDb ); + rc = pModule->xIntegrity(pVtab, db->aDb[pOp->p1].zDbSName, pTab->zName, + pOp->p3, &zErr); + sqlite3VtabUnlock(pTab->u.vtab.p); + if( rc ){ + sqlite3_free(zErr); + goto abort_due_to_error; + } + if( zErr ){ + sqlite3VdbeMemSetStr(pOut, zErr, -1, SQLITE_UTF8, sqlite3_free); + } + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + #ifndef SQLITE_OMIT_VIRTUALTABLE /* Opcode: VInitIn P1 P2 P3 * * ** Synopsis: r[P2]=ValueList(P1,P3) @@ -100000,6 +101467,7 @@ case OP_VColumn: { /* ncycle */ const sqlite3_module *pModule; Mem *pDest; sqlite3_context sContext; + FuncDef nullFunc; VdbeCursor *pCur = p->apCsr[pOp->p1]; assert( pCur!=0 ); @@ -100017,6 +101485,9 @@ case OP_VColumn: { /* ncycle */ memset(&sContext, 0, sizeof(sContext)); sContext.pOut = pDest; sContext.enc = encoding; + nullFunc.pUserData = 0; + nullFunc.funcFlags = SQLITE_RESULT_SUBTYPE; + sContext.pFunc = &nullFunc; assert( pOp->p5==OPFLAG_NOCHNG || pOp->p5==0 ); if( pOp->p5 & OPFLAG_NOCHNG ){ sqlite3VdbeMemSetNull(pDest); @@ -100349,6 +101820,42 @@ case OP_ClrSubtype: { /* in1 */ break; } +/* Opcode: GetSubtype P1 P2 * * * +** Synopsis: r[P2] = r[P1].subtype +** +** Extract the subtype value from register P1 and write that subtype +** into register P2. If P1 has no subtype, then P1 gets a NULL. +*/ +case OP_GetSubtype: { /* in1 out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( pIn1->flags & MEM_Subtype ){ + sqlite3VdbeMemSetInt64(pOut, pIn1->eSubtype); + }else{ + sqlite3VdbeMemSetNull(pOut); + } + break; +} + +/* Opcode: SetSubtype P1 P2 * * * +** Synopsis: r[P2].subtype = r[P1] +** +** Set the subtype value of register P2 to the integer from register P1. +** If P1 is NULL, clear the subtype from p2. +*/ +case OP_SetSubtype: { /* in1 out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( pIn1->flags & MEM_Null ){ + pOut->flags &= ~MEM_Subtype; + }else{ + assert( pIn1->flags & MEM_Int ); + pOut->flags |= MEM_Subtype; + pOut->eSubtype = (u8)(pIn1->u.i & 0xff); + } + break; +} + /* Opcode: FilterAdd P1 * P3 P4 * ** Synopsis: filter(P1) += key(P3@P4) ** @@ -100446,7 +101953,7 @@ case OP_Filter: { /* jump */ ** error is encountered. */ case OP_Trace: -case OP_Init: { /* jump */ +case OP_Init: { /* jump0 */ int i; #ifndef SQLITE_OMIT_TRACE char *zTrace; @@ -100833,8 +102340,7 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ /* Set the value of register r[1] in the SQL statement to integer iRow. ** This is done directly as a performance optimization */ - v->aMem[1].flags = MEM_Int; - v->aMem[1].u.i = iRow; + sqlite3VdbeMemSetInt64(&v->aMem[1], iRow); /* If the statement has been run before (and is paused at the OP_ResultRow) ** then back it up to the point where it does the OP_NotExists. This could @@ -100917,7 +102423,7 @@ SQLITE_API int sqlite3_blob_open( #endif *ppBlob = 0; #ifdef SQLITE_ENABLE_API_ARMOR - if( !sqlite3SafetyCheckOk(db) || zTable==0 ){ + if( !sqlite3SafetyCheckOk(db) || zTable==0 || zColumn==0 ){ return SQLITE_MISUSE_BKPT; } #endif @@ -101479,7 +102985,7 @@ struct SorterFile { struct SorterList { SorterRecord *pList; /* Linked list of records */ u8 *aMemory; /* If non-NULL, bulk memory to hold pList */ - int szPMA; /* Size of pList as PMA in bytes */ + i64 szPMA; /* Size of pList as PMA in bytes */ }; /* @@ -101588,10 +103094,10 @@ typedef int (*SorterCompare)(SortSubtask*,int*,const void*,int,const void*,int); struct SortSubtask { SQLiteThread *pThread; /* Background thread, if any */ int bDone; /* Set if thread is finished but not joined */ + int nPMA; /* Number of PMAs currently in file */ VdbeSorter *pSorter; /* Sorter that owns this sub-task */ UnpackedRecord *pUnpacked; /* Space to unpack a record */ SorterList list; /* List for thread to write to a PMA */ - int nPMA; /* Number of PMAs currently in file */ SorterCompare xCompare; /* Compare function to use */ SorterFile file; /* Temp file for level-0 PMAs */ SorterFile file2; /* Space for other PMAs */ @@ -103065,8 +104571,8 @@ SQLITE_PRIVATE int sqlite3VdbeSorterWrite( int rc = SQLITE_OK; /* Return Code */ SorterRecord *pNew; /* New list element */ int bFlush; /* True to flush contents of memory to PMA */ - int nReq; /* Bytes of memory required */ - int nPMA; /* Bytes of PMA space required */ + i64 nReq; /* Bytes of memory required */ + i64 nPMA; /* Bytes of PMA space required */ int t; /* serial type of first record field */ assert( pCsr->eCurType==CURTYPE_SORTER ); @@ -104348,10 +105854,10 @@ static int bytecodevtabColumn( #ifdef SQLITE_ENABLE_STMT_SCANSTATUS case 9: /* nexec */ - sqlite3_result_int(ctx, pOp->nExec); + sqlite3_result_int64(ctx, pOp->nExec); break; case 10: /* ncycle */ - sqlite3_result_int(ctx, pOp->nCycle); + sqlite3_result_int64(ctx, pOp->nCycle); break; #else case 9: /* nexec */ @@ -104490,7 +105996,8 @@ static sqlite3_module bytecodevtabModule = { /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ 0, - /* xShadowName */ 0 + /* xShadowName */ 0, + /* xIntegrity */ 0 }; @@ -105294,6 +106801,8 @@ static void resolveAlias( assert( iCol>=0 && iColnExpr ); pOrig = pEList->a[iCol].pExpr; assert( pOrig!=0 ); + assert( !ExprHasProperty(pExpr, EP_Reduced|EP_TokenOnly) ); + if( pExpr->pAggInfo ) return; db = pParse->db; pDup = sqlite3ExprDup(db, pOrig, 0); if( db->mallocFailed ){ @@ -105319,21 +106828,36 @@ static void resolveAlias( } /* -** Subqueries stores the original database, table and column names for their -** result sets in ExprList.a[].zSpan, in the form "DATABASE.TABLE.COLUMN". -** Check to see if the zSpan given to this routine matches the zDb, zTab, -** and zCol. If any of zDb, zTab, and zCol are NULL then those fields will -** match anything. +** Subqueries store the original database, table and column names for their +** result sets in ExprList.a[].zSpan, in the form "DATABASE.TABLE.COLUMN", +** and mark the expression-list item by setting ExprList.a[].fg.eEName +** to ENAME_TAB. +** +** Check to see if the zSpan/eEName of the expression-list item passed to this +** routine matches the zDb, zTab, and zCol. If any of zDb, zTab, and zCol are +** NULL then those fields will match anything. Return true if there is a match, +** or false otherwise. +** +** SF_NestedFrom subqueries also store an entry for the implicit rowid (or +** _rowid_, or oid) column by setting ExprList.a[].fg.eEName to ENAME_ROWID, +** and setting zSpan to "DATABASE.TABLE.". This type of pItem +** argument matches if zCol is a rowid alias. If it is not NULL, (*pbRowid) +** is set to 1 if there is this kind of match. */ SQLITE_PRIVATE int sqlite3MatchEName( const struct ExprList_item *pItem, const char *zCol, const char *zTab, - const char *zDb + const char *zDb, + int *pbRowid ){ int n; const char *zSpan; - if( pItem->fg.eEName!=ENAME_TAB ) return 0; + int eEName = pItem->fg.eEName; + if( eEName!=ENAME_TAB && (eEName!=ENAME_ROWID || NEVER(pbRowid==0)) ){ + return 0; + } + assert( pbRowid==0 || *pbRowid==0 ); zSpan = pItem->zEName; for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){} if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){ @@ -105345,9 +106869,11 @@ SQLITE_PRIVATE int sqlite3MatchEName( return 0; } zSpan += n+1; - if( zCol && sqlite3StrICmp(zSpan, zCol)!=0 ){ - return 0; + if( zCol ){ + if( eEName==ENAME_TAB && sqlite3StrICmp(zSpan, zCol)!=0 ) return 0; + if( eEName==ENAME_ROWID && sqlite3IsRowid(zCol)==0 ) return 0; } + if( eEName==ENAME_ROWID ) *pbRowid = 1; return 1; } @@ -105380,6 +106906,7 @@ SQLITE_PRIVATE Bitmask sqlite3ExprColUsed(Expr *pExpr){ assert( ExprUseYTab(pExpr) ); pExTab = pExpr->y.pTab; assert( pExTab!=0 ); + assert( n < pExTab->nCol ); if( (pExTab->tabFlags & TF_HasGenerated)!=0 && (pExTab->aCol[n].colFlags & COLFLAG_GENERATED)!=0 ){ @@ -105474,13 +107001,13 @@ static int lookupName( Parse *pParse, /* The parsing context */ const char *zDb, /* Name of the database containing table, or NULL */ const char *zTab, /* Name of table containing column, or NULL */ - const char *zCol, /* Name of the column. */ + const Expr *pRight, /* Name of the column. */ NameContext *pNC, /* The name context used to resolve the name */ Expr *pExpr /* Make this EXPR node point to the selected column */ ){ int i, j; /* Loop counters */ int cnt = 0; /* Number of matching column names */ - int cntTab = 0; /* Number of matching table names */ + int cntTab = 0; /* Number of potential "rowid" matches */ int nSubquery = 0; /* How many levels of subquery */ sqlite3 *db = pParse->db; /* The database connection */ SrcItem *pItem; /* Use for looping over pSrcList items */ @@ -105491,6 +107018,7 @@ static int lookupName( Table *pTab = 0; /* Table holding the row */ Column *pCol; /* A column of pTab */ ExprList *pFJMatch = 0; /* Matches for FULL JOIN .. USING */ + const char *zCol = pRight->u.zToken; assert( pNC ); /* the name context cannot be NULL. */ assert( zCol ); /* The Z in X.Y.Z cannot be NULL */ @@ -105557,39 +107085,49 @@ static int lookupName( assert( pEList!=0 ); assert( pEList->nExpr==pTab->nCol ); for(j=0; jnExpr; j++){ - if( !sqlite3MatchEName(&pEList->a[j], zCol, zTab, zDb) ){ + int bRowid = 0; /* True if possible rowid match */ + if( !sqlite3MatchEName(&pEList->a[j], zCol, zTab, zDb, &bRowid) ){ continue; } - if( cnt>0 ){ - if( pItem->fg.isUsing==0 - || sqlite3IdListIndex(pItem->u3.pUsing, zCol)<0 - ){ - /* Two or more tables have the same column name which is - ** not joined by USING. This is an error. Signal as much - ** by clearing pFJMatch and letting cnt go above 1. */ - sqlite3ExprListDelete(db, pFJMatch); - pFJMatch = 0; - }else - if( (pItem->fg.jointype & JT_RIGHT)==0 ){ - /* An INNER or LEFT JOIN. Use the left-most table */ - continue; - }else - if( (pItem->fg.jointype & JT_LEFT)==0 ){ - /* A RIGHT JOIN. Use the right-most table */ - cnt = 0; - sqlite3ExprListDelete(db, pFJMatch); - pFJMatch = 0; - }else{ - /* For a FULL JOIN, we must construct a coalesce() func */ - extendFJMatch(pParse, &pFJMatch, pMatch, pExpr->iColumn); + if( bRowid==0 ){ + if( cnt>0 ){ + if( pItem->fg.isUsing==0 + || sqlite3IdListIndex(pItem->u3.pUsing, zCol)<0 + ){ + /* Two or more tables have the same column name which is + ** not joined by USING. This is an error. Signal as much + ** by clearing pFJMatch and letting cnt go above 1. */ + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + }else + if( (pItem->fg.jointype & JT_RIGHT)==0 ){ + /* An INNER or LEFT JOIN. Use the left-most table */ + continue; + }else + if( (pItem->fg.jointype & JT_LEFT)==0 ){ + /* A RIGHT JOIN. Use the right-most table */ + cnt = 0; + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + }else{ + /* For a FULL JOIN, we must construct a coalesce() func */ + extendFJMatch(pParse, &pFJMatch, pMatch, pExpr->iColumn); + } } + cnt++; + hit = 1; + }else if( cnt>0 ){ + /* This is a potential rowid match, but there has already been + ** a real match found. So this can be ignored. */ + continue; } - cnt++; - cntTab = 2; + cntTab++; pMatch = pItem; pExpr->iColumn = j; pEList->a[j].fg.bUsed = 1; - hit = 1; + + /* rowid cannot be part of a USING clause - assert() this. */ + assert( bRowid==0 || pEList->a[j].fg.bUsingTerm==0 ); if( pEList->a[j].fg.bUsingTerm ) break; } if( hit || zTab==0 ) continue; @@ -105653,8 +107191,37 @@ static int lookupName( } } if( 0==cnt && VisibleRowid(pTab) ){ + /* pTab is a potential ROWID match. Keep track of it and match + ** the ROWID later if that seems appropriate. (Search for "cntTab" + ** to find related code.) Only allow a ROWID match if there is + ** a single ROWID match candidate. + */ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + /* In SQLITE_ALLOW_ROWID_IN_VIEW mode, allow a ROWID match + ** if there is a single VIEW candidate or if there is a single + ** non-VIEW candidate plus multiple VIEW candidates. In other + ** words non-VIEW candidate terms take precedence over VIEWs. + */ + if( cntTab==0 + || (cntTab==1 + && ALWAYS(pMatch!=0) + && ALWAYS(pMatch->pTab!=0) + && (pMatch->pTab->tabFlags & TF_Ephemeral)!=0 + && (pTab->tabFlags & TF_Ephemeral)==0) + ){ + cntTab = 1; + pMatch = pItem; + }else{ + cntTab++; + } +#else + /* The (much more common) non-SQLITE_ALLOW_ROWID_IN_VIEW case is + ** simpler since we require exactly one candidate, which will + ** always be a non-VIEW + */ cntTab++; pMatch = pItem; +#endif } } if( pMatch ){ @@ -105683,7 +107250,8 @@ static int lookupName( if( pParse->bReturning ){ if( (pNC->ncFlags & NC_UBaseReg)!=0 && ALWAYS(zTab==0 - || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0) + || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0 + || isValidSchemaTableName(zTab, pParse->pTriggerTab, 0)) ){ pExpr->iTable = op!=TK_DELETE; pTab = pParse->pTriggerTab; @@ -105780,14 +107348,19 @@ static int lookupName( ** Perhaps the name is a reference to the ROWID */ if( cnt==0 - && cntTab==1 + && cntTab>=1 && pMatch && (pNC->ncFlags & (NC_IdxExpr|NC_GenCol))==0 && sqlite3IsRowid(zCol) - && ALWAYS(VisibleRowid(pMatch->pTab)) + && ALWAYS(VisibleRowid(pMatch->pTab) || pMatch->fg.isNestedFrom) ){ - cnt = 1; - pExpr->iColumn = -1; + cnt = cntTab; +#if SQLITE_ALLOW_ROWID_IN_VIEW+0==2 + if( pMatch->pTab!=0 && IsView(pMatch->pTab) ){ + eNewExprOp = TK_NULL; + } +#endif + if( pMatch->fg.isNestedFrom==0 ) pExpr->iColumn = -1; pExpr->affExpr = SQLITE_AFF_INTEGER; } @@ -105940,12 +107513,17 @@ static int lookupName( sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol); }else if( zTab ){ sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol); + }else if( cnt==0 && ExprHasProperty(pRight,EP_DblQuoted) ){ + sqlite3ErrorMsg(pParse, "%s: \"%s\" - should this be a" + " string literal in single-quotes?", + zErr, zCol); }else{ sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol); } sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); pParse->checkSchema = 1; pTopNC->nNcErr++; + eNewExprOp = TK_NULL; } assert( pFJMatch==0 ); @@ -105972,8 +107550,12 @@ static int lookupName( ** If a generated column is referenced, set bits for every column ** of the table. */ - if( pExpr->iColumn>=0 && pMatch!=0 ){ - pMatch->colUsed |= sqlite3ExprColUsed(pExpr); + if( pMatch ){ + if( pExpr->iColumn>=0 ){ + pMatch->colUsed |= sqlite3ExprColUsed(pExpr); + }else{ + pMatch->fg.rowidUsed = 1; + } } pExpr->op = eNewExprOp; @@ -106150,6 +107732,19 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ ** resolved. This prevents "column" from being counted as having been ** referenced, which might prevent a SELECT from being erroneously ** marked as correlated. + ** + ** 2024-03-28: Beware of aggregates. A bare column of aggregated table + ** can still evaluate to NULL even though it is marked as NOT NULL. + ** Example: + ** + ** CREATE TABLE t1(a INT NOT NULL); + ** SELECT a, a IS NULL, a IS NOT NULL, count(*) FROM t1; + ** + ** The "a IS NULL" and "a IS NOT NULL" expressions cannot be optimized + ** here because at the time this case is hit, we do not yet know whether + ** or not t1 is being aggregated. We have to assume the worst and omit + ** the optimization. The only time it is safe to apply this optimization + ** is within the WHERE clause. */ case TK_NOTNULL: case TK_ISNULL: { @@ -106160,19 +107755,36 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ anRef[i] = p->nRef; } sqlite3WalkExpr(pWalker, pExpr->pLeft); - if( 0==sqlite3ExprCanBeNull(pExpr->pLeft) && !IN_RENAME_OBJECT ){ - testcase( ExprHasProperty(pExpr, EP_OuterON) ); - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - pExpr->u.iValue = (pExpr->op==TK_NOTNULL); - pExpr->flags |= EP_IntValue; - pExpr->op = TK_INTEGER; + if( IN_RENAME_OBJECT ) return WRC_Prune; + if( sqlite3ExprCanBeNull(pExpr->pLeft) ){ + /* The expression can be NULL. So the optimization does not apply */ + return WRC_Prune; + } - for(i=0, p=pNC; p && ipNext, i++){ - p->nRef = anRef[i]; + for(i=0, p=pNC; p; p=p->pNext, i++){ + if( (p->ncFlags & NC_Where)==0 ){ + return WRC_Prune; /* Not in a WHERE clause. Unsafe to optimize. */ } - sqlite3ExprDelete(pParse->db, pExpr->pLeft); - pExpr->pLeft = 0; } + testcase( ExprHasProperty(pExpr, EP_OuterON) ); + assert( !ExprHasProperty(pExpr, EP_IntValue) ); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x80000 ){ + sqlite3DebugPrintf( + "NOT NULL strength reduction converts the following to %d:\n", + pExpr->op==TK_NOTNULL + ); + sqlite3ShowExpr(pExpr); + } +#endif /* TREETRACE_ENABLED */ + pExpr->u.iValue = (pExpr->op==TK_NOTNULL); + pExpr->flags |= EP_IntValue; + pExpr->op = TK_INTEGER; + for(i=0, p=pNC; p && ipNext, i++){ + p->nRef = anRef[i]; + } + sqlite3ExprDelete(pParse->db, pExpr->pLeft); + pExpr->pLeft = 0; return WRC_Prune; } @@ -106186,7 +107798,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ */ case TK_ID: case TK_DOT: { - const char *zColumn; const char *zTable; const char *zDb; Expr *pRight; @@ -106195,7 +107806,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ zDb = 0; zTable = 0; assert( !ExprHasProperty(pExpr, EP_IntValue) ); - zColumn = pExpr->u.zToken; + pRight = pExpr; }else{ Expr *pLeft = pExpr->pLeft; testcase( pNC->ncFlags & NC_IdxExpr ); @@ -106214,14 +107825,13 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ } assert( ExprUseUToken(pLeft) && ExprUseUToken(pRight) ); zTable = pLeft->u.zToken; - zColumn = pRight->u.zToken; assert( ExprUseYTab(pExpr) ); if( IN_RENAME_OBJECT ){ sqlite3RenameTokenRemap(pParse, (void*)pExpr, (void*)pRight); sqlite3RenameTokenRemap(pParse, (void*)&pExpr->y.pTab, (void*)pLeft); } } - return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr); + return lookupName(pParse, zDb, zTable, pRight, pNC, pExpr); } /* Resolve function names @@ -106240,6 +107850,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ Window *pWin = (IsWindowFunc(pExpr) ? pExpr->y.pWin : 0); #endif assert( !ExprHasProperty(pExpr, EP_xIsSelect|EP_IntValue) ); + assert( pExpr->pLeft==0 || pExpr->pLeft->op==TK_ORDER ); zId = pExpr->u.zToken; pDef = sqlite3FindFunction(pParse->db, zId, n, enc, 0); if( pDef==0 ){ @@ -106381,6 +107992,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ pNC->nNcErr++; } #endif + else if( is_agg==0 && pExpr->pLeft ){ + sqlite3ExprOrderByAggregateError(pParse, pExpr); + pNC->nNcErr++; + } if( is_agg ){ /* Window functions may not be arguments of aggregate functions. ** Or arguments of other window functions. But aggregate functions @@ -106392,13 +108007,16 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ #endif } } -#ifndef SQLITE_OMIT_WINDOWFUNC - else if( ExprHasProperty(pExpr, EP_WinFunc) ){ + else if( ExprHasProperty(pExpr, EP_WinFunc) || pExpr->pLeft ){ is_agg = 1; } -#endif sqlite3WalkExprList(pWalker, pList); if( is_agg ){ + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + sqlite3WalkExprList(pWalker, pExpr->pLeft->x.pList); + } #ifndef SQLITE_OMIT_WINDOWFUNC if( pWin ){ Select *pSel = pNC->pWinSelect; @@ -106427,11 +108045,12 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ while( pNC2 && sqlite3ReferencesSrcList(pParse, pExpr, pNC2->pSrcList)==0 ){ - pExpr->op2++; + pExpr->op2 += (1 + pNC2->nNestedSelect); pNC2 = pNC2->pNext; } assert( pDef!=0 || IN_RENAME_OBJECT ); if( pNC2 && pDef ){ + pExpr->op2 += pNC2->nNestedSelect; assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg ); assert( SQLITE_FUNC_ANYORDER==NC_OrderAgg ); testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 ); @@ -106460,6 +108079,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ testcase( pNC->ncFlags & NC_PartIdx ); testcase( pNC->ncFlags & NC_IdxExpr ); testcase( pNC->ncFlags & NC_GenCol ); + assert( pExpr->x.pSelect ); if( pNC->ncFlags & NC_SelfRef ){ notValidImpl(pParse, pNC, "subqueries", pExpr, pExpr); }else{ @@ -106468,6 +108088,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ assert( pNC->nRef>=nRef ); if( nRef!=pNC->nRef ){ ExprSetProperty(pExpr, EP_VarSelect); + pExpr->x.pSelect->selFlags |= SF_Correlated; } pNC->ncFlags |= NC_Subquery; } @@ -106962,10 +108583,8 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ while( p ){ assert( (p->selFlags & SF_Expanded)!=0 ); assert( (p->selFlags & SF_Resolved)==0 ); - assert( db->suppressErr==0 ); /* SF_Resolved not set if errors suppressed */ p->selFlags |= SF_Resolved; - /* Resolve the expressions in the LIMIT and OFFSET clauses. These ** are not allowed to refer to any names, so pass an empty NameContext. */ @@ -106992,8 +108611,10 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ /* Recursively resolve names in all subqueries in the FROM clause */ + if( pOuterNC ) pOuterNC->nNestedSelect++; for(i=0; ipSrc->nSrc; i++){ SrcItem *pItem = &p->pSrc->a[i]; + assert( pItem->zName!=0 || pItem->pSelect!=0 );/* Test of tag-20240424-1*/ if( pItem->pSelect && (pItem->pSelect->selFlags & SF_Resolved)==0 ){ int nRef = pOuterNC ? pOuterNC->nRef : 0; const char *zSavedContext = pParse->zAuthContext; @@ -107016,6 +108637,9 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ } } } + if( pOuterNC && ALWAYS(pOuterNC->nNestedSelect>0) ){ + pOuterNC->nNestedSelect--; + } /* Set up the local name-context to pass to sqlite3ResolveExprNames() to ** resolve the result-set expression list. @@ -107059,7 +108683,9 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ } if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort; } + sNC.ncFlags |= NC_Where; if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort; + sNC.ncFlags &= ~NC_Where; /* Resolve names in table-valued-function arguments */ for(i=0; ipSrc->nSrc; i++){ @@ -107598,9 +109224,10 @@ SQLITE_PRIVATE Expr *sqlite3ExprSkipCollateAndLikely(Expr *pExpr){ assert( pExpr->x.pList->nExpr>0 ); assert( pExpr->op==TK_FUNCTION ); pExpr = pExpr->x.pList->a[0].pExpr; - }else{ - assert( pExpr->op==TK_COLLATE ); + }else if( pExpr->op==TK_COLLATE ){ pExpr = pExpr->pLeft; + }else{ + break; } } return pExpr; @@ -107971,6 +109598,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprForVectorField( */ pRet = sqlite3PExpr(pParse, TK_SELECT_COLUMN, 0, 0); if( pRet ){ + ExprSetProperty(pRet, EP_FullSize); pRet->iTable = nField; pRet->iColumn = iField; pRet->pLeft = pVector; @@ -108293,11 +109921,12 @@ SQLITE_PRIVATE void sqlite3ExprSetErrorOffset(Expr *pExpr, int iOfst){ ** appear to be quoted. If the quotes were of the form "..." (double-quotes) ** then the EP_DblQuoted flag is set on the expression node. ** -** Special case: If op==TK_INTEGER and pToken points to a string that -** can be translated into a 32-bit integer, then the token is not -** stored in u.zToken. Instead, the integer values is written -** into u.iValue and the EP_IntValue flag is set. No extra storage +** Special case (tag-20240227-a): If op==TK_INTEGER and pToken points to +** a string that can be translated into a 32-bit integer, then the token is +** not stored in u.zToken. Instead, the integer values is written +** into u.iValue and the EP_IntValue flag is set. No extra storage ** is allocated to hold the integer text and the dequote flag is ignored. +** See also tag-20240227-b. */ SQLITE_PRIVATE Expr *sqlite3ExprAlloc( sqlite3 *db, /* Handle for sqlite3DbMallocRawNN() */ @@ -108313,7 +109942,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprAlloc( if( pToken ){ if( op!=TK_INTEGER || pToken->z==0 || sqlite3GetInt32(pToken->z, &iValue)==0 ){ - nExtra = pToken->n+1; + nExtra = pToken->n+1; /* tag-20240227-a */ assert( iValue>=0 ); } } @@ -108561,6 +110190,67 @@ SQLITE_PRIVATE Expr *sqlite3ExprFunction( return pNew; } +/* +** Report an error when attempting to use an ORDER BY clause within +** the arguments of a non-aggregate function. +*/ +SQLITE_PRIVATE void sqlite3ExprOrderByAggregateError(Parse *pParse, Expr *p){ + sqlite3ErrorMsg(pParse, + "ORDER BY may not be used with non-aggregate %#T()", p + ); +} + +/* +** Attach an ORDER BY clause to a function call. +** +** functionname( arguments ORDER BY sortlist ) +** \_____________________/ \______/ +** pExpr pOrderBy +** +** The ORDER BY clause is inserted into a new Expr node of type TK_ORDER +** and added to the Expr.pLeft field of the parent TK_FUNCTION node. +*/ +SQLITE_PRIVATE void sqlite3ExprAddFunctionOrderBy( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The function call to which ORDER BY is to be added */ + ExprList *pOrderBy /* The ORDER BY clause to add */ +){ + Expr *pOB; + sqlite3 *db = pParse->db; + if( NEVER(pOrderBy==0) ){ + assert( db->mallocFailed ); + return; + } + if( pExpr==0 ){ + assert( db->mallocFailed ); + sqlite3ExprListDelete(db, pOrderBy); + return; + } + assert( pExpr->op==TK_FUNCTION ); + assert( pExpr->pLeft==0 ); + assert( ExprUseXList(pExpr) ); + if( pExpr->x.pList==0 || NEVER(pExpr->x.pList->nExpr==0) ){ + /* Ignore ORDER BY on zero-argument aggregates */ + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, pOrderBy); + return; + } + if( IsWindowFunc(pExpr) ){ + sqlite3ExprOrderByAggregateError(pParse, pExpr); + sqlite3ExprListDelete(db, pOrderBy); + return; + } + + pOB = sqlite3ExprAlloc(db, TK_ORDER, 0, 0); + if( pOB==0 ){ + sqlite3ExprListDelete(db, pOrderBy); + return; + } + pOB->x.pList = pOrderBy; + assert( ExprUseXList(pOB) ); + pExpr->pLeft = pOB; + ExprSetProperty(pOB, EP_FullSize); +} + /* ** Check to see if a function is usable according to current access ** rules: @@ -108684,6 +110374,7 @@ SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ assert( p!=0 ); assert( db!=0 ); +exprDeleteRestart: assert( !ExprUseUValue(p) || p->u.iValue>=0 ); assert( !ExprUseYWin(p) || !ExprUseYSub(p) ); assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed ); @@ -108699,7 +110390,6 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){ /* The Expr.x union is never used at the same time as Expr.pRight */ assert( (ExprUseXList(p) && p->x.pList==0) || p->pRight==0 ); - if( p->pLeft && p->op!=TK_SELECT_COLUMN ) sqlite3ExprDeleteNN(db, p->pLeft); if( p->pRight ){ assert( !ExprHasProperty(p, EP_WinFunc) ); sqlite3ExprDeleteNN(db, p->pRight); @@ -108714,6 +110404,19 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ } #endif } + if( p->pLeft && p->op!=TK_SELECT_COLUMN ){ + Expr *pLeft = p->pLeft; + if( !ExprHasProperty(p, EP_Static) + && !ExprHasProperty(pLeft, EP_Static) + ){ + /* Avoid unnecessary recursion on unary operators */ + sqlite3DbNNFreeNN(db, p); + p = pLeft; + goto exprDeleteRestart; + }else{ + sqlite3ExprDeleteNN(db, pLeft); + } + } } if( !ExprHasProperty(p, EP_Static) ){ sqlite3DbNNFreeNN(db, p); @@ -108722,6 +110425,9 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ if( p ) sqlite3ExprDeleteNN(db, p); } +SQLITE_PRIVATE void sqlite3ExprDeleteGeneric(sqlite3 *db, void *p){ + if( ALWAYS(p) ) sqlite3ExprDeleteNN(db, (Expr*)p); +} /* ** Clear both elements of an OnOrUsing object @@ -108743,13 +110449,11 @@ SQLITE_PRIVATE void sqlite3ClearOnOrUsing(sqlite3 *db, OnOrUsing *p){ ** ** The pExpr might be deleted immediately on an OOM error. ** -** The deferred delete is (currently) implemented by adding the -** pExpr to the pParse->pConstExpr list with a register number of 0. +** Return 0 if the delete was successfully deferred. Return non-zero +** if the delete happened immediately because of an OOM. */ -SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3ExprDelete, - pExpr); +SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ + return 0==sqlite3ParserAddCleanup(pParse, sqlite3ExprDeleteGeneric, pExpr); } /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the @@ -108814,11 +110518,7 @@ static int dupedExprStructSize(const Expr *p, int flags){ assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */ assert( EXPR_FULLSIZE<=0xfff ); assert( (0xfff & (EP_Reduced|EP_TokenOnly))==0 ); - if( 0==flags || p->op==TK_SELECT_COLUMN -#ifndef SQLITE_OMIT_WINDOWFUNC - || ExprHasProperty(p, EP_WinFunc) -#endif - ){ + if( 0==flags || ExprHasProperty(p, EP_FullSize) ){ nSize = EXPR_FULLSIZE; }else{ assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); @@ -108849,56 +110549,93 @@ static int dupedExprNodeSize(const Expr *p, int flags){ /* ** Return the number of bytes required to create a duplicate of the -** expression passed as the first argument. The second argument is a -** mask containing EXPRDUP_XXX flags. +** expression passed as the first argument. ** ** The value returned includes space to create a copy of the Expr struct ** itself and the buffer referred to by Expr.u.zToken, if any. ** -** If the EXPRDUP_REDUCE flag is set, then the return value includes -** space to duplicate all Expr nodes in the tree formed by Expr.pLeft -** and Expr.pRight variables (but not for any structures pointed to or -** descended from the Expr.x.pList or Expr.x.pSelect variables). +** The return value includes space to duplicate all Expr nodes in the +** tree formed by Expr.pLeft and Expr.pRight, but not any other +** substructure such as Expr.x.pList, Expr.x.pSelect, and Expr.y.pWin. */ -static int dupedExprSize(const Expr *p, int flags){ - int nByte = 0; - if( p ){ - nByte = dupedExprNodeSize(p, flags); - if( flags&EXPRDUP_REDUCE ){ - nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags); - } - } +static int dupedExprSize(const Expr *p){ + int nByte; + assert( p!=0 ); + nByte = dupedExprNodeSize(p, EXPRDUP_REDUCE); + if( p->pLeft ) nByte += dupedExprSize(p->pLeft); + if( p->pRight ) nByte += dupedExprSize(p->pRight); + assert( nByte==ROUND8(nByte) ); return nByte; } /* -** This function is similar to sqlite3ExprDup(), except that if pzBuffer -** is not NULL then *pzBuffer is assumed to point to a buffer large enough -** to store the copy of expression p, the copies of p->u.zToken -** (if applicable), and the copies of the p->pLeft and p->pRight expressions, -** if any. Before returning, *pzBuffer is set to the first byte past the -** portion of the buffer copied into by this function. +** An EdupBuf is a memory allocation used to stored multiple Expr objects +** together with their Expr.zToken content. This is used to help implement +** compression while doing sqlite3ExprDup(). The top-level Expr does the +** allocation for itself and many of its decendents, then passes an instance +** of the structure down into exprDup() so that they decendents can have +** access to that memory. */ -static Expr *exprDup(sqlite3 *db, const Expr *p, int dupFlags, u8 **pzBuffer){ +typedef struct EdupBuf EdupBuf; +struct EdupBuf { + u8 *zAlloc; /* Memory space available for storage */ +#ifdef SQLITE_DEBUG + u8 *zEnd; /* First byte past the end of memory */ +#endif +}; + +/* +** This function is similar to sqlite3ExprDup(), except that if pEdupBuf +** is not NULL then it points to memory that can be used to store a copy +** of the input Expr p together with its p->u.zToken (if any). pEdupBuf +** is updated with the new buffer tail prior to returning. +*/ +static Expr *exprDup( + sqlite3 *db, /* Database connection (for memory allocation) */ + const Expr *p, /* Expr tree to be duplicated */ + int dupFlags, /* EXPRDUP_REDUCE for compression. 0 if not */ + EdupBuf *pEdupBuf /* Preallocated storage space, or NULL */ +){ Expr *pNew; /* Value to return */ - u8 *zAlloc; /* Memory space from which to build Expr object */ + EdupBuf sEdupBuf; /* Memory space from which to build Expr object */ u32 staticFlag; /* EP_Static if space not obtained from malloc */ + int nToken = -1; /* Space needed for p->u.zToken. -1 means unknown */ assert( db!=0 ); assert( p ); assert( dupFlags==0 || dupFlags==EXPRDUP_REDUCE ); - assert( pzBuffer==0 || dupFlags==EXPRDUP_REDUCE ); + assert( pEdupBuf==0 || dupFlags==EXPRDUP_REDUCE ); /* Figure out where to write the new Expr structure. */ - if( pzBuffer ){ - zAlloc = *pzBuffer; + if( pEdupBuf ){ + sEdupBuf.zAlloc = pEdupBuf->zAlloc; +#ifdef SQLITE_DEBUG + sEdupBuf.zEnd = pEdupBuf->zEnd; +#endif staticFlag = EP_Static; - assert( zAlloc!=0 ); + assert( sEdupBuf.zAlloc!=0 ); + assert( dupFlags==EXPRDUP_REDUCE ); }else{ - zAlloc = sqlite3DbMallocRawNN(db, dupedExprSize(p, dupFlags)); + int nAlloc; + if( dupFlags ){ + nAlloc = dupedExprSize(p); + }else if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nToken = sqlite3Strlen30NN(p->u.zToken)+1; + nAlloc = ROUND8(EXPR_FULLSIZE + nToken); + }else{ + nToken = 0; + nAlloc = ROUND8(EXPR_FULLSIZE); + } + assert( nAlloc==ROUND8(nAlloc) ); + sEdupBuf.zAlloc = sqlite3DbMallocRawNN(db, nAlloc); +#ifdef SQLITE_DEBUG + sEdupBuf.zEnd = sEdupBuf.zAlloc ? sEdupBuf.zAlloc+nAlloc : 0; +#endif + staticFlag = 0; } - pNew = (Expr *)zAlloc; + pNew = (Expr *)sEdupBuf.zAlloc; + assert( EIGHT_BYTE_ALIGNMENT(pNew) ); if( pNew ){ /* Set nNewSize to the size allocated for the structure pointed to @@ -108907,22 +110644,27 @@ static Expr *exprDup(sqlite3 *db, const Expr *p, int dupFlags, u8 **pzBuffer){ ** by the copy of the p->u.zToken string (if any). */ const unsigned nStructSize = dupedExprStructSize(p, dupFlags); - const int nNewSize = nStructSize & 0xfff; - int nToken; - if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ - nToken = sqlite3Strlen30(p->u.zToken) + 1; - }else{ - nToken = 0; + int nNewSize = nStructSize & 0xfff; + if( nToken<0 ){ + if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nToken = sqlite3Strlen30(p->u.zToken) + 1; + }else{ + nToken = 0; + } } if( dupFlags ){ + assert( (int)(sEdupBuf.zEnd - sEdupBuf.zAlloc) >= nNewSize+nToken ); assert( ExprHasProperty(p, EP_Reduced)==0 ); - memcpy(zAlloc, p, nNewSize); + memcpy(sEdupBuf.zAlloc, p, nNewSize); }else{ u32 nSize = (u32)exprStructSize(p); - memcpy(zAlloc, p, nSize); + assert( (int)(sEdupBuf.zEnd - sEdupBuf.zAlloc) >= + (int)EXPR_FULLSIZE+nToken ); + memcpy(sEdupBuf.zAlloc, p, nSize); if( nSizeu.zToken string, if any. */ - if( nToken ){ - char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize]; + assert( nToken>=0 ); + if( nToken>0 ){ + char *zToken = pNew->u.zToken = (char*)&sEdupBuf.zAlloc[nNewSize]; memcpy(zToken, p->u.zToken, nToken); + nNewSize += nToken; } + sEdupBuf.zAlloc += ROUND8(nNewSize); + + if( ((p->flags|pNew->flags)&(EP_TokenOnly|EP_Leaf))==0 ){ - if( 0==((p->flags|pNew->flags) & (EP_TokenOnly|EP_Leaf)) ){ /* Fill in the pNew->x.pSelect or pNew->x.pList member. */ if( ExprUseXSelect(p) ){ pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, dupFlags); }else{ - pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, dupFlags); + pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, + p->op!=TK_ORDER ? dupFlags : 0); } - } - /* Fill in pNew->pLeft and pNew->pRight. */ - if( ExprHasProperty(pNew, EP_Reduced|EP_TokenOnly|EP_WinFunc) ){ - zAlloc += dupedExprNodeSize(p, dupFlags); - if( !ExprHasProperty(pNew, EP_TokenOnly|EP_Leaf) ){ - pNew->pLeft = p->pLeft ? - exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc) : 0; - pNew->pRight = p->pRight ? - exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc) : 0; - } #ifndef SQLITE_OMIT_WINDOWFUNC if( ExprHasProperty(p, EP_WinFunc) ){ pNew->y.pWin = sqlite3WindowDup(db, pNew, p->y.pWin); assert( ExprHasProperty(pNew, EP_WinFunc) ); } #endif /* SQLITE_OMIT_WINDOWFUNC */ - if( pzBuffer ){ - *pzBuffer = zAlloc; - } - }else{ - if( !ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ - if( pNew->op==TK_SELECT_COLUMN ){ + + /* Fill in pNew->pLeft and pNew->pRight. */ + if( dupFlags ){ + if( p->op==TK_SELECT_COLUMN ){ + pNew->pLeft = p->pLeft; + assert( p->pRight==0 + || p->pRight==p->pLeft + || ExprHasProperty(p->pLeft, EP_Subquery) ); + }else{ + pNew->pLeft = p->pLeft ? + exprDup(db, p->pLeft, EXPRDUP_REDUCE, &sEdupBuf) : 0; + } + pNew->pRight = p->pRight ? + exprDup(db, p->pRight, EXPRDUP_REDUCE, &sEdupBuf) : 0; + }else{ + if( p->op==TK_SELECT_COLUMN ){ pNew->pLeft = p->pLeft; - assert( p->pRight==0 || p->pRight==p->pLeft - || ExprHasProperty(p->pLeft, EP_Subquery) ); + assert( p->pRight==0 + || p->pRight==p->pLeft + || ExprHasProperty(p->pLeft, EP_Subquery) ); }else{ pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0); } @@ -108980,6 +110728,8 @@ static Expr *exprDup(sqlite3 *db, const Expr *p, int dupFlags, u8 **pzBuffer){ } } } + if( pEdupBuf ) memcpy(pEdupBuf, &sEdupBuf, sizeof(sEdupBuf)); + assert( sEdupBuf.zAlloc <= sEdupBuf.zEnd ); return pNew; } @@ -109139,17 +110889,19 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, const SrcList *p, int fla pNewItem->iCursor = pOldItem->iCursor; pNewItem->addrFillSub = pOldItem->addrFillSub; pNewItem->regReturn = pOldItem->regReturn; + pNewItem->regResult = pOldItem->regResult; if( pNewItem->fg.isIndexedBy ){ pNewItem->u1.zIndexedBy = sqlite3DbStrDup(db, pOldItem->u1.zIndexedBy); + }else if( pNewItem->fg.isTabFunc ){ + pNewItem->u1.pFuncArg = + sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags); + }else{ + pNewItem->u1.nRow = pOldItem->u1.nRow; } pNewItem->u2 = pOldItem->u2; if( pNewItem->fg.isCte ){ pNewItem->u2.pCteUse->nUse++; } - if( pNewItem->fg.isTabFunc ){ - pNewItem->u1.pFuncArg = - sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags); - } pTab = pNewItem->pTab = pOldItem->pTab; if( pTab ){ pTab->nTabRef++; @@ -109244,11 +110996,7 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, const Select *p, int flags) ** initially NULL, then create a new expression list. ** ** The pList argument must be either NULL or a pointer to an ExprList -** obtained from a prior call to sqlite3ExprListAppend(). This routine -** may not be used with an ExprList obtained from sqlite3ExprListDup(). -** Reason: This routine assumes that the number of slots in pList->a[] -** is a power of two. That is true for sqlite3ExprListAppend() returns -** but is not necessarily true from the return value of sqlite3ExprListDup(). +** obtained from a prior call to sqlite3ExprListAppend(). ** ** If a memory allocation error occurs, the entire list is freed and ** NULL is returned. If non-NULL is returned, then it is guaranteed @@ -109513,6 +111261,9 @@ static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ if( pList ) exprListDeleteNN(db, pList); } +SQLITE_PRIVATE void sqlite3ExprListDeleteGeneric(sqlite3 *db, void *pList){ + if( ALWAYS(pList) ) exprListDeleteNN(db, (ExprList*)pList); +} /* ** Return the bitwise-OR of all Expr.flags fields in the given @@ -109616,6 +111367,54 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){ return pExpr; } +/* +** pExpr is a TK_FUNCTION node. Try to determine whether or not the +** function is a constant function. A function is constant if all of +** the following are true: +** +** (1) It is a scalar function (not an aggregate or window function) +** (2) It has either the SQLITE_FUNC_CONSTANT or SQLITE_FUNC_SLOCHNG +** property. +** (3) All of its arguments are constants +** +** This routine sets pWalker->eCode to 0 if pExpr is not a constant. +** It makes no changes to pWalker->eCode if pExpr is constant. In +** every case, it returns WRC_Abort. +** +** Called as a service subroutine from exprNodeIsConstant(). +*/ +static SQLITE_NOINLINE int exprNodeIsConstantFunction( + Walker *pWalker, + Expr *pExpr +){ + int n; /* Number of arguments */ + ExprList *pList; /* List of arguments */ + FuncDef *pDef; /* The function */ + sqlite3 *db; /* The database */ + + assert( pExpr->op==TK_FUNCTION ); + if( ExprHasProperty(pExpr, EP_TokenOnly) + || (pList = pExpr->x.pList)==0 + ){; + n = 0; + }else{ + n = pList->nExpr; + sqlite3WalkExprList(pWalker, pList); + if( pWalker->eCode==0 ) return WRC_Abort; + } + db = pWalker->pParse->db; + pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0); + if( pDef==0 + || pDef->xFinalize!=0 + || (pDef->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0 + || ExprHasProperty(pExpr, EP_WinFunc) + ){ + pWalker->eCode = 0; + return WRC_Abort; + } + return WRC_Prune; +} + /* ** These routines are Walker callbacks used to check expressions to @@ -109644,6 +111443,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){ ** malformed schema error. */ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ + assert( pWalker->eCode>0 ); /* If pWalker->eCode is 2 then any term of the expression that comes from ** the ON or USING clauses of an outer join disqualifies the expression @@ -109663,6 +111463,8 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ ){ if( pWalker->eCode==5 ) ExprSetProperty(pExpr, EP_FromDDL); return WRC_Continue; + }else if( pWalker->pParse ){ + return exprNodeIsConstantFunction(pWalker, pExpr); }else{ pWalker->eCode = 0; return WRC_Abort; @@ -109691,9 +111493,11 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ case TK_IF_NULL_ROW: case TK_REGISTER: case TK_DOT: + case TK_RAISE: testcase( pExpr->op==TK_REGISTER ); testcase( pExpr->op==TK_IF_NULL_ROW ); testcase( pExpr->op==TK_DOT ); + testcase( pExpr->op==TK_RAISE ); pWalker->eCode = 0; return WRC_Abort; case TK_VARIABLE: @@ -109715,15 +111519,15 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ return WRC_Continue; } } -static int exprIsConst(Expr *p, int initFlag, int iCur){ +static int exprIsConst(Parse *pParse, Expr *p, int initFlag){ Walker w; w.eCode = initFlag; + w.pParse = pParse; w.xExprCallback = exprNodeIsConstant; w.xSelectCallback = sqlite3SelectWalkFail; #ifdef SQLITE_DEBUG w.xSelectCallback2 = sqlite3SelectWalkAssert2; #endif - w.u.iCur = iCur; sqlite3WalkExpr(&w, p); return w.eCode; } @@ -109735,9 +111539,15 @@ static int exprIsConst(Expr *p, int initFlag, int iCur){ ** For the purposes of this function, a double-quoted string (ex: "abc") ** is considered a variable but a single-quoted string (ex: 'abc') is ** a constant. +** +** The pParse parameter may be NULL. But if it is NULL, there is no way +** to determine if function calls are constant or not, and hence all +** function calls will be considered to be non-constant. If pParse is +** not NULL, then a function call might be constant, depending on the +** function and on its parameters. */ -SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){ - return exprIsConst(p, 1, 0); +SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse *pParse, Expr *p){ + return exprIsConst(pParse, p, 1); } /* @@ -109753,8 +111563,24 @@ SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){ ** can be added to the pParse->pConstExpr list and evaluated once when ** the prepared statement starts up. See sqlite3ExprCodeRunJustOnce(). */ -SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ - return exprIsConst(p, 2, 0); +static int sqlite3ExprIsConstantNotJoin(Parse *pParse, Expr *p){ + return exprIsConst(pParse, p, 2); +} + +/* +** This routine examines sub-SELECT statements as an expression is being +** walked as part of sqlite3ExprIsTableConstant(). Sub-SELECTs are considered +** constant as long as they are uncorrelated - meaning that they do not +** contain any terms from outer contexts. +*/ +static int exprSelectWalkTableConstant(Walker *pWalker, Select *pSelect){ + assert( pSelect!=0 ); + assert( pWalker->eCode==3 || pWalker->eCode==0 ); + if( (pSelect->selFlags & SF_Correlated)!=0 ){ + pWalker->eCode = 0; + return WRC_Abort; + } + return WRC_Prune; } /* @@ -109762,9 +111588,26 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){ ** for any single row of the table with cursor iCur. In other words, the ** expression must not refer to any non-deterministic function nor any ** table other than iCur. +** +** Consider uncorrelated subqueries to be constants if the bAllowSubq +** parameter is true. */ -SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ - return exprIsConst(p, 3, iCur); +static int sqlite3ExprIsTableConstant(Expr *p, int iCur, int bAllowSubq){ + Walker w; + w.eCode = 3; + w.pParse = 0; + w.xExprCallback = exprNodeIsConstant; + if( bAllowSubq ){ + w.xSelectCallback = exprSelectWalkTableConstant; + }else{ + w.xSelectCallback = sqlite3SelectWalkFail; +#ifdef SQLITE_DEBUG + w.xSelectCallback2 = sqlite3SelectWalkAssert2; +#endif + } + w.u.iCur = iCur; + sqlite3WalkExpr(&w, p); + return w.eCode; } /* @@ -109782,7 +111625,10 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ ** ** (1) pExpr cannot refer to any table other than pSrc->iCursor. ** -** (2) pExpr cannot use subqueries or non-deterministic functions. +** (2a) pExpr cannot use subqueries unless the bAllowSubq parameter is +** true and the subquery is non-correlated +** +** (2b) pExpr cannot use non-deterministic functions. ** ** (3) pSrc cannot be part of the left operand for a RIGHT JOIN. ** (Is there some way to relax this constraint?) @@ -109811,7 +111657,8 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint( Expr *pExpr, /* The constraint */ const SrcList *pSrcList, /* Complete FROM clause */ - int iSrc /* Which element of pSrcList to use */ + int iSrc, /* Which element of pSrcList to use */ + int bAllowSubq /* Allow non-correlated subqueries */ ){ const SrcItem *pSrc = &pSrcList->a[iSrc]; if( pSrc->fg.jointype & JT_LTORJ ){ @@ -109836,7 +111683,8 @@ SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint( } } } - return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor); /* rules (1), (2) */ + /* Rules (1), (2a), and (2b) handled by the following: */ + return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor, bAllowSubq); } @@ -109921,7 +111769,7 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse *pParse, Expr *p, ExprLi */ SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){ assert( isInit==0 || isInit==1 ); - return exprIsConst(p, 4+isInit, 0); + return exprIsConst(0, p, 4+isInit); } #ifdef SQLITE_ENABLE_CURSOR_HINTS @@ -110011,10 +111859,14 @@ SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){ return 0; case TK_COLUMN: assert( ExprUseYTab(p) ); - return ExprHasProperty(p, EP_CanBeNull) || - p->y.pTab==0 || /* Reference to column of index on expression */ - (p->iColumn>=0 + return ExprHasProperty(p, EP_CanBeNull) + || NEVER(p->y.pTab==0) /* Reference to column of index on expr */ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + || (p->iColumn==XN_ROWID && IsView(p->y.pTab)) +#endif + || (p->iColumn>=0 && p->y.pTab->aCol!=0 /* Possible due to prior error */ + && ALWAYS(p->iColumny.pTab->nCol) && p->y.pTab->aCol[p->iColumn].notNull==0); default: return 1; @@ -110074,6 +111926,27 @@ SQLITE_PRIVATE int sqlite3IsRowid(const char *z){ return 0; } +/* +** Return a pointer to a buffer containing a usable rowid alias for table +** pTab. An alias is usable if there is not an explicit user-defined column +** of the same name. +*/ +SQLITE_PRIVATE const char *sqlite3RowidAlias(Table *pTab){ + const char *azOpt[] = {"_ROWID_", "ROWID", "OID"}; + int ii; + assert( VisibleRowid(pTab) ); + for(ii=0; iinCol; iCol++){ + if( sqlite3_stricmp(azOpt[ii], pTab->aCol[iCol].zCnName)==0 ) break; + } + if( iCol==pTab->nCol ){ + return azOpt[ii]; + } + } + return 0; +} + /* ** pX is the RHS of an IN operator. If pX is a SELECT statement ** that can be simplified to a direct table access, then return @@ -110144,13 +112017,13 @@ static void sqlite3SetHasNullFlag(Vdbe *v, int iCur, int regHasNull){ ** The argument is an IN operator with a list (not a subquery) on the ** right-hand side. Return TRUE if that list is constant. */ -static int sqlite3InRhsIsConstant(Expr *pIn){ +static int sqlite3InRhsIsConstant(Parse *pParse, Expr *pIn){ Expr *pLHS; int res; assert( !ExprHasProperty(pIn, EP_xIsSelect) ); pLHS = pIn->pLeft; pIn->pLeft = 0; - res = sqlite3ExprIsConstant(pIn); + res = sqlite3ExprIsConstant(pParse, pIn); pIn->pLeft = pLHS; return res; } @@ -110419,7 +112292,7 @@ SQLITE_PRIVATE int sqlite3FindInIndex( if( eType==0 && (inFlags & IN_INDEX_NOOP_OK) && ExprUseXList(pX) - && (!sqlite3InRhsIsConstant(pX) || pX->x.pList->nExpr<=2) + && (!sqlite3InRhsIsConstant(pParse,pX) || pX->x.pList->nExpr<=2) ){ pParse->nTab--; /* Back out the allocation of the unused cursor */ iTab = -1; /* Cursor is not allocated */ @@ -110702,7 +112575,7 @@ SQLITE_PRIVATE void sqlite3CodeRhsOfIN( ** this code only executes once. Because for a non-constant ** expression we need to rerun this code each time. */ - if( addrOnce && !sqlite3ExprIsConstant(pE2) ){ + if( addrOnce && !sqlite3ExprIsConstant(pParse, pE2) ){ sqlite3VdbeChangeToNoop(v, addrOnce-1); sqlite3VdbeChangeToNoop(v, addrOnce); ExprClearProperty(pExpr, EP_Subrtn); @@ -111611,6 +113484,41 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup( } +/* +** Expresion pExpr is guaranteed to be a TK_COLUMN or equivalent. This +** function checks the Parse.pIdxPartExpr list to see if this column +** can be replaced with a constant value. If so, it generates code to +** put the constant value in a register (ideally, but not necessarily, +** register iTarget) and returns the register number. +** +** Or, if the TK_COLUMN cannot be replaced by a constant, zero is +** returned. +*/ +static int exprPartidxExprLookup(Parse *pParse, Expr *pExpr, int iTarget){ + IndexedExpr *p; + for(p=pParse->pIdxPartExpr; p; p=p->pIENext){ + if( pExpr->iColumn==p->iIdxCol && pExpr->iTable==p->iDataCur ){ + Vdbe *v = pParse->pVdbe; + int addr = 0; + int ret; + + if( p->bMaybeNullRow ){ + addr = sqlite3VdbeAddOp1(v, OP_IfNullRow, p->iIdxCur); + } + ret = sqlite3ExprCodeTarget(pParse, p->pExpr, iTarget); + sqlite3VdbeAddOp4(pParse->pVdbe, OP_Affinity, ret, 1, 0, + (const char*)&p->aff, 1); + if( addr ){ + sqlite3VdbeJumpHere(v, addr); + sqlite3VdbeChangeP3(v, addr, ret); + } + return ret; + } + } + return 0; +} + + /* ** Generate code into the current Vdbe to evaluate the given ** expression. Attempt to store the results in register "target". @@ -111647,6 +113555,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); op = pExpr->op; } + assert( op!=TK_ORDER ); switch( op ){ case TK_AGG_COLUMN: { AggInfo *pAggInfo = pExpr->pAggInfo; @@ -111660,7 +113569,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) #ifdef SQLITE_VDBE_COVERAGE /* Verify that the OP_Null above is exercised by tests ** tag-20230325-2 */ - sqlite3VdbeAddOp2(v, OP_NotNull, target, 1); + sqlite3VdbeAddOp3(v, OP_NotNull, target, 1, 20230325); VdbeCoverageNeverTaken(v); #endif break; @@ -111768,6 +113677,11 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) iTab = pParse->iSelfTab - 1; } } + else if( pParse->pIdxPartExpr + && 0!=(r1 = exprPartidxExprLookup(pParse, pExpr, target)) + ){ + return r1; + } assert( ExprUseYTab(pExpr) ); assert( pExpr->y.pTab!=0 ); iReg = sqlite3ExprCodeGetColumn(pParse, pExpr->y.pTab, @@ -111825,12 +113739,6 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) assert( pExpr->u.zToken!=0 ); assert( pExpr->u.zToken[0]!=0 ); sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target); - if( pExpr->u.zToken[1]!=0 ){ - const char *z = sqlite3VListNumToName(pParse->pVList, pExpr->iColumn); - assert( pExpr->u.zToken[0]=='?' || (z && !strcmp(pExpr->u.zToken, z)) ); - pParse->pVList[0] = 0; /* Indicate VList may no longer be enlarged */ - sqlite3VdbeAppendP4(v, (char*)z, P4_STATIC); - } return target; } case TK_REGISTER: { @@ -112004,7 +113912,9 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) } #endif - if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){ + if( ConstFactorOk(pParse) + && sqlite3ExprIsConstantNotJoin(pParse,pExpr) + ){ /* SQL functions can be expensive. So try to avoid running them ** multiple times if we know they always give the same result */ return sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1); @@ -112035,7 +113945,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) } for(i=0; ia[i].pExpr) ){ + if( i<32 && sqlite3ExprIsConstant(pParse, pFarg->a[i].pExpr) ){ testcase( i==31 ); constMask |= MASKBIT32(i); } @@ -112177,8 +114087,9 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( !ExprHasProperty(pExpr, EP_Collate) ){ /* A TK_COLLATE Expr node without the EP_Collate tag is a so-called ** "SOFT-COLLATE" that is added to constraints that are pushed down - ** from outer queries into sub-queries by the push-down optimization. - ** Clear subtypes as subtypes may not cross a subquery boundary. + ** from outer queries into sub-queries by the WHERE-clause push-down + ** optimization. Clear subtypes as subtypes may not cross a subquery + ** boundary. */ assert( pExpr->pLeft ); sqlite3ExprCode(pParse, pExpr->pLeft, target); @@ -112428,7 +114339,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) ** once. If no functions are involved, then factor the code out and put it at ** the end of the prepared statement in the initialization section. ** -** If regDest>=0 then the result is always stored in that register and the +** If regDest>0 then the result is always stored in that register and the ** result is not reusable. If regDest<0 then this routine is free to ** store the value wherever it wants. The register where the expression ** is stored is returned. When regDest<0, two identical expressions might @@ -112443,6 +114354,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeRunJustOnce( ){ ExprList *p; assert( ConstFactorOk(pParse) ); + assert( regDest!=0 ); p = pParse->pConstExpr; if( regDest<0 && p ){ struct ExprList_item *pItem; @@ -112501,7 +114413,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ if( ConstFactorOk(pParse) && ALWAYS(pExpr!=0) && pExpr->op!=TK_REGISTER - && sqlite3ExprIsConstantNotJoin(pExpr) + && sqlite3ExprIsConstantNotJoin(pParse, pExpr) ){ *pReg = 0; r2 = sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1); @@ -112533,8 +114445,10 @@ SQLITE_PRIVATE void sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){ inReg = sqlite3ExprCodeTarget(pParse, pExpr, target); if( inReg!=target ){ u8 op; - if( ALWAYS(pExpr) - && (ExprHasProperty(pExpr,EP_Subquery) || pExpr->op==TK_REGISTER) + Expr *pX = sqlite3ExprSkipCollateAndLikely(pExpr); + testcase( pX!=pExpr ); + if( ALWAYS(pX) + && (ExprHasProperty(pX,EP_Subquery) || pX->op==TK_REGISTER) ){ op = OP_Copy; }else{ @@ -112563,7 +114477,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, Expr *pExpr, int target){ ** might choose to code the expression at initialization time. */ SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ - if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pExpr) ){ + if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pParse,pExpr) ){ sqlite3ExprCodeRunJustOnce(pParse, pExpr, target); }else{ sqlite3ExprCodeCopy(pParse, pExpr, target); @@ -112622,7 +114536,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeExprList( sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i); } }else if( (flags & SQLITE_ECEL_FACTOR)!=0 - && sqlite3ExprIsConstantNotJoin(pExpr) + && sqlite3ExprIsConstantNotJoin(pParse,pExpr) ){ sqlite3ExprCodeRunJustOnce(pParse, pExpr, target+i); }else{ @@ -113254,8 +115168,8 @@ SQLITE_PRIVATE int sqlite3ExprListCompare(const ExprList *pA, const ExprList *pB */ SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr *pA,Expr *pB, int iTab){ return sqlite3ExprCompare(0, - sqlite3ExprSkipCollateAndLikely(pA), - sqlite3ExprSkipCollateAndLikely(pB), + sqlite3ExprSkipCollate(pA), + sqlite3ExprSkipCollate(pB), iTab); } @@ -113727,6 +115641,12 @@ SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList assert( pExpr->op==TK_AGG_FUNCTION ); assert( ExprUseXList(pExpr) ); sqlite3WalkExprList(&w, pExpr->x.pList); + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + assert( pExpr->pLeft->x.pList!=0 ); + sqlite3WalkExprList(&w, pExpr->pLeft->x.pList); + } #ifndef SQLITE_OMIT_WINDOWFUNC if( ExprHasProperty(pExpr, EP_WinFunc) ){ sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter); @@ -113767,9 +115687,8 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ && pAggInfo->aCol[iAgg].pCExpr==pExpr ){ pExpr = sqlite3ExprDup(db, pExpr, 0); - if( pExpr ){ + if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){ pAggInfo->aCol[iAgg].pCExpr = pExpr; - sqlite3ExprDeferredDelete(pParse, pExpr); } } }else{ @@ -113778,9 +115697,8 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ && pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ pExpr = sqlite3ExprDup(db, pExpr, 0); - if( pExpr ){ + if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){ pAggInfo->aFunc[iAgg].pFExpr = pExpr; - sqlite3ExprDeferredDelete(pParse, pExpr); } } } @@ -113974,13 +115892,14 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ case TK_AGG_FUNCTION: { if( (pNC->ncFlags & NC_InAggFunc)==0 && pWalker->walkerDepth==pExpr->op2 + && pExpr->pAggInfo==0 ){ /* Check to see if pExpr is a duplicate of another aggregate ** function that is already in the pAggInfo structure */ struct AggInfo_func *pItem = pAggInfo->aFunc; for(i=0; inFunc; i++, pItem++){ - if( pItem->pFExpr==pExpr ) break; + if( NEVER(pItem->pFExpr==pExpr) ) break; if( sqlite3ExprCompare(0, pItem->pFExpr, pExpr, -1)==0 ){ break; } @@ -113991,14 +115910,44 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ u8 enc = ENC(pParse->db); i = addAggInfoFunc(pParse->db, pAggInfo); if( i>=0 ){ + int nArg; assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); pItem = &pAggInfo->aFunc[i]; pItem->pFExpr = pExpr; assert( ExprUseUToken(pExpr) ); + nArg = pExpr->x.pList ? pExpr->x.pList->nExpr : 0; pItem->pFunc = sqlite3FindFunction(pParse->db, - pExpr->u.zToken, - pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0); - if( pExpr->flags & EP_Distinct ){ + pExpr->u.zToken, nArg, enc, 0); + assert( pItem->bOBUnique==0 ); + if( pExpr->pLeft + && (pItem->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL)==0 + ){ + /* The NEEDCOLL test above causes any ORDER BY clause on + ** aggregate min() or max() to be ignored. */ + ExprList *pOBList; + assert( nArg>0 ); + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + pItem->iOBTab = pParse->nTab++; + pOBList = pExpr->pLeft->x.pList; + assert( pOBList->nExpr>0 ); + assert( pItem->bOBUnique==0 ); + if( pOBList->nExpr==1 + && nArg==1 + && sqlite3ExprCompare(0,pOBList->a[0].pExpr, + pExpr->x.pList->a[0].pExpr,0)==0 + ){ + pItem->bOBPayload = 0; + pItem->bOBUnique = ExprHasProperty(pExpr, EP_Distinct); + }else{ + pItem->bOBPayload = 1; + } + pItem->bUseSubtype = + (pItem->pFunc->funcFlags & SQLITE_SUBTYPE)!=0; + }else{ + pItem->iOBTab = -1; + } + if( ExprHasProperty(pExpr, EP_Distinct) && !pItem->bOBUnique ){ pItem->iDistinct = pParse->nTab++; }else{ pItem->iDistinct = -1; @@ -114634,14 +116583,19 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ /* Verify that constraints are still satisfied */ if( pNew->pCheck!=0 || (pCol->notNull && (pCol->colFlags & COLFLAG_GENERATED)!=0) + || (pTab->tabFlags & TF_Strict)!=0 ){ sqlite3NestedParse(pParse, "SELECT CASE WHEN quick_check GLOB 'CHECK*'" " THEN raise(ABORT,'CHECK constraint failed')" + " WHEN quick_check GLOB 'non-* value in*'" + " THEN raise(ABORT,'type mismatch on DEFAULT')" " ELSE raise(ABORT,'NOT NULL constraint failed')" " END" " FROM pragma_quick_check(%Q,%Q)" - " WHERE quick_check GLOB 'CHECK*' OR quick_check GLOB 'NULL*'", + " WHERE quick_check GLOB 'CHECK*'" + " OR quick_check GLOB 'NULL*'" + " OR quick_check GLOB 'non-* value in*'", zTab, zDb ); } @@ -116445,7 +118399,12 @@ SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, const T if( i==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regOut); }else{ + char aff = pTab->aCol[i].affinity; + if( aff==SQLITE_AFF_REAL ){ + pTab->aCol[i].affinity = SQLITE_AFF_NUMERIC; + } sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut); + pTab->aCol[i].affinity = aff; } nField++; } @@ -116756,9 +118715,9 @@ static void openStatTable( typedef struct StatAccum StatAccum; typedef struct StatSample StatSample; struct StatSample { - tRowcnt *anEq; /* sqlite_stat4.nEq */ tRowcnt *anDLt; /* sqlite_stat4.nDLt */ #ifdef SQLITE_ENABLE_STAT4 + tRowcnt *anEq; /* sqlite_stat4.nEq */ tRowcnt *anLt; /* sqlite_stat4.nLt */ union { i64 iRowid; /* Rowid in main table of the key */ @@ -116916,9 +118875,9 @@ static void statInit( /* Allocate the space required for the StatAccum object */ n = sizeof(*p) - + sizeof(tRowcnt)*nColUp /* StatAccum.anEq */ - + sizeof(tRowcnt)*nColUp; /* StatAccum.anDLt */ + + sizeof(tRowcnt)*nColUp; /* StatAccum.anDLt */ #ifdef SQLITE_ENABLE_STAT4 + n += sizeof(tRowcnt)*nColUp; /* StatAccum.anEq */ if( mxSample ){ n += sizeof(tRowcnt)*nColUp /* StatAccum.anLt */ + sizeof(StatSample)*(nCol+mxSample) /* StatAccum.aBest[], a[] */ @@ -116939,9 +118898,9 @@ static void statInit( p->nKeyCol = nKeyCol; p->nSkipAhead = 0; p->current.anDLt = (tRowcnt*)&p[1]; - p->current.anEq = &p->current.anDLt[nColUp]; #ifdef SQLITE_ENABLE_STAT4 + p->current.anEq = &p->current.anDLt[nColUp]; p->mxSample = p->nLimit==0 ? mxSample : 0; if( mxSample ){ u8 *pSpace; /* Allocated space not yet assigned */ @@ -117208,7 +119167,9 @@ static void statPush( if( p->nRow==0 ){ /* This is the first call to this function. Do initialization. */ +#ifdef SQLITE_ENABLE_STAT4 for(i=0; inCol; i++) p->current.anEq[i] = 1; +#endif }else{ /* Second and subsequent calls get processed here */ #ifdef SQLITE_ENABLE_STAT4 @@ -117217,15 +119178,17 @@ static void statPush( /* Update anDLt[], anLt[] and anEq[] to reflect the values that apply ** to the current row of the index. */ +#ifdef SQLITE_ENABLE_STAT4 for(i=0; icurrent.anEq[i]++; } +#endif for(i=iChng; inCol; i++){ p->current.anDLt[i]++; #ifdef SQLITE_ENABLE_STAT4 if( p->mxSample ) p->current.anLt[i] += p->current.anEq[i]; -#endif p->current.anEq[i] = 1; +#endif } } @@ -117359,7 +119322,9 @@ static void statGet( u64 iVal = (p->nRow + nDistinct - 1) / nDistinct; if( iVal==2 && p->nRow*10 <= nDistinct*11 ) iVal = 1; sqlite3_str_appendf(&sStat, " %llu", iVal); - assert( p->current.anEq[i] ); +#ifdef SQLITE_ENABLE_STAT4 + assert( p->current.anEq[i] || p->nRow==0 ); +#endif } sqlite3ResultStrAccum(context, &sStat); } @@ -117543,7 +119508,7 @@ static void analyzeOneTable( for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ int nCol; /* Number of columns in pIdx. "N" */ - int addrRewind; /* Address of "OP_Rewind iIdxCur" */ + int addrGotoEnd; /* Address of "OP_Rewind iIdxCur" */ int addrNextRow; /* Address of "next_row:" */ const char *zIdxName; /* Name of the index */ int nColTest; /* Number of columns to test for changes */ @@ -117567,9 +119532,14 @@ static void analyzeOneTable( /* ** Pseudo-code for loop that calls stat_push(): ** - ** Rewind csr - ** if eof(csr) goto end_of_scan; ** regChng = 0 + ** Rewind csr + ** if eof(csr){ + ** stat_init() with count = 0; + ** goto end_of_scan; + ** } + ** count() + ** stat_init() ** goto chng_addr_0; ** ** next_row: @@ -117608,41 +119578,36 @@ static void analyzeOneTable( sqlite3VdbeSetP4KeyInfo(pParse, pIdx); VdbeComment((v, "%s", pIdx->zName)); - /* Invoke the stat_init() function. The arguments are: + /* Implementation of the following: ** + ** regChng = 0 + ** Rewind csr + ** if eof(csr){ + ** stat_init() with count = 0; + ** goto end_of_scan; + ** } + ** count() + ** stat_init() + ** goto chng_addr_0; + */ + assert( regTemp2==regStat+4 ); + sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2); + + /* Arguments to stat_init(): ** (1) the number of columns in the index including the rowid ** (or for a WITHOUT ROWID table, the number of PK columns), ** (2) the number of columns in the key without the rowid/pk - ** (3) estimated number of rows in the index, - */ + ** (3) estimated number of rows in the index. */ sqlite3VdbeAddOp2(v, OP_Integer, nCol, regStat+1); assert( regRowid==regStat+2 ); sqlite3VdbeAddOp2(v, OP_Integer, pIdx->nKeyCol, regRowid); -#ifdef SQLITE_ENABLE_STAT4 - if( OptimizationEnabled(db, SQLITE_Stat4) ){ - sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regTemp); - addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur); - VdbeCoverage(v); - }else -#endif - { - addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur); - VdbeCoverage(v); - sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp, 1); - } - assert( regTemp2==regStat+4 ); - sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2); + sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp, + OptimizationDisabled(db, SQLITE_Stat4)); sqlite3VdbeAddFunctionCall(pParse, 0, regStat+1, regStat, 4, &statInitFuncdef, 0); + addrGotoEnd = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur); + VdbeCoverage(v); - /* Implementation of the following: - ** - ** Rewind csr - ** if eof(csr) goto end_of_scan; - ** regChng = 0 - ** goto next_push_0; - ** - */ sqlite3VdbeAddOp2(v, OP_Integer, 0, regChng); addrNextRow = sqlite3VdbeCurrentAddr(v); @@ -117749,6 +119714,12 @@ static void analyzeOneTable( } /* Add the entry to the stat1 table. */ + if( pIdx->pPartIdxWhere ){ + /* Partial indexes might get a zero-entry in sqlite_stat1. But + ** an empty table is omitted from sqlite_stat1. */ + sqlite3VdbeJumpHere(v, addrGotoEnd); + addrGotoEnd = 0; + } callStatGet(pParse, regStat, STAT_GET_STAT1, regStat1); assert( "BBB"[0]==SQLITE_AFF_TEXT ); sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0); @@ -117772,6 +119743,13 @@ static void analyzeOneTable( int addrIsNull; u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound; + /* No STAT4 data is generated if the number of rows is zero */ + if( addrGotoEnd==0 ){ + sqlite3VdbeAddOp2(v, OP_Cast, regStat1, SQLITE_AFF_INTEGER); + addrGotoEnd = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); + VdbeCoverage(v); + } + if( doOnce ){ int mxCol = nCol; Index *pX; @@ -117824,7 +119802,7 @@ static void analyzeOneTable( #endif /* SQLITE_ENABLE_STAT4 */ /* End of analysis */ - sqlite3VdbeJumpHere(v, addrRewind); + if( addrGotoEnd ) sqlite3VdbeJumpHere(v, addrGotoEnd); } @@ -118048,6 +120026,16 @@ static void decodeIntArray( while( z[0]!=0 && z[0]!=' ' ) z++; while( z[0]==' ' ) z++; } + + /* Set the bLowQual flag if the peak number of rows obtained + ** from a full equality match is so large that a full table scan + ** seems likely to be faster than using the index. + */ + if( aLog[0] > 66 /* Index has more than 100 rows */ + && aLog[0] <= aLog[nOut-1] /* And only a single value seen */ + ){ + pIndex->bLowQual = 1; + } } } @@ -119563,7 +121551,7 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ } sqlite3VdbeAddOp0(v, OP_Halt); -#if SQLITE_USER_AUTHENTICATION +#if SQLITE_USER_AUTHENTICATION && !defined(SQLITE_OMIT_SHARED_CACHE) if( pParse->nTableLock>0 && db->init.busy==0 ){ sqlite3UserAuthInit(db); if( db->auth.authLevelpAinc ) sqlite3AutoincrementBegin(pParse); - /* Code constant expressions that where factored out of inner loops. - ** - ** The pConstExpr list might also contain expressions that we simply - ** want to keep around until the Parse object is deleted. Such - ** expressions have iConstExprReg==0. Do not generate code for - ** those expressions, of course. + /* Code constant expressions that were factored out of inner loops. */ if( pParse->pConstExpr ){ ExprList *pEL = pParse->pConstExpr; pParse->okConstFactor = 0; for(i=0; inExpr; i++){ - int iReg = pEL->a[i].u.iConstExprReg; - sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); + assert( pEL->a[i].u.iConstExprReg>0 ); + sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg); } } @@ -120099,7 +122082,7 @@ SQLITE_PRIVATE void sqlite3ColumnSetExpr( */ SQLITE_PRIVATE Expr *sqlite3ColumnExpr(Table *pTab, Column *pCol){ if( pCol->iDflt==0 ) return 0; - if( NEVER(!IsOrdinaryTable(pTab)) ) return 0; + if( !IsOrdinaryTable(pTab) ) return 0; if( NEVER(pTab->u.tab.pDfltList==0) ) return 0; if( NEVER(pTab->u.tab.pDfltList->nExpriDflt) ) return 0; return pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr; @@ -120252,6 +122235,9 @@ SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ if( db->pnBytesFreed==0 && (--pTable->nTabRef)>0 ) return; deleteTable(db, pTable); } +SQLITE_PRIVATE void sqlite3DeleteTableGeneric(sqlite3 *db, void *pTable){ + sqlite3DeleteTable(db, (Table*)pTable); +} /* @@ -120786,20 +122772,14 @@ SQLITE_PRIVATE void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){ } #endif -/* -** Name of the special TEMP trigger used to implement RETURNING. The -** name begins with "sqlite_" so that it is guaranteed not to collide -** with any application-generated triggers. -*/ -#define RETURNING_TRIGGER_NAME "sqlite_returning" - /* ** Clean up the data structures associated with the RETURNING clause. */ -static void sqlite3DeleteReturning(sqlite3 *db, Returning *pRet){ +static void sqlite3DeleteReturning(sqlite3 *db, void *pArg){ + Returning *pRet = (Returning*)pArg; Hash *pHash; pHash = &(db->aDb[1].pSchema->trigHash); - sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, 0); + sqlite3HashInsert(pHash, pRet->zName, 0); sqlite3ExprListDelete(db, pRet->pReturnEL); sqlite3DbFree(db, pRet); } @@ -120838,11 +122818,12 @@ SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){ pParse->u1.pReturning = pRet; pRet->pParse = pParse; pRet->pReturnEL = pList; - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3DeleteReturning, pRet); + sqlite3ParserAddCleanup(pParse, sqlite3DeleteReturning, pRet); testcase( pParse->earlyCleanup ); if( db->mallocFailed ) return; - pRet->retTrig.zName = RETURNING_TRIGGER_NAME; + sqlite3_snprintf(sizeof(pRet->zName), pRet->zName, + "sqlite_returning_%p", pParse); + pRet->retTrig.zName = pRet->zName; pRet->retTrig.op = TK_RETURNING; pRet->retTrig.tr_tm = TRIGGER_AFTER; pRet->retTrig.bReturning = 1; @@ -120853,9 +122834,9 @@ SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){ pRet->retTStep.pTrig = &pRet->retTrig; pRet->retTStep.pExprList = pList; pHash = &(db->aDb[1].pSchema->trigHash); - assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0 + assert( sqlite3HashFind(pHash, pRet->zName)==0 || pParse->nErr || pParse->ifNotExists ); - if( sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, &pRet->retTrig) + if( sqlite3HashInsert(pHash, pRet->zName, &pRet->retTrig) ==&pRet->retTrig ){ sqlite3OomFault(db); } @@ -121036,7 +123017,8 @@ SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn, Column *pCol){ assert( zIn!=0 ); while( zIn[0] ){ - h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff]; + u8 x = *(u8*)zIn; + h = (h<<8) + sqlite3UpperToLower[x]; zIn++; if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */ aff = SQLITE_AFF_TEXT; @@ -122208,20 +124190,20 @@ SQLITE_PRIVATE void sqlite3EndTable( int regRowid; /* Rowid of the next row to insert */ int addrInsLoop; /* Top of the loop for inserting rows */ Table *pSelTab; /* A table that describes the SELECT results */ + int iCsr; /* Write cursor on the new table */ if( IN_SPECIAL_PARSE ){ pParse->rc = SQLITE_ERROR; pParse->nErr++; return; } + iCsr = pParse->nTab++; regYield = ++pParse->nMem; regRec = ++pParse->nMem; regRowid = ++pParse->nMem; - assert(pParse->nTab==1); sqlite3MayAbort(pParse); - sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb); + sqlite3VdbeAddOp3(v, OP_OpenWrite, iCsr, pParse->regRoot, iDb); sqlite3VdbeChangeP5(v, OPFLAG_P2ISREG); - pParse->nTab = 2; addrTop = sqlite3VdbeCurrentAddr(v) + 1; sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop); if( pParse->nErr ) return; @@ -122242,11 +124224,11 @@ SQLITE_PRIVATE void sqlite3EndTable( VdbeCoverage(v); sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec); sqlite3TableAffinity(v, p, 0); - sqlite3VdbeAddOp2(v, OP_NewRowid, 1, regRowid); - sqlite3VdbeAddOp3(v, OP_Insert, 1, regRec, regRowid); + sqlite3VdbeAddOp2(v, OP_NewRowid, iCsr, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iCsr, regRec, regRowid); sqlite3VdbeGoto(v, addrInsLoop); sqlite3VdbeJumpHere(v, addrInsLoop); - sqlite3VdbeAddOp1(v, OP_Close, 1); + sqlite3VdbeAddOp1(v, OP_Close, iCsr); } /* Compute the complete text of the CREATE statement */ @@ -122299,6 +124281,14 @@ SQLITE_PRIVATE void sqlite3EndTable( /* Reparse everything to update our internal data structures */ sqlite3VdbeAddParseSchemaOp(v, iDb, sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName),0); + + /* Test for cycles in generated columns and illegal expressions + ** in CHECK constraints and in DEFAULT clauses. */ + if( p->tabFlags & TF_HasGenerated ){ + sqlite3VdbeAddOp4(v, OP_SqlExec, 0x0001, 0, 0, + sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%w\"", + db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC); + } } /* Add the table to the in-memory representation of the database. @@ -122375,9 +124365,12 @@ SQLITE_PRIVATE void sqlite3CreateView( ** on a view, even though views do not have rowids. The following flag ** setting fixes this problem. But the fix can be disabled by compiling ** with -DSQLITE_ALLOW_ROWID_IN_VIEW in case there are legacy apps that - ** depend upon the old buggy behavior. */ -#ifndef SQLITE_ALLOW_ROWID_IN_VIEW - p->tabFlags |= TF_NoVisibleRowid; + ** depend upon the old buggy behavior. The ability can also be toggled + ** using sqlite3_config(SQLITE_CONFIG_ROWID_IN_VIEW,...) */ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + p->tabFlags |= sqlite3Config.mNoVisibleRowid; /* Optional. Allow by default */ +#else + p->tabFlags |= TF_NoVisibleRowid; /* Never allow rowid in view */ #endif sqlite3TwoPartName(pParse, pName1, pName2, &pName); @@ -124890,7 +126883,7 @@ SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ if( iDb<0 ) return; z = sqlite3NameFromToken(db, pObjName); if( z==0 ) return; - zDb = db->aDb[iDb].zDbSName; + zDb = pName2->n ? db->aDb[iDb].zDbSName : 0; pTab = sqlite3FindTable(db, z, zDb); if( pTab ){ reindexTable(pParse, pTab, 0); @@ -124900,6 +126893,7 @@ SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ pIndex = sqlite3FindIndex(db, z, zDb); sqlite3DbFree(db, z); if( pIndex ){ + iDb = sqlite3SchemaToIndex(db, pIndex->pTable->pSchema); sqlite3BeginWriteOperation(pParse, 0, iDb); sqlite3RefillIndex(pParse, pIndex, -1); return; @@ -125065,6 +127059,9 @@ SQLITE_PRIVATE void sqlite3WithDelete(sqlite3 *db, With *pWith){ sqlite3DbFree(db, pWith); } } +SQLITE_PRIVATE void sqlite3WithDeleteGeneric(sqlite3 *db, void *pWith){ + sqlite3WithDelete(db, (With*)pWith); +} #endif /* !defined(SQLITE_OMIT_CTE) */ /************** End of build.c ***********************************************/ @@ -127746,13 +129743,13 @@ SQLITE_PRIVATE void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue){ double r1, r2; const char *zVal; r1 = sqlite3_value_double(pValue); - sqlite3_str_appendf(pStr, "%!.15g", r1); + sqlite3_str_appendf(pStr, "%!0.15g", r1); zVal = sqlite3_str_value(pStr); if( zVal ){ sqlite3AtoF(zVal, &r2, pStr->nChar, SQLITE_UTF8); if( r1!=r2 ){ sqlite3_str_reset(pStr); - sqlite3_str_appendf(pStr, "%!.20e", r1); + sqlite3_str_appendf(pStr, "%!0.20e", r1); } } break; @@ -127901,7 +129898,8 @@ static void hexFunc( *(z++) = hexdigits[c&0xf]; } *z = 0; - sqlite3_result_text(context, zHex, n*2, sqlite3_free); + sqlite3_result_text64(context, zHex, (u64)(z-zHex), + sqlite3_free, SQLITE_UTF8); } } @@ -128053,7 +130051,7 @@ static void replaceFunc( } if( zPattern[0]==0 ){ assert( sqlite3_value_type(argv[1])!=SQLITE_NULL ); - sqlite3_result_value(context, argv[0]); + sqlite3_result_text(context, (const char*)zStr, nStr, SQLITE_TRANSIENT); return; } nPattern = sqlite3_value_bytes(argv[1]); @@ -128195,6 +130193,81 @@ static void trimFunc( sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT); } +/* The core implementation of the CONCAT(...) and CONCAT_WS(SEP,...) +** functions. +** +** Return a string value that is the concatenation of all non-null +** entries in argv[]. Use zSep as the separator. +*/ +static void concatFuncCore( + sqlite3_context *context, + int argc, + sqlite3_value **argv, + int nSep, + const char *zSep +){ + i64 j, k, n = 0; + int i; + char *z; + for(i=0; i0 ){ + const char *v = (const char*)sqlite3_value_text(argv[i]); + if( v!=0 ){ + if( j>0 && nSep>0 ){ + memcpy(&z[j], zSep, nSep); + j += nSep; + } + memcpy(&z[j], v, k); + j += k; + } + } + } + z[j] = 0; + assert( j<=n ); + sqlite3_result_text64(context, z, j, sqlite3_free, SQLITE_UTF8); +} + +/* +** The CONCAT(...) function. Generate a string result that is the +** concatentation of all non-null arguments. +*/ +static void concatFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + concatFuncCore(context, argc, argv, 0, ""); +} + +/* +** The CONCAT_WS(separator, ...) function. +** +** Generate a string that is the concatenation of 2nd through the Nth +** argument. Use the first argument (which must be non-NULL) as the +** separator. +*/ +static void concatwsFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int nSep = sqlite3_value_bytes(argv[0]); + const char *zSep = (const char*)sqlite3_value_text(argv[0]); + if( zSep==0 ) return; + concatFuncCore(context, argc-1, argv+1, nSep, zSep); +} + #ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION /* @@ -128461,7 +130534,7 @@ static void sumFinalize(sqlite3_context *context){ if( p->approx ){ if( p->ovrfl ){ sqlite3_result_error(context,"integer overflow",-1); - }else if( !sqlite3IsNaN(p->rErr) ){ + }else if( !sqlite3IsOverflow(p->rErr) ){ sqlite3_result_double(context, p->rSum+p->rErr); }else{ sqlite3_result_double(context, p->rSum); @@ -128478,7 +130551,7 @@ static void avgFinalize(sqlite3_context *context){ double r; if( p->approx ){ r = p->rSum; - if( !sqlite3IsNaN(p->rErr) ) r += p->rErr; + if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr; }else{ r = (double)(p->iSum); } @@ -128492,7 +130565,7 @@ static void totalFinalize(sqlite3_context *context){ if( p ){ if( p->approx ){ r = p->rSum; - if( !sqlite3IsNaN(p->rErr) ) r += p->rErr; + if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr; }else{ r = (double)(p->iSum); } @@ -128616,6 +130689,7 @@ static void minMaxFinalize(sqlite3_context *context){ /* ** group_concat(EXPR, ?SEPARATOR?) +** string_agg(EXPR, SEPARATOR) ** ** The SEPARATOR goes before the EXPR string. This is tragic. The ** groupConcatInverse() implementation would have been easier if the @@ -129206,6 +131280,11 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ FUNCTION(hex, 1, 0, 0, hexFunc ), FUNCTION(unhex, 1, 0, 0, unhexFunc ), FUNCTION(unhex, 2, 0, 0, unhexFunc ), + FUNCTION(concat, -1, 0, 0, concatFunc ), + FUNCTION(concat, 0, 0, 0, 0 ), + FUNCTION(concat_ws, -1, 0, 0, concatwsFunc ), + FUNCTION(concat_ws, 0, 0, 0, 0 ), + FUNCTION(concat_ws, 1, 0, 0, 0 ), INLINE_FUNC(ifnull, 2, INLINEFUNC_coalesce, 0 ), VFUNCTION(random, 0, 0, 0, randomFunc ), VFUNCTION(randomblob, 1, 0, 0, randomBlob ), @@ -129235,6 +131314,8 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), WAGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), + WAGGREGATE(string_agg, 2, 0, 0, groupConcatStep, + groupConcatFinalize, groupConcatValue, groupConcatInverse, 0), LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE), #ifdef SQLITE_CASE_SENSITIVE_LIKE @@ -130177,6 +132258,7 @@ static int isSetNullAction(Parse *pParse, FKey *pFKey){ if( (p==pFKey->apTrigger[0] && pFKey->aAction[0]==OE_SetNull) || (p==pFKey->apTrigger[1] && pFKey->aAction[1]==OE_SetNull) ){ + assert( (pTop->db->flags & SQLITE_FkNoAction)==0 ); return 1; } } @@ -130371,6 +132453,8 @@ SQLITE_PRIVATE void sqlite3FkCheck( } if( regOld!=0 ){ int eAction = pFKey->aAction[aChange!=0]; + if( (db->flags & SQLITE_FkNoAction) ) eAction = OE_None; + fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1); /* If this is a deferred FK constraint, or a CASCADE or SET NULL ** action applies, then any foreign key violations caused by @@ -130486,7 +132570,11 @@ SQLITE_PRIVATE int sqlite3FkRequired( /* Check if any parent key columns are being modified. */ for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ if( fkParentIsModified(pTab, p, aChange, chngRowid) ){ - if( p->aAction[1]!=OE_None ) return 2; + if( (pParse->db->flags & SQLITE_FkNoAction)==0 + && p->aAction[1]!=OE_None + ){ + return 2; + } bHaveFK = 1; } } @@ -130536,6 +132624,7 @@ static Trigger *fkActionTrigger( int iAction = (pChanges!=0); /* 1 for UPDATE, 0 for DELETE */ action = pFKey->aAction[iAction]; + if( (db->flags & SQLITE_FkNoAction) ) action = OE_None; if( action==OE_Restrict && (db->flags & SQLITE_DeferFKs) ){ return 0; } @@ -131373,6 +133462,195 @@ SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){ # define autoIncStep(A,B,C) #endif /* SQLITE_OMIT_AUTOINCREMENT */ +/* +** If argument pVal is a Select object returned by an sqlite3MultiValues() +** that was able to use the co-routine optimization, finish coding the +** co-routine. +*/ +SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal){ + if( ALWAYS(pVal) && pVal->pSrc->nSrc>0 ){ + SrcItem *pItem = &pVal->pSrc->a[0]; + sqlite3VdbeEndCoroutine(pParse->pVdbe, pItem->regReturn); + sqlite3VdbeJumpHere(pParse->pVdbe, pItem->addrFillSub - 1); + } +} + +/* +** Return true if all expressions in the expression-list passed as the +** only argument are constant. +*/ +static int exprListIsConstant(Parse *pParse, ExprList *pRow){ + int ii; + for(ii=0; iinExpr; ii++){ + if( 0==sqlite3ExprIsConstant(pParse, pRow->a[ii].pExpr) ) return 0; + } + return 1; +} + +/* +** Return true if all expressions in the expression-list passed as the +** only argument are both constant and have no affinity. +*/ +static int exprListIsNoAffinity(Parse *pParse, ExprList *pRow){ + int ii; + if( exprListIsConstant(pParse,pRow)==0 ) return 0; + for(ii=0; iinExpr; ii++){ + Expr *pExpr = pRow->a[ii].pExpr; + assert( pExpr->op!=TK_RAISE ); + assert( pExpr->affExpr==0 ); + if( 0!=sqlite3ExprAffinity(pExpr) ) return 0; + } + return 1; + +} + +/* +** This function is called by the parser for the second and subsequent +** rows of a multi-row VALUES clause. Argument pLeft is the part of +** the VALUES clause already parsed, argument pRow is the vector of values +** for the new row. The Select object returned represents the complete +** VALUES clause, including the new row. +** +** There are two ways in which this may be achieved - by incremental +** coding of a co-routine (the "co-routine" method) or by returning a +** Select object equivalent to the following (the "UNION ALL" method): +** +** "pLeft UNION ALL SELECT pRow" +** +** If the VALUES clause contains a lot of rows, this compound Select +** object may consume a lot of memory. +** +** When the co-routine method is used, each row that will be returned +** by the VALUES clause is coded into part of a co-routine as it is +** passed to this function. The returned Select object is equivalent to: +** +** SELECT * FROM ( +** Select object to read co-routine +** ) +** +** The co-routine method is used in most cases. Exceptions are: +** +** a) If the current statement has a WITH clause. This is to avoid +** statements like: +** +** WITH cte AS ( VALUES('x'), ('y') ... ) +** SELECT * FROM cte AS a, cte AS b; +** +** This will not work, as the co-routine uses a hard-coded register +** for its OP_Yield instructions, and so it is not possible for two +** cursors to iterate through it concurrently. +** +** b) The schema is currently being parsed (i.e. the VALUES clause is part +** of a schema item like a VIEW or TRIGGER). In this case there is no VM +** being generated when parsing is taking place, and so generating +** a co-routine is not possible. +** +** c) There are non-constant expressions in the VALUES clause (e.g. +** the VALUES clause is part of a correlated sub-query). +** +** d) One or more of the values in the first row of the VALUES clause +** has an affinity (i.e. is a CAST expression). This causes problems +** because the complex rules SQLite uses (see function +** sqlite3SubqueryColumnTypes() in select.c) to determine the effective +** affinity of such a column for all rows require access to all values in +** the column simultaneously. +*/ +SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow){ + + if( pParse->bHasWith /* condition (a) above */ + || pParse->db->init.busy /* condition (b) above */ + || exprListIsConstant(pParse,pRow)==0 /* condition (c) above */ + || (pLeft->pSrc->nSrc==0 && + exprListIsNoAffinity(pParse,pLeft->pEList)==0) /* condition (d) above */ + || IN_SPECIAL_PARSE + ){ + /* The co-routine method cannot be used. Fall back to UNION ALL. */ + Select *pSelect = 0; + int f = SF_Values | SF_MultiValue; + if( pLeft->pSrc->nSrc ){ + sqlite3MultiValuesEnd(pParse, pLeft); + f = SF_Values; + }else if( pLeft->pPrior ){ + /* In this case set the SF_MultiValue flag only if it was set on pLeft */ + f = (f & pLeft->selFlags); + } + pSelect = sqlite3SelectNew(pParse, pRow, 0, 0, 0, 0, 0, f, 0); + pLeft->selFlags &= ~SF_MultiValue; + if( pSelect ){ + pSelect->op = TK_ALL; + pSelect->pPrior = pLeft; + pLeft = pSelect; + } + }else{ + SrcItem *p = 0; /* SrcItem that reads from co-routine */ + + if( pLeft->pSrc->nSrc==0 ){ + /* Co-routine has not yet been started and the special Select object + ** that accesses the co-routine has not yet been created. This block + ** does both those things. */ + Vdbe *v = sqlite3GetVdbe(pParse); + Select *pRet = sqlite3SelectNew(pParse, 0, 0, 0, 0, 0, 0, 0, 0); + + /* Ensure the database schema has been read. This is to ensure we have + ** the correct text encoding. */ + if( (pParse->db->mDbFlags & DBFLAG_SchemaKnownOk)==0 ){ + sqlite3ReadSchema(pParse); + } + + if( pRet ){ + SelectDest dest; + pRet->pSrc->nSrc = 1; + pRet->pPrior = pLeft->pPrior; + pRet->op = pLeft->op; + pLeft->pPrior = 0; + pLeft->op = TK_SELECT; + assert( pLeft->pNext==0 ); + assert( pRet->pNext==0 ); + p = &pRet->pSrc->a[0]; + p->pSelect = pLeft; + p->fg.viaCoroutine = 1; + p->addrFillSub = sqlite3VdbeCurrentAddr(v) + 1; + p->regReturn = ++pParse->nMem; + p->iCursor = -1; + p->u1.nRow = 2; + sqlite3VdbeAddOp3(v,OP_InitCoroutine,p->regReturn,0,p->addrFillSub); + sqlite3SelectDestInit(&dest, SRT_Coroutine, p->regReturn); + + /* Allocate registers for the output of the co-routine. Do so so + ** that there are two unused registers immediately before those + ** used by the co-routine. This allows the code in sqlite3Insert() + ** to use these registers directly, instead of copying the output + ** of the co-routine to a separate array for processing. */ + dest.iSdst = pParse->nMem + 3; + dest.nSdst = pLeft->pEList->nExpr; + pParse->nMem += 2 + dest.nSdst; + + pLeft->selFlags |= SF_MultiValue; + sqlite3Select(pParse, pLeft, &dest); + p->regResult = dest.iSdst; + assert( pParse->nErr || dest.iSdst>0 ); + pLeft = pRet; + } + }else{ + p = &pLeft->pSrc->a[0]; + assert( !p->fg.isTabFunc && !p->fg.isIndexedBy ); + p->u1.nRow++; + } + + if( pParse->nErr==0 ){ + assert( p!=0 ); + if( p->pSelect->pEList->nExpr!=pRow->nExpr ){ + sqlite3SelectWrongNumTermsError(pParse, p->pSelect); + }else{ + sqlite3ExprCodeExprList(pParse, pRow, p->regResult, 0, 0); + sqlite3VdbeAddOp1(pParse->pVdbe, OP_Yield, p->regReturn); + } + } + sqlite3ExprListDelete(pParse->db, pRow); + } + + return pLeft; +} /* Forward declaration */ static int xferOptimization( @@ -131709,25 +133987,40 @@ SQLITE_PRIVATE void sqlite3Insert( if( pSelect ){ /* Data is coming from a SELECT or from a multi-row VALUES clause. ** Generate a co-routine to run the SELECT. */ - int regYield; /* Register holding co-routine entry-point */ - int addrTop; /* Top of the co-routine */ int rc; /* Result code */ - regYield = ++pParse->nMem; - addrTop = sqlite3VdbeCurrentAddr(v) + 1; - sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop); - sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield); - dest.iSdst = bIdListInOrder ? regData : 0; - dest.nSdst = pTab->nCol; - rc = sqlite3Select(pParse, pSelect, &dest); - regFromSelect = dest.iSdst; - assert( db->pParse==pParse ); - if( rc || pParse->nErr ) goto insert_cleanup; - assert( db->mallocFailed==0 ); - sqlite3VdbeEndCoroutine(v, regYield); - sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */ - assert( pSelect->pEList ); - nColumn = pSelect->pEList->nExpr; + if( pSelect->pSrc->nSrc==1 + && pSelect->pSrc->a[0].fg.viaCoroutine + && pSelect->pPrior==0 + ){ + SrcItem *pItem = &pSelect->pSrc->a[0]; + dest.iSDParm = pItem->regReturn; + regFromSelect = pItem->regResult; + nColumn = pItem->pSelect->pEList->nExpr; + ExplainQueryPlan((pParse, 0, "SCAN %S", pItem)); + if( bIdListInOrder && nColumn==pTab->nCol ){ + regData = regFromSelect; + regRowid = regData - 1; + regIns = regRowid - (IsVirtual(pTab) ? 1 : 0); + } + }else{ + int addrTop; /* Top of the co-routine */ + int regYield = ++pParse->nMem; + addrTop = sqlite3VdbeCurrentAddr(v) + 1; + sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop); + sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield); + dest.iSdst = bIdListInOrder ? regData : 0; + dest.nSdst = pTab->nCol; + rc = sqlite3Select(pParse, pSelect, &dest); + regFromSelect = dest.iSdst; + assert( db->pParse==pParse ); + if( rc || pParse->nErr ) goto insert_cleanup; + assert( db->mallocFailed==0 ); + sqlite3VdbeEndCoroutine(v, regYield); + sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */ + assert( pSelect->pEList ); + nColumn = pSelect->pEList->nExpr; + } /* Set useTempTable to TRUE if the result of the SELECT statement ** should be written into a temporary table (template 4). Set to @@ -131882,7 +134175,7 @@ SQLITE_PRIVATE void sqlite3Insert( pNx->iDataCur = iDataCur; pNx->iIdxCur = iIdxCur; if( pNx->pUpsertTarget ){ - if( sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx) ){ + if( sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx, pUpsert) ){ goto insert_cleanup; } } @@ -133774,7 +136067,10 @@ static int xferOptimization( } } #ifndef SQLITE_OMIT_CHECK - if( pDest->pCheck && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1) ){ + if( pDest->pCheck + && (db->mDbFlags & DBFLAG_Vacuum)==0 + && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1) + ){ return 0; /* Tables have different CHECK constraints. Ticket #2252 */ } #endif @@ -134491,6 +136787,9 @@ struct sqlite3_api_routines { int (*is_interrupted)(sqlite3*); /* Version 3.43.0 and later */ int (*stmt_explain)(sqlite3_stmt*,int); + /* Version 3.44.0 and later */ + void *(*get_clientdata)(sqlite3*,const char*); + int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); }; /* @@ -134821,6 +137120,9 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_is_interrupted sqlite3_api->is_interrupted /* Version 3.43.0 and later */ #define sqlite3_stmt_explain sqlite3_api->stmt_explain +/* Version 3.44.0 and later */ +#define sqlite3_get_clientdata sqlite3_api->get_clientdata +#define sqlite3_set_clientdata sqlite3_api->set_clientdata #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -135339,7 +137641,10 @@ static const sqlite3_api_routines sqlite3Apis = { /* Version 3.41.0 and later */ sqlite3_is_interrupted, /* Version 3.43.0 and later */ - sqlite3_stmt_explain + sqlite3_stmt_explain, + /* Version 3.44.0 and later */ + sqlite3_get_clientdata, + sqlite3_set_clientdata }; /* True if x is the directory separator character @@ -135555,6 +137860,9 @@ SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){ ** default so as not to open security holes in older applications. */ SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); if( onoff ){ db->flags |= SQLITE_LoadExtension|SQLITE_LoadExtFunc; @@ -135604,6 +137912,9 @@ SQLITE_API int sqlite3_auto_extension( void (*xInit)(void) ){ int rc = SQLITE_OK; +#ifdef SQLITE_ENABLE_API_ARMOR + if( xInit==0 ) return SQLITE_MISUSE_BKPT; +#endif #ifndef SQLITE_OMIT_AUTOINIT rc = sqlite3_initialize(); if( rc ){ @@ -135656,6 +137967,9 @@ SQLITE_API int sqlite3_cancel_auto_extension( int i; int n = 0; wsdAutoextInit; +#ifdef SQLITE_ENABLE_API_ARMOR + if( xInit==0 ) return 0; +#endif sqlite3_mutex_enter(mutex); for(i=(int)wsdAutoext.nExt-1; i>=0; i--){ if( wsdAutoext.aExt[i]==xInit ){ @@ -136431,6 +138745,34 @@ static const PragmaName aPragmaName[] = { /************** End of pragma.h **********************************************/ /************** Continuing where we left off in pragma.c *********************/ +/* +** When the 0x10 bit of PRAGMA optimize is set, any ANALYZE commands +** will be run with an analysis_limit set to the lessor of the value of +** the following macro or to the actual analysis_limit if it is non-zero, +** in order to prevent PRAGMA optimize from running for too long. +** +** The value of 2000 is chosen emperically so that the worst-case run-time +** for PRAGMA optimize does not exceed 100 milliseconds against a variety +** of test databases on a RaspberryPI-4 compiled using -Os and without +** -DSQLITE_DEBUG. Of course, your mileage may vary. For the purpose of +** this paragraph, "worst-case" means that ANALYZE ends up being +** run on every table in the database. The worst case typically only +** happens if PRAGMA optimize is run on a database file for which ANALYZE +** has not been previously run and the 0x10000 flag is included so that +** all tables are analyzed. The usual case for PRAGMA optimize is that +** no ANALYZE commands will be run at all, or if any ANALYZE happens it +** will be against a single table, so that expected timing for PRAGMA +** optimize on a PI-4 is more like 1 millisecond or less with the 0x10000 +** flag or less than 100 microseconds without the 0x10000 flag. +** +** An analysis limit of 2000 is almost always sufficient for the query +** planner to fully characterize an index. The additional accuracy from +** a larger analysis is not usually helpful. +*/ +#ifndef SQLITE_DEFAULT_OPTIMIZE_LIMIT +# define SQLITE_DEFAULT_OPTIMIZE_LIMIT 2000 +#endif + /* ** Interpret the given string as a safety level. Return 0 for OFF, ** 1 for ON or NORMAL, 2 for FULL, and 3 for EXTRA. Return 1 for an empty or @@ -137525,7 +139867,11 @@ SQLITE_PRIVATE void sqlite3Pragma( #endif if( sqlite3GetBoolean(zRight, 0) ){ - db->flags |= mask; + if( (mask & SQLITE_WriteSchema)==0 + || (db->flags & SQLITE_Defensive)==0 + ){ + db->flags |= mask; + } }else{ db->flags &= ~mask; if( mask==SQLITE_DeferFKs ) db->nDeferredImmCons = 0; @@ -138072,7 +140418,7 @@ SQLITE_PRIVATE void sqlite3Pragma( /* Set the maximum error count */ mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; if( zRight ){ - if( sqlite3GetInt32(zRight, &mxErr) ){ + if( sqlite3GetInt32(pValue->z, &mxErr) ){ if( mxErr<=0 ){ mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; } @@ -138089,7 +140435,6 @@ SQLITE_PRIVATE void sqlite3Pragma( Hash *pTbls; /* Set of all tables in the schema */ int *aRoot; /* Array of root page numbers of all btrees */ int cnt = 0; /* Number of entries in aRoot[] */ - int mxIdx = 0; /* Maximum number of indexes for any table */ if( OMIT_TEMPDB && i==1 ) continue; if( iDb>=0 && i!=iDb ) continue; @@ -138111,7 +140456,6 @@ SQLITE_PRIVATE void sqlite3Pragma( if( pObjTab && pObjTab!=pTab ) continue; if( HasRowid(pTab) ) cnt++; for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; } - if( nIdx>mxIdx ) mxIdx = nIdx; } if( cnt==0 ) continue; if( pObjTab ) cnt++; @@ -138131,11 +140475,11 @@ SQLITE_PRIVATE void sqlite3Pragma( aRoot[0] = cnt; /* Make sure sufficient number of registers have been allocated */ - sqlite3TouchRegister(pParse, 8+mxIdx); + sqlite3TouchRegister(pParse, 8+cnt); sqlite3ClearTempRegCache(pParse); /* Do the b-tree integrity checks */ - sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY); + sqlite3VdbeAddOp4(v, OP_IntegrityCk, 1, cnt, 8, (char*)aRoot,P4_INTARRAY); sqlite3VdbeChangeP5(v, (u8)i); addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v); sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, @@ -138145,6 +140489,36 @@ SQLITE_PRIVATE void sqlite3Pragma( integrityCheckResultRow(v); sqlite3VdbeJumpHere(v, addr); + /* Check that the indexes all have the right number of rows */ + cnt = pObjTab ? 1 : 0; + sqlite3VdbeLoadString(v, 2, "wrong # of entries in index "); + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + int iTab = 0; + Table *pTab = sqliteHashData(x); + Index *pIdx; + if( pObjTab && pObjTab!=pTab ) continue; + if( HasRowid(pTab) ){ + iTab = cnt++; + }else{ + iTab = cnt; + for(pIdx=pTab->pIndex; ALWAYS(pIdx); pIdx=pIdx->pNext){ + if( IsPrimaryKeyIndex(pIdx) ) break; + iTab++; + } + } + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->pPartIdxWhere==0 ){ + addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+cnt, 0, 8+iTab); + VdbeCoverageNeverNull(v); + sqlite3VdbeLoadString(v, 4, pIdx->zName); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3); + integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, addr); + } + cnt++; + } + } + /* Make sure all the indices are constructed correctly. */ for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ @@ -138158,8 +140532,8 @@ SQLITE_PRIVATE void sqlite3Pragma( int r2; /* Previous key for WITHOUT ROWID tables */ int mxCol; /* Maximum non-virtual column number */ - if( !IsOrdinaryTable(pTab) ) continue; if( pObjTab && pObjTab!=pTab ) continue; + if( !IsOrdinaryTable(pTab) ) continue; if( isQuick || HasRowid(pTab) ){ pPk = 0; r2 = 0; @@ -138294,6 +140668,7 @@ SQLITE_PRIVATE void sqlite3Pragma( ** is REAL, we have to load the actual data using OP_Column ** to reliably determine if the value is a NULL. */ sqlite3VdbeAddOp3(v, OP_Column, p1, p3, 3); + sqlite3ColumnDefault(v, pTab, j, 3); jmp3 = sqlite3VdbeAddOp2(v, OP_NotNull, 3, labelOk); VdbeCoverage(v); } @@ -138467,23 +140842,43 @@ SQLITE_PRIVATE void sqlite3Pragma( } sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v); sqlite3VdbeJumpHere(v, loopTop-1); - if( !isQuick ){ - sqlite3VdbeLoadString(v, 2, "wrong # of entries in index "); - for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - if( pPk==pIdx ) continue; - sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3); - addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v); - sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); - sqlite3VdbeLoadString(v, 4, pIdx->zName); - sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3); - integrityCheckResultRow(v); - sqlite3VdbeJumpHere(v, addr); - } - if( pPk ){ - sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol); - } + if( pPk ){ + assert( !isQuick ); + sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol); } } + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Second pass to invoke the xIntegrity method on all virtual + ** tables. + */ + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); + sqlite3_vtab *pVTab; + int a1; + if( pObjTab && pObjTab!=pTab ) continue; + if( IsOrdinaryTable(pTab) ) continue; + if( !IsVirtual(pTab) ) continue; + if( pTab->nCol<=0 ){ + const char *zMod = pTab->u.vtab.azArg[0]; + if( sqlite3HashFind(&db->aModule, zMod)==0 ) continue; + } + sqlite3ViewGetColumnNames(pParse, pTab); + if( pTab->u.vtab.p==0 ) continue; + pVTab = pTab->u.vtab.p->pVtab; + if( NEVER(pVTab==0) ) continue; + if( NEVER(pVTab->pModule==0) ) continue; + if( pVTab->pModule->iVersion<4 ) continue; + if( pVTab->pModule->xIntegrity==0 ) continue; + sqlite3VdbeAddOp3(v, OP_VCheck, i, 3, isQuick); + pTab->nTabRef++; + sqlite3VdbeAppendP4(v, pTab, P4_TABLEREF); + a1 = sqlite3VdbeAddOp1(v, OP_IsNull, 3); VdbeCoverage(v); + integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, a1); + continue; + } +#endif } { static const int iLn = VDBE_OFFSET_LINENO(2); @@ -138747,44 +141142,63 @@ SQLITE_PRIVATE void sqlite3Pragma( ** ** The optional argument is a bitmask of optimizations to perform: ** - ** 0x0001 Debugging mode. Do not actually perform any optimizations - ** but instead return one line of text for each optimization - ** that would have been done. Off by default. + ** 0x00001 Debugging mode. Do not actually perform any optimizations + ** but instead return one line of text for each optimization + ** that would have been done. Off by default. ** - ** 0x0002 Run ANALYZE on tables that might benefit. On by default. - ** See below for additional information. + ** 0x00002 Run ANALYZE on tables that might benefit. On by default. + ** See below for additional information. ** - ** 0x0004 (Not yet implemented) Record usage and performance - ** information from the current session in the - ** database file so that it will be available to "optimize" - ** pragmas run by future database connections. + ** 0x00010 Run all ANALYZE operations using an analysis_limit that + ** is the lessor of the current analysis_limit and the + ** SQLITE_DEFAULT_OPTIMIZE_LIMIT compile-time option. + ** The default value of SQLITE_DEFAULT_OPTIMIZE_LIMIT is + ** currently (2024-02-19) set to 2000, which is such that + ** the worst case run-time for PRAGMA optimize on a 100MB + ** database will usually be less than 100 milliseconds on + ** a RaspberryPI-4 class machine. On by default. ** - ** 0x0008 (Not yet implemented) Create indexes that might have - ** been helpful to recent queries + ** 0x10000 Look at tables to see if they need to be reanalyzed + ** due to growth or shrinkage even if they have not been + ** queried during the current connection. Off by default. ** - ** The default MASK is and always shall be 0xfffe. 0xfffe means perform all - ** of the optimizations listed above except Debug Mode, including new - ** optimizations that have not yet been invented. If new optimizations are - ** ever added that should be off by default, those off-by-default - ** optimizations will have bitmasks of 0x10000 or larger. + ** The default MASK is and always shall be 0x0fffe. In the current + ** implementation, the default mask only covers the 0x00002 optimization, + ** though additional optimizations that are covered by 0x0fffe might be + ** added in the future. Optimizations that are off by default and must + ** be explicitly requested have masks of 0x10000 or greater. ** ** DETERMINATION OF WHEN TO RUN ANALYZE ** ** In the current implementation, a table is analyzed if only if all of ** the following are true: ** - ** (1) MASK bit 0x02 is set. + ** (1) MASK bit 0x00002 is set. + ** + ** (2) The table is an ordinary table, not a virtual table or view. ** - ** (2) The query planner used sqlite_stat1-style statistics for one or - ** more indexes of the table at some point during the lifetime of - ** the current connection. + ** (3) The table name does not begin with "sqlite_". ** - ** (3) One or more indexes of the table are currently unanalyzed OR - ** the number of rows in the table has increased by 25 times or more - ** since the last time ANALYZE was run. + ** (4) One or more of the following is true: + ** (4a) The 0x10000 MASK bit is set. + ** (4b) One or more indexes on the table lacks an entry + ** in the sqlite_stat1 table. + ** (4c) The query planner used sqlite_stat1-style statistics for one + ** or more indexes of the table at some point during the lifetime + ** of the current connection. + ** + ** (5) One or more of the following is true: + ** (5a) One or more indexes on the table lacks an entry + ** in the sqlite_stat1 table. (Same as 4a) + ** (5b) The number of rows in the table has increased or decreased by + ** 10-fold. In other words, the current size of the table is + ** 10 times larger than the size in sqlite_stat1 or else the + ** current size is less than 1/10th the size in sqlite_stat1. ** ** The rules for when tables are analyzed are likely to change in - ** future releases. + ** future releases. Future versions of SQLite might accept a string + ** literal argument to this pragma that contains a mnemonic description + ** of the options rather than a bitmap. */ case PragTyp_OPTIMIZE: { int iDbLast; /* Loop termination point for the schema loop */ @@ -138796,6 +141210,10 @@ SQLITE_PRIVATE void sqlite3Pragma( LogEst szThreshold; /* Size threshold above which reanalysis needed */ char *zSubSql; /* SQL statement for the OP_SqlExec opcode */ u32 opMask; /* Mask of operations to perform */ + int nLimit; /* Analysis limit to use */ + int nCheck = 0; /* Number of tables to be optimized */ + int nBtree = 0; /* Number of btrees to scan */ + int nIndex; /* Number of indexes on the current table */ if( zRight ){ opMask = (u32)sqlite3Atoi(zRight); @@ -138803,6 +141221,14 @@ SQLITE_PRIVATE void sqlite3Pragma( }else{ opMask = 0xfffe; } + if( (opMask & 0x10)==0 ){ + nLimit = 0; + }else if( db->nAnalysisLimit>0 + && db->nAnalysisLimitnTab++; for(iDbLast = zDb?iDb:db->nDb-1; iDb<=iDbLast; iDb++){ if( iDb==1 ) continue; @@ -138811,23 +141237,61 @@ SQLITE_PRIVATE void sqlite3Pragma( for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ pTab = (Table*)sqliteHashData(k); - /* If table pTab has not been used in a way that would benefit from - ** having analysis statistics during the current session, then skip it. - ** This also has the effect of skipping virtual tables and views */ - if( (pTab->tabFlags & TF_StatsUsed)==0 ) continue; + /* This only works for ordinary tables */ + if( !IsOrdinaryTable(pTab) ) continue; + + /* Do not scan system tables */ + if( 0==sqlite3StrNICmp(pTab->zName, "sqlite_", 7) ) continue; - /* Reanalyze if the table is 25 times larger than the last analysis */ - szThreshold = pTab->nRowLogEst + 46; assert( sqlite3LogEst(25)==46 ); + /* Find the size of the table as last recorded in sqlite_stat1. + ** If any index is unanalyzed, then the threshold is -1 to + ** indicate a new, unanalyzed index + */ + szThreshold = pTab->nRowLogEst; + nIndex = 0; for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + nIndex++; if( !pIdx->hasStat1 ){ - szThreshold = 0; /* Always analyze if any index lacks statistics */ - break; + szThreshold = -1; /* Always analyze if any index lacks statistics */ } } - if( szThreshold ){ - sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead); - sqlite3VdbeAddOp3(v, OP_IfSmaller, iTabCur, - sqlite3VdbeCurrentAddr(v)+2+(opMask&1), szThreshold); + + /* If table pTab has not been used in a way that would benefit from + ** having analysis statistics during the current session, then skip it, + ** unless the 0x10000 MASK bit is set. */ + if( (pTab->tabFlags & TF_MaybeReanalyze)!=0 ){ + /* Check for size change if stat1 has been used for a query */ + }else if( opMask & 0x10000 ){ + /* Check for size change if 0x10000 is set */ + }else if( pTab->pIndex!=0 && szThreshold<0 ){ + /* Do analysis if unanalyzed indexes exists */ + }else{ + /* Otherwise, we can skip this table */ + continue; + } + + nCheck++; + if( nCheck==2 ){ + /* If ANALYZE might be invoked two or more times, hold a write + ** transaction for efficiency */ + sqlite3BeginWriteOperation(pParse, 0, iDb); + } + nBtree += nIndex+1; + + /* Reanalyze if the table is 10 times larger or smaller than + ** the last analysis. Unconditional reanalysis if there are + ** unanalyzed indexes. */ + sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead); + if( szThreshold>=0 ){ + const LogEst iRange = 33; /* 10x size change */ + sqlite3VdbeAddOp4Int(v, OP_IfSizeBetween, iTabCur, + sqlite3VdbeCurrentAddr(v)+2+(opMask&1), + szThreshold>=iRange ? szThreshold-iRange : -1, + szThreshold+iRange); + VdbeCoverage(v); + }else{ + sqlite3VdbeAddOp2(v, OP_Rewind, iTabCur, + sqlite3VdbeCurrentAddr(v)+2+(opMask&1)); VdbeCoverage(v); } zSubSql = sqlite3MPrintf(db, "ANALYZE \"%w\".\"%w\"", @@ -138837,11 +141301,27 @@ SQLITE_PRIVATE void sqlite3Pragma( sqlite3VdbeAddOp4(v, OP_String8, 0, r1, 0, zSubSql, P4_DYNAMIC); sqlite3VdbeAddOp2(v, OP_ResultRow, r1, 1); }else{ - sqlite3VdbeAddOp4(v, OP_SqlExec, 0, 0, 0, zSubSql, P4_DYNAMIC); + sqlite3VdbeAddOp4(v, OP_SqlExec, nLimit ? 0x02 : 00, nLimit, 0, + zSubSql, P4_DYNAMIC); } } } sqlite3VdbeAddOp0(v, OP_Expire); + + /* In a schema with a large number of tables and indexes, scale back + ** the analysis_limit to avoid excess run-time in the worst case. + */ + if( !db->mallocFailed && nLimit>0 && nBtree>100 ){ + int iAddr, iEnd; + VdbeOp *aOp; + nLimit = 100*nLimit/nBtree; + if( nLimit<100 ) nLimit = 100; + aOp = sqlite3VdbeGetOp(v, 0); + iEnd = sqlite3VdbeCurrentAddr(v); + for(iAddr=0; iAddrnConstraint; i++, pConstraint++){ - if( pConstraint->usable==0 ) continue; - if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; if( pConstraint->iColumn < pTab->iHidden ) continue; + if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + if( pConstraint->usable==0 ) return SQLITE_CONSTRAINT; j = pConstraint->iColumn - pTab->iHidden; assert( j < 2 ); seen[j] = i+1; @@ -139120,12 +141600,13 @@ static int pragmaVtabBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ j = seen[0]-1; pIdxInfo->aConstraintUsage[j].argvIndex = 1; pIdxInfo->aConstraintUsage[j].omit = 1; - if( seen[1]==0 ) return SQLITE_OK; pIdxInfo->estimatedCost = (double)20; pIdxInfo->estimatedRows = 20; - j = seen[1]-1; - pIdxInfo->aConstraintUsage[j].argvIndex = 2; - pIdxInfo->aConstraintUsage[j].omit = 1; + if( seen[1] ){ + j = seen[1]-1; + pIdxInfo->aConstraintUsage[j].argvIndex = 2; + pIdxInfo->aConstraintUsage[j].omit = 1; + } return SQLITE_OK; } @@ -139145,6 +141626,7 @@ static void pragmaVtabCursorClear(PragmaVtabCursor *pCsr){ int i; sqlite3_finalize(pCsr->pPragma); pCsr->pPragma = 0; + pCsr->iRowid = 0; for(i=0; iazArg); i++){ sqlite3_free(pCsr->azArg[i]); pCsr->azArg[i] = 0; @@ -139285,7 +141767,8 @@ static const sqlite3_module pragmaVtabModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; /* @@ -139909,8 +142392,6 @@ SQLITE_PRIVATE void sqlite3ParseObjectReset(Parse *pParse){ db->lookaside.sz = db->lookaside.bDisable ? 0 : db->lookaside.szTrue; assert( pParse->db->pParse==pParse ); db->pParse = pParse->pOuterParse; - pParse->db = 0; - pParse->disableLookaside = 0; } /* @@ -139946,7 +142427,13 @@ SQLITE_PRIVATE void *sqlite3ParserAddCleanup( void (*xCleanup)(sqlite3*,void*), /* The cleanup routine */ void *pPtr /* Pointer to object to be cleaned up */ ){ - ParseCleanup *pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup)); + ParseCleanup *pCleanup; + if( sqlite3FaultSim(300) ){ + pCleanup = 0; + sqlite3OomFault(pParse->db); + }else{ + pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup)); + } if( pCleanup ){ pCleanup->pNext = pParse->pCleanup; pParse->pCleanup = pCleanup; @@ -140181,6 +142668,7 @@ static int sqlite3LockAndPrepare( assert( (rc&db->errMask)==rc ); db->busyHandler.nBusy = 0; sqlite3_mutex_leave(db->mutex); + assert( rc==SQLITE_OK || (*ppStmt)==0 ); return rc; } @@ -140578,6 +143066,9 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){ if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1); } +SQLITE_PRIVATE void sqlite3SelectDeleteGeneric(sqlite3 *db, void *p){ + if( ALWAYS(p) ) clearSelect(db, (Select*)p, 1); +} /* ** Return a pointer to the right-most SELECT statement in a compound. @@ -140848,6 +143339,7 @@ static void unsetJoinExpr(Expr *p, int iTable, int nullable){ } if( p->op==TK_FUNCTION ){ assert( ExprUseXList(p) ); + assert( p->pLeft==0 ); if( p->x.pList ){ int i; for(i=0; ix.pList->nExpr; i++){ @@ -142063,9 +144555,16 @@ static void generateSortTail( int addrExplain; /* Address of OP_Explain instruction */ #endif - ExplainQueryPlan2(addrExplain, (pParse, 0, - "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"") - ); + nKey = pOrderBy->nExpr - pSort->nOBSat; + if( pSort->nOBSat==0 || nKey==1 ){ + ExplainQueryPlan2(addrExplain, (pParse, 0, + "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat?"LAST TERM OF ":"" + )); + }else{ + ExplainQueryPlan2(addrExplain, (pParse, 0, + "USE TEMP B-TREE FOR LAST %d TERMS OF ORDER BY", nKey + )); + } sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd); sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush); @@ -142103,7 +144602,6 @@ static void generateSortTail( regRow = sqlite3GetTempRange(pParse, nColumn); } } - nKey = pOrderBy->nExpr - pSort->nOBSat; if( pSort->sortFlags & SORTFLAG_UseSorter ){ int regSortOut = ++pParse->nMem; iSortTab = pParse->nTab++; @@ -142343,11 +144841,7 @@ static const char *columnTypeImpl( ** data for the result-set column of the sub-select. */ if( iColpEList->nExpr -#ifdef SQLITE_ALLOW_ROWID_IN_VIEW - && iCol>=0 -#else - && ALWAYS(iCol>=0) -#endif + && (!ViewCanHaveRowid || iCol>=0) ){ /* If iCol is less than zero, then the expression requests the ** rowid of the sub-select or view. This expression is legal (see @@ -142723,17 +145217,22 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes( for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){ const char *zType; i64 n; + int m = 0; + Select *pS2 = pSelect; pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT); p = a[i].pExpr; /* pCol->szEst = ... // Column size est for SELECT tables never used */ pCol->affinity = sqlite3ExprAffinity(p); + while( pCol->affinity<=SQLITE_AFF_NONE && pS2->pNext!=0 ){ + m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr); + pS2 = pS2->pNext; + pCol->affinity = sqlite3ExprAffinity(pS2->pEList->a[i].pExpr); + } if( pCol->affinity<=SQLITE_AFF_NONE ){ pCol->affinity = aff; } - if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){ - int m = 0; - Select *pS2; - for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){ + if( pCol->affinity>=SQLITE_AFF_TEXT && (pS2->pNext || pS2!=pSelect) ){ + for(pS2=pS2->pNext; pS2; pS2=pS2->pNext){ m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr); } if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){ @@ -142763,12 +145262,12 @@ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes( } } if( zType ){ - i64 m = sqlite3Strlen30(zType); + const i64 k = sqlite3Strlen30(zType); n = sqlite3Strlen30(pCol->zCnName); - pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2); + pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+k+2); pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL); if( pCol->zCnName ){ - memcpy(&pCol->zCnName[n+1], zType, m+1); + memcpy(&pCol->zCnName[n+1], zType, k+1); pCol->colFlags |= COLFLAG_HASTYPE; } } @@ -143596,9 +146095,7 @@ static int multiSelect( pDest->iSdst = dest.iSdst; pDest->nSdst = dest.nSdst; if( pDelete ){ - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3SelectDelete, - pDelete); + sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pDelete); } return rc; } @@ -144149,8 +146646,7 @@ static int multiSelectOrderBy( /* Make arrangements to free the 2nd and subsequent arms of the compound ** after the parse has finished */ if( pSplit->pPrior ){ - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior); + sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pSplit->pPrior); } pSplit->pPrior = pPrior; pPrior->pNext = pSplit; @@ -144971,9 +147467,7 @@ static int flattenSubquery( Table *pTabToDel = pSubitem->pTab; if( pTabToDel->nTabRef==1 ){ Parse *pToplevel = sqlite3ParseToplevel(pParse); - sqlite3ParserAddCleanup(pToplevel, - (void(*)(sqlite3*,void*))sqlite3DeleteTable, - pTabToDel); + sqlite3ParserAddCleanup(pToplevel, sqlite3DeleteTableGeneric, pTabToDel); testcase( pToplevel->earlyCleanup ); }else{ pTabToDel->nTabRef--; @@ -145170,7 +147664,7 @@ static void constInsert( ){ int i; assert( pColumn->op==TK_COLUMN ); - assert( sqlite3ExprIsConstant(pValue) ); + assert( sqlite3ExprIsConstant(pConst->pParse, pValue) ); if( ExprHasProperty(pColumn, EP_FixedCol) ) return; if( sqlite3ExprAffinity(pValue)!=0 ) return; @@ -145228,10 +147722,10 @@ static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ pLeft = pExpr->pLeft; assert( pRight!=0 ); assert( pLeft!=0 ); - if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pLeft) ){ + if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pLeft) ){ constInsert(pConst,pRight,pLeft,pExpr); } - if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pRight) ){ + if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pRight) ){ constInsert(pConst,pLeft,pRight,pExpr); } } @@ -145452,6 +147946,18 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ ** The hope is that the terms added to the inner query will make it more ** efficient. ** +** NAME AMBIGUITY +** +** This optimization is called the "WHERE-clause push-down optimization". +** +** Do not confuse this optimization with another unrelated optimization +** with a similar name: The "MySQL push-down optimization" causes WHERE +** clause terms that can be evaluated using only the index and without +** reference to the table are run first, so that if they are false, +** unnecessary table seeks are avoided. +** +** RULES +** ** Do not attempt this optimization if: ** ** (1) (** This restriction was removed on 2017-09-29. We used to @@ -145517,15 +148023,19 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ ** (9c) There is a RIGHT JOIN (or FULL JOIN) in between the ON/USING ** clause and the subquery. ** -** Without this restriction, the push-down optimization might move -** the ON/USING filter expression from the left side of a RIGHT JOIN -** over to the right side, which leads to incorrect answers. See -** also restriction (6) in sqlite3ExprIsSingleTableConstraint(). +** Without this restriction, the WHERE-clause push-down optimization +** might move the ON/USING filter expression from the left side of a +** RIGHT JOIN over to the right side, which leads to incorrect answers. +** See also restriction (6) in sqlite3ExprIsSingleTableConstraint(). ** ** (10) The inner query is not the right-hand table of a RIGHT JOIN. ** ** (11) The subquery is not a VALUES clause ** +** (12) The WHERE clause is not "rowid ISNULL" or the equivalent. This +** case only comes up if SQLite is compiled using +** SQLITE_ALLOW_ROWID_IN_VIEW. +** ** Return 0 if no changes are made and non-zero if one or more WHERE clause ** terms are duplicated into the subquery. */ @@ -145636,7 +148146,19 @@ static int pushDownWhereTerms( } #endif - if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc) ){ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( ViewCanHaveRowid && (pWhere->op==TK_ISNULL || pWhere->op==TK_NOTNULL) ){ + Expr *pLeft = pWhere->pLeft; + if( ALWAYS(pLeft) + && pLeft->op==TK_COLUMN + && pLeft->iColumn < 0 + ){ + return 0; /* Restriction (12) */ + } + } +#endif + + if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc, 1) ){ nChng++; pSubq->selFlags |= SF_PushDown; while( pSubq ){ @@ -146020,8 +148542,7 @@ static struct Cte *searchWith( SQLITE_PRIVATE With *sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){ if( pWith ){ if( bFree ){ - pWith = (With*)sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3WithDelete, + pWith = (With*)sqlite3ParserAddCleanup(pParse, sqlite3WithDeleteGeneric, pWith); if( pWith==0 ) return 0; } @@ -146264,12 +148785,14 @@ SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){ while( pSel->pPrior ){ pSel = pSel->pPrior; } sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); pTab->iPKey = -1; + pTab->eTabType = TABTYP_VIEW; pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); #ifndef SQLITE_ALLOW_ROWID_IN_VIEW /* The usual case - do not allow ROWID on a subquery */ pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; #else - pTab->tabFlags |= TF_Ephemeral; /* Legacy compatibility mode */ + /* Legacy compatibility mode */ + pTab->tabFlags |= TF_Ephemeral | sqlite3Config.mNoVisibleRowid; #endif return pParse->nErr ? SQLITE_ERROR : SQLITE_OK; } @@ -146508,6 +149031,7 @@ static int selectExpander(Walker *pWalker, Select *p){ char *zTName = 0; /* text of name of TABLE */ int iErrOfst; if( pE->op==TK_DOT ){ + assert( (selFlags & SF_NestedFrom)==0 ); assert( pE->pLeft!=0 ); assert( !ExprHasProperty(pE->pLeft, EP_IntValue) ); zTName = pE->pLeft->u.zToken; @@ -146518,6 +149042,7 @@ static int selectExpander(Walker *pWalker, Select *p){ iErrOfst = pE->w.iOfst; } for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + int nAdd; /* Number of cols including rowid */ Table *pTab = pFrom->pTab; /* Table for this data source */ ExprList *pNestedFrom; /* Result-set of a nested FROM clause */ char *zTabName; /* AS name for this data source */ @@ -146535,6 +149060,7 @@ static int selectExpander(Walker *pWalker, Select *p){ pNestedFrom = pFrom->pSelect->pEList; assert( pNestedFrom!=0 ); assert( pNestedFrom->nExpr==pTab->nCol ); + assert( VisibleRowid(pTab)==0 || ViewCanHaveRowid ); }else{ if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){ continue; @@ -146565,33 +149091,49 @@ static int selectExpander(Walker *pWalker, Select *p){ }else{ pUsing = 0; } - for(j=0; jnCol; j++){ - char *zName = pTab->aCol[j].zCnName; + + nAdd = pTab->nCol; + if( VisibleRowid(pTab) && (selFlags & SF_NestedFrom)!=0 ) nAdd++; + for(j=0; ja[j], 0, zTName, 0)==0 - ){ - continue; - } + if( j==pTab->nCol ){ + zName = sqlite3RowidAlias(pTab); + if( zName==0 ) continue; + }else{ + zName = pTab->aCol[j].zCnName; - /* If a column is marked as 'hidden', omit it from the expanded - ** result-set list unless the SELECT has the SF_IncludeHidden - ** bit set. - */ - if( (p->selFlags & SF_IncludeHidden)==0 - && IsHiddenColumn(&pTab->aCol[j]) - ){ - continue; - } - if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 - && zTName==0 - && (selFlags & (SF_NestedFrom))==0 - ){ - continue; + /* If pTab is actually an SF_NestedFrom sub-select, do not + ** expand any ENAME_ROWID columns. */ + if( pNestedFrom && pNestedFrom->a[j].fg.eEName==ENAME_ROWID ){ + continue; + } + + if( zTName + && pNestedFrom + && sqlite3MatchEName(&pNestedFrom->a[j], 0, zTName, 0, 0)==0 + ){ + continue; + } + + /* If a column is marked as 'hidden', omit it from the expanded + ** result-set list unless the SELECT has the SF_IncludeHidden + ** bit set. + */ + if( (p->selFlags & SF_IncludeHidden)==0 + && IsHiddenColumn(&pTab->aCol[j]) + ){ + continue; + } + if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 + && zTName==0 + && (selFlags & (SF_NestedFrom))==0 + ){ + continue; + } } + assert( zName ); tableSeen = 1; if( i>0 && zTName==0 && (selFlags & SF_NestedFrom)==0 ){ @@ -146633,7 +149175,8 @@ static int selectExpander(Walker *pWalker, Select *p){ pX = &pNew->a[pNew->nExpr-1]; assert( pX->zEName==0 ); if( (selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){ - if( pNestedFrom ){ + if( pNestedFrom && (!ViewCanHaveRowid || jnExpr) ){ + assert( jnExpr ); pX->zEName = sqlite3DbStrDup(db, pNestedFrom->a[j].zEName); testcase( pX->zEName==0 ); }else{ @@ -146641,11 +149184,11 @@ static int selectExpander(Walker *pWalker, Select *p){ zSchemaName, zTabName, zName); testcase( pX->zEName==0 ); } - pX->fg.eEName = ENAME_TAB; + pX->fg.eEName = (j==pTab->nCol ? ENAME_ROWID : ENAME_TAB); if( (pFrom->fg.isUsing && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0) || (pUsing && sqlite3IdListIndex(pUsing, zName)>=0) - || (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 + || (jnCol && (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)) ){ pX->fg.bNoExpand = 1; } @@ -146747,10 +149290,10 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ SrcList *pTabList; SrcItem *pFrom; - assert( p->selFlags & SF_Resolved ); if( p->selFlags & SF_HasTypeInfo ) return; p->selFlags |= SF_HasTypeInfo; pParse = pWalker->pParse; + assert( (p->selFlags & SF_Resolved) ); pTabList = p->pSrc; for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ Table *pTab = pFrom->pTab; @@ -146820,6 +149363,8 @@ SQLITE_PRIVATE void sqlite3SelectPrep( */ static void printAggInfo(AggInfo *pAggInfo){ int ii; + sqlite3DebugPrintf("AggInfo %d/%p:\n", + pAggInfo->selId, pAggInfo); for(ii=0; iinColumn; ii++){ struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; sqlite3DebugPrintf( @@ -146866,8 +149411,14 @@ static void analyzeAggFuncArgs( pNC->ncFlags |= NC_InAggFunc; for(i=0; inFunc; i++){ Expr *pExpr = pAggInfo->aFunc[i].pFExpr; + assert( pExpr->op==TK_FUNCTION || pExpr->op==TK_AGG_FUNCTION ); assert( ExprUseXList(pExpr) ); sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList); + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + sqlite3ExprAnalyzeAggList(pNC, pExpr->pLeft->x.pList); + } #ifndef SQLITE_OMIT_WINDOWFUNC assert( !IsWindowFunc(pExpr) ); if( ExprHasProperty(pExpr, EP_WinFunc) ){ @@ -147022,6 +149573,36 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ pFunc->pFunc->zName)); } } + if( pFunc->iOBTab>=0 ){ + ExprList *pOBList; + KeyInfo *pKeyInfo; + int nExtra = 0; + assert( pFunc->pFExpr->pLeft!=0 ); + assert( pFunc->pFExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pFunc->pFExpr->pLeft) ); + assert( pFunc->pFunc!=0 ); + pOBList = pFunc->pFExpr->pLeft->x.pList; + if( !pFunc->bOBUnique ){ + nExtra++; /* One extra column for the OP_Sequence */ + } + if( pFunc->bOBPayload ){ + /* extra columns for the function arguments */ + assert( ExprUseXList(pFunc->pFExpr) ); + nExtra += pFunc->pFExpr->x.pList->nExpr; + } + if( pFunc->bUseSubtype ){ + nExtra += pFunc->pFExpr->x.pList->nExpr; + } + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOBList, 0, nExtra); + if( !pFunc->bOBUnique && pParse->nErr==0 ){ + pKeyInfo->nKeyField++; + } + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, + pFunc->iOBTab, pOBList->nExpr+nExtra, 0, + (char*)pKeyInfo, P4_KEYINFO); + ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(ORDER BY)", + pFunc->pFunc->zName)); + } } } @@ -147037,13 +149618,56 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ ExprList *pList; assert( ExprUseXList(pF->pFExpr) ); pList = pF->pFExpr->x.pList; + if( pF->iOBTab>=0 ){ + /* For an ORDER BY aggregate, calls to OP_AggStep were deferred. Inputs + ** were stored in emphermal table pF->iOBTab. Here, we extract those + ** inputs (in ORDER BY order) and make all calls to OP_AggStep + ** before doing the OP_AggFinal call. */ + int iTop; /* Start of loop for extracting columns */ + int nArg; /* Number of columns to extract */ + int nKey; /* Key columns to be skipped */ + int regAgg; /* Extract into this array */ + int j; /* Loop counter */ + + assert( pF->pFunc!=0 ); + nArg = pList->nExpr; + regAgg = sqlite3GetTempRange(pParse, nArg); + + if( pF->bOBPayload==0 ){ + nKey = 0; + }else{ + assert( pF->pFExpr->pLeft!=0 ); + assert( ExprUseXList(pF->pFExpr->pLeft) ); + assert( pF->pFExpr->pLeft->x.pList!=0 ); + nKey = pF->pFExpr->pLeft->x.pList->nExpr; + if( ALWAYS(!pF->bOBUnique) ) nKey++; + } + iTop = sqlite3VdbeAddOp1(v, OP_Rewind, pF->iOBTab); VdbeCoverage(v); + for(j=nArg-1; j>=0; j--){ + sqlite3VdbeAddOp3(v, OP_Column, pF->iOBTab, nKey+j, regAgg+j); + } + if( pF->bUseSubtype ){ + int regSubtype = sqlite3GetTempReg(pParse); + int iBaseCol = nKey + nArg + (pF->bOBPayload==0 && pF->bOBUnique==0); + for(j=nArg-1; j>=0; j--){ + sqlite3VdbeAddOp3(v, OP_Column, pF->iOBTab, iBaseCol+j, regSubtype); + sqlite3VdbeAddOp2(v, OP_SetSubtype, regSubtype, regAgg+j); + } + sqlite3ReleaseTempReg(pParse, regSubtype); + } + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); + sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nArg); + sqlite3VdbeAddOp2(v, OP_Next, pF->iOBTab, iTop+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, iTop); + sqlite3ReleaseTempRange(pParse, regAgg, nArg); + } sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i), pList ? pList->nExpr : 0); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); } } - /* ** Generate code that will update the accumulator memory cells for an ** aggregate based on the current cursor position. @@ -147052,6 +149676,13 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ ** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator ** registers if register regAcc contains 0. The caller will take care ** of setting and clearing regAcc. +** +** For an ORDER BY aggregate, the actual accumulator memory cell update +** is deferred until after all input rows have been received, so that they +** can be run in the requested order. In that case, instead of invoking +** OP_AggStep to update the accumulator, just add the arguments that would +** have been passed into OP_AggStep into the sorting ephemeral table +** (along with the appropriate sort key). */ static void updateAccumulator( Parse *pParse, @@ -147073,9 +149704,12 @@ static void updateAccumulator( int nArg; int addrNext = 0; int regAgg; + int regAggSz = 0; + int regDistinct = 0; ExprList *pList; assert( ExprUseXList(pF->pFExpr) ); assert( !IsWindowFunc(pF->pFExpr) ); + assert( pF->pFunc!=0 ); pList = pF->pFExpr->x.pList; if( ExprHasProperty(pF->pFExpr, EP_WinFunc) ){ Expr *pFilter = pF->pFExpr->y.pWin->pFilter; @@ -147099,9 +149733,55 @@ static void updateAccumulator( addrNext = sqlite3VdbeMakeLabel(pParse); sqlite3ExprIfFalse(pParse, pFilter, addrNext, SQLITE_JUMPIFNULL); } - if( pList ){ + if( pF->iOBTab>=0 ){ + /* Instead of invoking AggStep, we must push the arguments that would + ** have been passed to AggStep onto the sorting table. */ + int jj; /* Registered used so far in building the record */ + ExprList *pOBList; /* The ORDER BY clause */ + assert( pList!=0 ); + nArg = pList->nExpr; + assert( nArg>0 ); + assert( pF->pFExpr->pLeft!=0 ); + assert( pF->pFExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pF->pFExpr->pLeft) ); + pOBList = pF->pFExpr->pLeft->x.pList; + assert( pOBList!=0 ); + assert( pOBList->nExpr>0 ); + regAggSz = pOBList->nExpr; + if( !pF->bOBUnique ){ + regAggSz++; /* One register for OP_Sequence */ + } + if( pF->bOBPayload ){ + regAggSz += nArg; + } + if( pF->bUseSubtype ){ + regAggSz += nArg; + } + regAggSz++; /* One extra register to hold result of MakeRecord */ + regAgg = sqlite3GetTempRange(pParse, regAggSz); + regDistinct = regAgg; + sqlite3ExprCodeExprList(pParse, pOBList, regAgg, 0, SQLITE_ECEL_DUP); + jj = pOBList->nExpr; + if( !pF->bOBUnique ){ + sqlite3VdbeAddOp2(v, OP_Sequence, pF->iOBTab, regAgg+jj); + jj++; + } + if( pF->bOBPayload ){ + regDistinct = regAgg+jj; + sqlite3ExprCodeExprList(pParse, pList, regDistinct, 0, SQLITE_ECEL_DUP); + jj += nArg; + } + if( pF->bUseSubtype ){ + int kk; + int regBase = pF->bOBPayload ? regDistinct : regAgg; + for(kk=0; kknExpr; regAgg = sqlite3GetTempRange(pParse, nArg); + regDistinct = regAgg; sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP); }else{ nArg = 0; @@ -147112,26 +149792,37 @@ static void updateAccumulator( addrNext = sqlite3VdbeMakeLabel(pParse); } pF->iDistinct = codeDistinct(pParse, eDistinctType, - pF->iDistinct, addrNext, pList, regAgg); - } - if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ - CollSeq *pColl = 0; - struct ExprList_item *pItem; - int j; - assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */ - for(j=0, pItem=pList->a; !pColl && jpExpr); - } - if( !pColl ){ - pColl = pParse->db->pDfltColl; + pF->iDistinct, addrNext, pList, regDistinct); + } + if( pF->iOBTab>=0 ){ + /* Insert a new record into the ORDER BY table */ + sqlite3VdbeAddOp3(v, OP_MakeRecord, regAgg, regAggSz-1, + regAgg+regAggSz-1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pF->iOBTab, regAgg+regAggSz-1, + regAgg, regAggSz-1); + sqlite3ReleaseTempRange(pParse, regAgg, regAggSz); + }else{ + /* Invoke the AggStep function */ + if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + CollSeq *pColl = 0; + struct ExprList_item *pItem; + int j; + assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */ + for(j=0, pItem=pList->a; !pColl && jpExpr); + } + if( !pColl ){ + pColl = pParse->db->pDfltColl; + } + if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; + sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, + (char *)pColl, P4_COLLSEQ); } - if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; - sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ); + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); + sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nArg); + sqlite3ReleaseTempRange(pParse, regAgg, nArg); } - sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); - sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nArg); - sqlite3ReleaseTempRange(pParse, regAgg, nArg); if( addrNext ){ sqlite3VdbeResolveLabel(v, addrNext); } @@ -147290,7 +149981,8 @@ static SrcItem *isSelfJoinView( /* ** Deallocate a single AggInfo object */ -static void agginfoFree(sqlite3 *db, AggInfo *p){ +static void agginfoFree(sqlite3 *db, void *pArg){ + AggInfo *p = (AggInfo*)pArg; sqlite3DbFree(db, p->aCol); sqlite3DbFree(db, p->aFunc); sqlite3DbFreeNN(db, p); @@ -147364,7 +150056,7 @@ static int countOfViewOptimization(Parse *pParse, Select *p){ pSub->selFlags |= SF_Aggregate; pSub->selFlags &= ~SF_Compound; pSub->nSelectRow = 0; - sqlite3ExprListDelete(db, pSub->pEList); + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, pSub->pEList); pTerm = pPrior ? sqlite3ExprDup(db, pCount, 0) : pCount; pSub->pEList = sqlite3ExprListAppend(pParse, 0, pTerm); pTerm = sqlite3PExpr(pParse, TK_SELECT, 0, 0); @@ -147544,9 +150236,8 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY"); } #endif - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3ExprListDelete, - p->pOrderBy); + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, + p->pOrderBy); testcase( pParse->earlyCleanup ); p->pOrderBy = 0; } @@ -147652,6 +150343,7 @@ SQLITE_PRIVATE int sqlite3Select( TREETRACE(0x1000,pParse,p, ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); + unsetJoinExpr(p->pWhere, pItem->iCursor, 0); } } if( pItem->fg.jointype & JT_LTORJ ){ @@ -147666,17 +150358,15 @@ SQLITE_PRIVATE int sqlite3Select( TREETRACE(0x1000,pParse,p, ("RIGHT-JOIN simplifies to JOIN on term %d\n",j)); pI2->fg.jointype &= ~(JT_RIGHT|JT_OUTER); + unsetJoinExpr(p->pWhere, pI2->iCursor, 1); } } } - for(j=pTabList->nSrc-1; j>=i; j--){ + for(j=pTabList->nSrc-1; j>=0; j--){ pTabList->a[j].fg.jointype &= ~JT_LTORJ; if( pTabList->a[j].fg.jointype & JT_RIGHT ) break; } } - assert( pItem->iCursor>=0 ); - unsetJoinExpr(p->pWhere, pItem->iCursor, - pTabList->a[0].fg.jointype & JT_LTORJ); } /* No further action if this term of the FROM clause is not a subquery */ @@ -147739,9 +150429,8 @@ SQLITE_PRIVATE int sqlite3Select( ){ TREETRACE(0x800,pParse,p, ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))sqlite3ExprListDelete, - pSub->pOrderBy); + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, + pSub->pOrderBy); pSub->pOrderBy = 0; } @@ -147866,7 +150555,7 @@ SQLITE_PRIVATE int sqlite3Select( /* Generate code for all sub-queries in the FROM clause */ pSub = pItem->pSelect; - if( pSub==0 ) continue; + if( pSub==0 || pItem->addrFillSub!=0 ) continue; /* The code for a subquery should only be generated once. */ assert( pItem->addrFillSub==0 ); @@ -147897,7 +150586,7 @@ SQLITE_PRIVATE int sqlite3Select( #endif assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 ); }else{ - TREETRACE(0x4000,pParse,p,("Push-down not possible\n")); + TREETRACE(0x4000,pParse,p,("WHERE-lcause push-down not possible\n")); } /* Convert unused result columns of the subquery into simple NULL @@ -148270,8 +150959,7 @@ SQLITE_PRIVATE int sqlite3Select( */ pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) ); if( pAggInfo ){ - sqlite3ParserAddCleanup(pParse, - (void(*)(sqlite3*,void*))agginfoFree, pAggInfo); + sqlite3ParserAddCleanup(pParse, agginfoFree, pAggInfo); testcase( pParse->earlyCleanup ); } if( db->mallocFailed ){ @@ -148779,6 +151467,12 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprListDelete(db, pMinMaxOrderBy); #ifdef SQLITE_DEBUG if( pAggInfo && !db->mallocFailed ){ +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + TREETRACE(0x20,pParse,p,("Finished with AggInfo\n")); + printAggInfo(pAggInfo); + } +#endif for(i=0; inColumn; i++){ Expr *pExpr = pAggInfo->aCol[i].pCExpr; if( pExpr==0 ) continue; @@ -149192,6 +151886,10 @@ SQLITE_PRIVATE void sqlite3BeginTrigger( sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables"); goto trigger_orphan_error; } + if( (pTab->tabFlags & TF_Shadow)!=0 && sqlite3ReadOnlyShadowTables(db) ){ + sqlite3ErrorMsg(pParse, "cannot create triggers on shadow tables"); + goto trigger_orphan_error; + } /* Check that the trigger name is not reserved and that no trigger of the ** specified name exists */ @@ -149956,6 +152654,72 @@ static ExprList *sqlite3ExpandReturning( return pNew; } +/* If the Expr node is a subquery or an EXISTS operator or an IN operator that +** uses a subquery, and if the subquery is SF_Correlated, then mark the +** expression as EP_VarSelect. +*/ +static int sqlite3ReturningSubqueryVarSelect(Walker *NotUsed, Expr *pExpr){ + UNUSED_PARAMETER(NotUsed); + if( ExprUseXSelect(pExpr) + && (pExpr->x.pSelect->selFlags & SF_Correlated)!=0 + ){ + testcase( ExprHasProperty(pExpr, EP_VarSelect) ); + ExprSetProperty(pExpr, EP_VarSelect); + } + return WRC_Continue; +} + + +/* +** If the SELECT references the table pWalker->u.pTab, then do two things: +** +** (1) Mark the SELECT as as SF_Correlated. +** (2) Set pWalker->eCode to non-zero so that the caller will know +** that (1) has happened. +*/ +static int sqlite3ReturningSubqueryCorrelated(Walker *pWalker, Select *pSelect){ + int i; + SrcList *pSrc; + assert( pSelect!=0 ); + pSrc = pSelect->pSrc; + assert( pSrc!=0 ); + for(i=0; inSrc; i++){ + if( pSrc->a[i].pTab==pWalker->u.pTab ){ + testcase( pSelect->selFlags & SF_Correlated ); + pSelect->selFlags |= SF_Correlated; + pWalker->eCode = 1; + break; + } + } + return WRC_Continue; +} + +/* +** Scan the expression list that is the argument to RETURNING looking +** for subqueries that depend on the table which is being modified in the +** statement that is hosting the RETURNING clause (pTab). Mark all such +** subqueries as SF_Correlated. If the subqueries are part of an +** expression, mark the expression as EP_VarSelect. +** +** https://sqlite.org/forum/forumpost/2c83569ce8945d39 +*/ +static void sqlite3ProcessReturningSubqueries( + ExprList *pEList, + Table *pTab +){ + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = sqlite3ExprWalkNoop; + w.xSelectCallback = sqlite3ReturningSubqueryCorrelated; + w.u.pTab = pTab; + sqlite3WalkExprList(&w, pEList); + if( w.eCode ){ + w.xExprCallback = sqlite3ReturningSubqueryVarSelect; + w.xSelectCallback = sqlite3SelectWalkNoop; + sqlite3WalkExprList(&w, pEList); + } +} + /* ** Generate code for the RETURNING trigger. Unlike other triggers ** that invoke a subprogram in the bytecode, the code for RETURNING @@ -149975,16 +152739,24 @@ static void codeReturningTrigger( SrcList sFrom; assert( v!=0 ); - assert( pParse->bReturning ); + if( !pParse->bReturning ){ + /* This RETURNING trigger must be for a different statement as + ** this statement lacks a RETURNING clause. */ + return; + } assert( db->pParse==pParse ); pReturning = pParse->u1.pReturning; - assert( pTrigger == &(pReturning->retTrig) ); + if( pTrigger != &(pReturning->retTrig) ){ + /* This RETURNING trigger is for a different statement */ + return; + } memset(&sSelect, 0, sizeof(sSelect)); memset(&sFrom, 0, sizeof(sFrom)); sSelect.pEList = sqlite3ExprListDup(db, pReturning->pReturnEL, 0); sSelect.pSrc = &sFrom; sFrom.nSrc = 1; sFrom.a[0].pTab = pTab; + sFrom.a[0].zName = pTab->zName; /* tag-20240424-1 */ sFrom.a[0].iCursor = -1; sqlite3SelectPrep(pParse, &sSelect, 0); if( pParse->nErr==0 ){ @@ -150011,6 +152783,7 @@ static void codeReturningTrigger( int i; int nCol = pNew->nExpr; int reg = pParse->nMem+1; + sqlite3ProcessReturningSubqueries(pNew, pTab); pParse->nMem += nCol+2; pReturning->iRetReg = reg; for(i=0; ipUpsertIdx = pIdx; + if( sqlite3UpsertOfIndex(pAll,pIdx)!=pUpsert ){ + /* Really this should be an error. The isDup ON CONFLICT clause will + ** never fire. But this problem was not discovered until three years + ** after multi-CONFLICT upsert was added, and so we silently ignore + ** the problem to prevent breaking applications that might actually + ** have redundant ON CONFLICT clauses. */ + pUpsert->isDup = 1; + } break; } if( pUpsert->pUpsertIdx==0 ){ @@ -152078,9 +154863,13 @@ SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert *pUpsert){ Upsert *pNext; if( NEVER(pUpsert==0) ) return 0; pNext = pUpsert->pNextUpsert; - if( pNext==0 ) return 1; - if( pNext->pUpsertTarget==0 ) return 1; - if( pNext->pUpsertIdx==0 ) return 1; + while( 1 /*exit-by-return*/ ){ + if( pNext==0 ) return 1; + if( pNext->pUpsertTarget==0 ) return 1; + if( pNext->pUpsertIdx==0 ) return 1; + if( !pNext->isDup ) return 0; + pNext = pNext->pNextUpsert; + } return 0; } @@ -152909,7 +155698,6 @@ SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){ if( p ){ db->pDisconnect = 0; - sqlite3ExpirePreparedStatements(db, 0); do { VTable *pNext = p->pNext; sqlite3VtabUnlock(p); @@ -153206,6 +155994,8 @@ static int vtabCallConstructor( db->pVtabCtx = &sCtx; pTab->nTabRef++; rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr); + assert( pTab!=0 ); + assert( pTab->nTabRef>1 || rc!=SQLITE_OK ); sqlite3DeleteTable(db, pTab); db->pVtabCtx = sCtx.pPrior; if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); @@ -153228,7 +156018,7 @@ static int vtabCallConstructor( pVTable->nRef = 1; if( sCtx.bDeclared==0 ){ const char *zFormat = "vtable constructor did not declare schema: %s"; - *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName); + *pzErr = sqlite3MPrintf(db, zFormat, zModuleName); sqlite3VtabUnlock(pVTable); rc = SQLITE_ERROR; }else{ @@ -153406,19 +156196,38 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ Table *pTab; Parse sParse; int initBusy; + int i; + const unsigned char *z; + static const u8 aKeyword[] = { TK_CREATE, TK_TABLE, 0 }; #ifdef SQLITE_ENABLE_API_ARMOR if( !sqlite3SafetyCheckOk(db) || zCreateTable==0 ){ return SQLITE_MISUSE_BKPT; } #endif + + /* Verify that the first two keywords in the CREATE TABLE statement + ** really are "CREATE" and "TABLE". If this is not the case, then + ** sqlite3_declare_vtab() is being misused. + */ + z = (const unsigned char*)zCreateTable; + for(i=0; aKeyword[i]; i++){ + int tokenType = 0; + do{ z += sqlite3GetToken(z, &tokenType); }while( tokenType==TK_SPACE ); + if( tokenType!=aKeyword[i] ){ + sqlite3ErrorWithMsg(db, SQLITE_ERROR, "syntax error"); + return SQLITE_ERROR; + } + } + sqlite3_mutex_enter(db->mutex); pCtx = db->pVtabCtx; if( !pCtx || pCtx->bDeclared ){ - sqlite3Error(db, SQLITE_MISUSE); + sqlite3Error(db, SQLITE_MISUSE_BKPT); sqlite3_mutex_leave(db->mutex); return SQLITE_MISUSE_BKPT; } + pTab = pCtx->pTab; assert( IsVirtual(pTab) ); @@ -153432,11 +156241,10 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ initBusy = db->init.busy; db->init.busy = 0; sParse.nQueryLoop = 1; - if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable) - && ALWAYS(sParse.pNewTable!=0) - && ALWAYS(!db->mallocFailed) - && IsOrdinaryTable(sParse.pNewTable) - ){ + if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable) ){ + assert( sParse.pNewTable!=0 ); + assert( !db->mallocFailed ); + assert( IsOrdinaryTable(sParse.pNewTable) ); assert( sParse.zErrMsg==0 ); if( !pTab->aCol ){ Table *pNew = sParse.pNewTable; @@ -154475,7 +157283,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereGetMask(WhereMaskSet*,int); #ifdef WHERETRACE_ENABLED SQLITE_PRIVATE void sqlite3WhereClausePrint(WhereClause *pWC); SQLITE_PRIVATE void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm); -SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC); +SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC); #endif SQLITE_PRIVATE WhereTerm *sqlite3WhereFindTerm( WhereClause *pWC, /* The WHERE clause to be searched */ @@ -154606,7 +157414,7 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, SrcItem*, WhereClause*); #define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */ #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */ #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */ -#define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */ + /* 0x02000000 -- available for reuse */ #define WHERE_EXPRIDX 0x04000000 /* Uses an index-on-expressions */ #endif /* !defined(SQLITE_WHEREINT_H) */ @@ -155931,6 +158739,27 @@ static SQLITE_NOINLINE void filterPullDown( } } +/* +** Loop pLoop is a WHERE_INDEXED level that uses at least one IN(...) +** operator. Return true if level pLoop is guaranteed to visit only one +** row for each key generated for the index. +*/ +static int whereLoopIsOneRow(WhereLoop *pLoop){ + if( pLoop->u.btree.pIndex->onError + && pLoop->nSkip==0 + && pLoop->u.btree.nEq==pLoop->u.btree.pIndex->nKeyCol + ){ + int ii; + for(ii=0; iiu.btree.nEq; ii++){ + if( pLoop->aLTerm[ii]->eOperator & (WO_IS|WO_ISNULL) ){ + return 0; + } + } + return 1; + } + return 0; +} + /* ** Generate code for the start of the iLevel-th loop in the WHERE clause ** implementation described by pWInfo. @@ -156009,7 +158838,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){ pLevel->iLeftJoin = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin); - VdbeComment((v, "init LEFT JOIN no-match flag")); + VdbeComment((v, "init LEFT JOIN match flag")); } /* Compute a safe address to jump to if we discover that the table for @@ -156678,7 +159507,9 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( } /* Record the instruction used to terminate the loop. */ - if( pLoop->wsFlags & WHERE_ONEROW ){ + if( (pLoop->wsFlags & WHERE_ONEROW) + || (pLevel->u.in.nIn && regBignull==0 && whereLoopIsOneRow(pLoop)) + ){ pLevel->op = OP_Noop; }else if( bRev ){ pLevel->op = OP_Prev; @@ -157068,6 +159899,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( ** iLoop==3: Code all remaining expressions. ** ** An effort is made to skip unnecessary iterations of the loop. + ** + ** This optimization of causing simple query restrictions to occur before + ** more complex one is call the "push-down" optimization in MySQL. Here + ** in SQLite, the name is "MySQL push-down", since there is also another + ** totally unrelated optimization called "WHERE-clause push-down". + ** Sometimes the qualifier is omitted, resulting in an ambiguity, so beware. */ iLoop = (pIdx ? 1 : 2); do{ @@ -157318,7 +160155,16 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop( pRJ->regReturn); for(k=0; ka[k].pWLoop->iTab == pWInfo->a[k].iFrom ); + pRight = &pWInfo->pTabList->a[pWInfo->a[k].iFrom]; mAll |= pWInfo->a[k].pWLoop->maskSelf; + if( pRight->fg.viaCoroutine ){ + sqlite3VdbeAddOp3( + v, OP_Null, 0, pRight->regResult, + pRight->regResult + pRight->pSelect->pEList->nExpr-1 + ); + } sqlite3VdbeAddOp1(v, OP_NullRow, pWInfo->a[k].iTabCur); iIdxCur = pWInfo->a[k].iIdxCur; if( iIdxCur ){ @@ -158375,7 +161221,7 @@ static SQLITE_NOINLINE int exprMightBeIndexed2( if( pIdx->aiColumn[i]!=XN_EXPR ) continue; assert( pIdx->bHasExpr ); if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0 - && pExpr->op!=TK_STRING + && !sqlite3ExprIsConstant(0,pIdx->aColExpr->a[i].pExpr) ){ aiCurCol[0] = iCur; aiCurCol[1] = XN_EXPR; @@ -159024,6 +161870,7 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec continue; } if( pWC->a[ii].leftCursor!=iCsr ) return; + if( pWC->a[ii].prereqRight!=0 ) return; } /* Check condition (5). Return early if it is not met. */ @@ -159038,12 +161885,14 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec /* All conditions are met. Add the terms to the where-clause object. */ assert( p->pLimit->op==TK_LIMIT ); - whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft, - iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT); - if( p->iOffset>0 ){ + if( p->iOffset!=0 && (p->selFlags & SF_Compound)==0 ){ whereAddLimitExpr(pWC, p->iOffset, p->pLimit->pRight, iCsr, SQLITE_INDEX_CONSTRAINT_OFFSET); } + if( p->iOffset==0 || (p->selFlags & SF_Compound)==0 ){ + whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft, + iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT); + } } } @@ -159561,6 +162410,42 @@ static Expr *whereRightSubexprIsColumn(Expr *p){ return 0; } +/* +** Term pTerm is guaranteed to be a WO_IN term. It may be a component term +** of a vector IN expression of the form "(x, y, ...) IN (SELECT ...)". +** This function checks to see if the term is compatible with an index +** column with affinity idxaff (one of the SQLITE_AFF_XYZ values). If so, +** it returns a pointer to the name of the collation sequence (e.g. "BINARY" +** or "NOCASE") used by the comparison in pTerm. If it is not compatible +** with affinity idxaff, NULL is returned. +*/ +static SQLITE_NOINLINE const char *indexInAffinityOk( + Parse *pParse, + WhereTerm *pTerm, + u8 idxaff +){ + Expr *pX = pTerm->pExpr; + Expr inexpr; + + assert( pTerm->eOperator & WO_IN ); + + if( sqlite3ExprIsVector(pX->pLeft) ){ + int iField = pTerm->u.x.iField - 1; + inexpr.flags = 0; + inexpr.op = TK_EQ; + inexpr.pLeft = pX->pLeft->x.pList->a[iField].pExpr; + assert( ExprUseXSelect(pX) ); + inexpr.pRight = pX->x.pSelect->pEList->a[iField].pExpr; + pX = &inexpr; + } + + if( sqlite3IndexAffinityOk(pX, idxaff) ){ + CollSeq *pRet = sqlite3ExprCompareCollSeq(pParse, pX); + return pRet ? pRet->zName : sqlite3StrBINARY; + } + return 0; +} + /* ** Advance to the next WhereTerm that matches according to the criteria ** established when the pScan object was initialized by whereScanInit(). @@ -159611,16 +162496,24 @@ static WhereTerm *whereScanNext(WhereScan *pScan){ if( (pTerm->eOperator & pScan->opMask)!=0 ){ /* Verify the affinity and collating sequence match */ if( pScan->zCollName && (pTerm->eOperator & WO_ISNULL)==0 ){ - CollSeq *pColl; + const char *zCollName; Parse *pParse = pWC->pWInfo->pParse; pX = pTerm->pExpr; - if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){ - continue; + + if( (pTerm->eOperator & WO_IN) ){ + zCollName = indexInAffinityOk(pParse, pTerm, pScan->idxaff); + if( !zCollName ) continue; + }else{ + CollSeq *pColl; + if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){ + continue; + } + assert(pX->pLeft); + pColl = sqlite3ExprCompareCollSeq(pParse, pX); + zCollName = pColl ? pColl->zName : sqlite3StrBINARY; } - assert(pX->pLeft); - pColl = sqlite3ExprCompareCollSeq(pParse, pX); - if( pColl==0 ) pColl = pParse->db->pDfltColl; - if( sqlite3StrICmp(pColl->zName, pScan->zCollName) ){ + + if( sqlite3StrICmp(zCollName, pScan->zCollName) ){ continue; } } @@ -159937,12 +162830,22 @@ static void translateColumnToCopy( for(; iStartp1!=iTabCur ) continue; if( pOp->opcode==OP_Column ){ +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE OP_Column to OP_Copy at %d\n", iStart); + } +#endif pOp->opcode = OP_Copy; pOp->p1 = pOp->p2 + iRegister; pOp->p2 = pOp->p3; pOp->p3 = 0; pOp->p5 = 2; /* Cause the MEM_Subtype flag to be cleared */ }else if( pOp->opcode==OP_Rowid ){ +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE OP_Rowid to OP_Sequence at %d\n", iStart); + } +#endif pOp->opcode = OP_Sequence; pOp->p1 = iAutoidxCur; #ifdef SQLITE_ALLOW_ROWID_IN_VIEW @@ -159962,9 +162865,13 @@ static void translateColumnToCopy( ** are no-ops. */ #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED) -static void whereTraceIndexInfoInputs(sqlite3_index_info *p){ +static void whereTraceIndexInfoInputs( + sqlite3_index_info *p, /* The IndexInfo object */ + Table *pTab /* The TABLE that is the virtual table */ +){ int i; if( (sqlite3WhereTrace & 0x10)==0 ) return; + sqlite3DebugPrintf("sqlite3_index_info inputs for %s:\n", pTab->zName); for(i=0; inConstraint; i++){ sqlite3DebugPrintf( " constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n", @@ -159982,9 +162889,13 @@ static void whereTraceIndexInfoInputs(sqlite3_index_info *p){ p->aOrderBy[i].desc); } } -static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){ +static void whereTraceIndexInfoOutputs( + sqlite3_index_info *p, /* The IndexInfo object */ + Table *pTab /* The TABLE that is the virtual table */ +){ int i; if( (sqlite3WhereTrace & 0x10)==0 ) return; + sqlite3DebugPrintf("sqlite3_index_info outputs for %s:\n", pTab->zName); for(i=0; inConstraint; i++){ sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n", i, @@ -159998,8 +162909,8 @@ static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){ sqlite3DebugPrintf(" estimatedRows=%lld\n", p->estimatedRows); } #else -#define whereTraceIndexInfoInputs(A) -#define whereTraceIndexInfoOutputs(A) +#define whereTraceIndexInfoInputs(A,B) +#define whereTraceIndexInfoOutputs(A,B) #endif /* @@ -160183,7 +163094,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex( ** WHERE clause (or the ON clause of a LEFT join) that constrain which ** rows of the target table (pSrc) that can be used. */ if( (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom) + && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom, 0) ){ pPartial = sqlite3ExprAnd(pParse, pPartial, sqlite3ExprDup(pParse->db, pExpr, 0)); @@ -160225,7 +163136,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex( ** if they go out of sync. */ if( IsView(pTable) ){ - extraCols = ALLBITS; + extraCols = ALLBITS & ~idxCols; }else{ extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); } @@ -160401,13 +163312,17 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */ int iCur; /* Cursor for table getting the filter */ IndexedExpr *saved_pIdxEpr; /* saved copy of Parse.pIdxEpr */ + IndexedExpr *saved_pIdxPartExpr; /* saved copy of Parse.pIdxPartExpr */ saved_pIdxEpr = pParse->pIdxEpr; + saved_pIdxPartExpr = pParse->pIdxPartExpr; pParse->pIdxEpr = 0; + pParse->pIdxPartExpr = 0; assert( pLoop!=0 ); assert( v!=0 ); assert( pLoop->wsFlags & WHERE_BLOOMFILTER ); + assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 ); addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); do{ @@ -160448,7 +163363,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( for(pTerm=pWInfo->sWC.a; pTermpExpr; if( (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc) + && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc, 0) ){ sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); } @@ -160497,6 +163412,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( }while( iLevel < pWInfo->nLevel ); sqlite3VdbeJumpHere(v, addrOnce); pParse->pIdxEpr = saved_pIdxEpr; + pParse->pIdxPartExpr = saved_pIdxPartExpr; } @@ -160573,7 +163489,7 @@ static sqlite3_index_info *allocateIndexInfo( Expr *pE2; /* Skip over constant terms in the ORDER BY clause */ - if( sqlite3ExprIsConstant(pExpr) ){ + if( sqlite3ExprIsConstant(0, pExpr) ){ continue; } @@ -160608,7 +163524,7 @@ static sqlite3_index_info *allocateIndexInfo( } if( i==n ){ nOrderBy = n; - if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) ){ + if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) && !pSrc->fg.rowidUsed ){ eDistinct = 2 + ((pWInfo->wctrlFlags & WHERE_SORTBYGROUP)!=0); }else if( pWInfo->wctrlFlags & WHERE_GROUPBY ){ eDistinct = 1; @@ -160685,7 +163601,7 @@ static sqlite3_index_info *allocateIndexInfo( pIdxInfo->nConstraint = j; for(i=j=0; ia[i].pExpr; - if( sqlite3ExprIsConstant(pExpr) ) continue; + if( sqlite3ExprIsConstant(0, pExpr) ) continue; assert( pExpr->op==TK_COLUMN || (pExpr->op==TK_COLLATE && pExpr->pLeft->op==TK_COLUMN && pExpr->iColumn==pExpr->pLeft->iColumn) ); @@ -160737,11 +163653,11 @@ static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab; int rc; - whereTraceIndexInfoInputs(p); + whereTraceIndexInfoInputs(p, pTab); pParse->db->nSchemaLock++; rc = pVtab->pModule->xBestIndex(pVtab, p); pParse->db->nSchemaLock--; - whereTraceIndexInfoOutputs(p); + whereTraceIndexInfoOutputs(p, pTab); if( rc!=SQLITE_OK && rc!=SQLITE_CONSTRAINT ){ if( rc==SQLITE_NOMEM ){ @@ -161264,7 +164180,8 @@ static int whereRangeScanEst( ** sample, then assume they are 4x more selective. This brings ** the estimated selectivity more in line with what it would be ** if estimated without the use of STAT4 tables. */ - if( iLwrIdx==iUprIdx ) nNew -= 20; assert( 20==sqlite3LogEst(4) ); + if( iLwrIdx==iUprIdx ){ nNew -= 20; } + assert( 20==sqlite3LogEst(4) ); }else{ nNew = 10; assert( 10==sqlite3LogEst(2) ); } @@ -161488,17 +164405,34 @@ SQLITE_PRIVATE void sqlite3WhereClausePrint(WhereClause *pWC){ #ifdef WHERETRACE_ENABLED /* ** Print a WhereLoop object for debugging purposes -*/ -SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC){ - WhereInfo *pWInfo = pWC->pWInfo; - int nb = 1+(pWInfo->pTabList->nSrc+3)/4; - SrcItem *pItem = pWInfo->pTabList->a + p->iTab; - Table *pTab = pItem->pTab; - Bitmask mAll = (((Bitmask)1)<<(nb*4)) - 1; - sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId, - p->iTab, nb, p->maskSelf, nb, p->prereq & mAll); - sqlite3DebugPrintf(" %12s", - pItem->zAlias ? pItem->zAlias : pTab->zName); +** +** Format example: +** +** .--- Position in WHERE clause rSetup, rRun, nOut ---. +** | | +** | .--- selfMask nTerm ------. | +** | | | | +** | | .-- prereq Idx wsFlags----. | | +** | | | Name | | | +** | | | __|__ nEq ---. ___|__ | __|__ +** | / \ / \ / \ | / \ / \ / \ +** 1.002.001 t2.t2xy 2 f 010241 N 2 cost 0,56,31 +*/ +SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC){ + if( pWC ){ + WhereInfo *pWInfo = pWC->pWInfo; + int nb = 1+(pWInfo->pTabList->nSrc+3)/4; + SrcItem *pItem = pWInfo->pTabList->a + p->iTab; + Table *pTab = pItem->pTab; + Bitmask mAll = (((Bitmask)1)<<(nb*4)) - 1; + sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId, + p->iTab, nb, p->maskSelf, nb, p->prereq & mAll); + sqlite3DebugPrintf(" %12s", + pItem->zAlias ? pItem->zAlias : pTab->zName); + }else{ + sqlite3DebugPrintf("%c%2d.%03llx.%03llx %c%d", + p->cId, p->iTab, p->maskSelf, p->prereq & 0xfff, p->cId, p->iTab); + } if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){ const char *zName; if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){ @@ -161535,6 +164469,15 @@ SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC){ } } } +SQLITE_PRIVATE void sqlite3ShowWhereLoop(const WhereLoop *p){ + if( p ) sqlite3WhereLoopPrint(p, 0); +} +SQLITE_PRIVATE void sqlite3ShowWhereLoopList(const WhereLoop *p){ + while( p ){ + sqlite3ShowWhereLoop(p); + p = p->pNextLoop; + } +} #endif /* @@ -161647,46 +164590,60 @@ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ } /* -** Return TRUE if all of the following are true: +** Return TRUE if X is a proper subset of Y but is of equal or less cost. +** In other words, return true if all constraints of X are also part of Y +** and Y has additional constraints that might speed the search that X lacks +** but the cost of running X is not more than the cost of running Y. +** +** In other words, return true if the cost relationwship between X and Y +** is inverted and needs to be adjusted. +** +** Case 1: ** -** (1) X has the same or lower cost, or returns the same or fewer rows, -** than Y. -** (2) X uses fewer WHERE clause terms than Y -** (3) Every WHERE clause term used by X is also used by Y -** (4) X skips at least as many columns as Y -** (5) If X is a covering index, than Y is too +** (1a) X and Y use the same index. +** (1b) X has fewer == terms than Y +** (1c) Neither X nor Y use skip-scan +** (1d) X does not have a a greater cost than Y ** -** Conditions (2) and (3) mean that X is a "proper subset" of Y. -** If X is a proper subset of Y then Y is a better choice and ought -** to have a lower cost. This routine returns TRUE when that cost -** relationship is inverted and needs to be adjusted. Constraint (4) -** was added because if X uses skip-scan less than Y it still might -** deserve a lower cost even if it is a proper subset of Y. Constraint (5) -** was added because a covering index probably deserves to have a lower cost -** than a non-covering index even if it is a proper subset. +** Case 2: +** +** (2a) X has the same or lower cost, or returns the same or fewer rows, +** than Y. +** (2b) X uses fewer WHERE clause terms than Y +** (2c) Every WHERE clause term used by X is also used by Y +** (2d) X skips at least as many columns as Y +** (2e) If X is a covering index, than Y is too */ static int whereLoopCheaperProperSubset( const WhereLoop *pX, /* First WhereLoop to compare */ const WhereLoop *pY /* Compare against this WhereLoop */ ){ int i, j; + if( pX->rRun>pY->rRun && pX->nOut>pY->nOut ) return 0; /* (1d) and (2a) */ + assert( (pX->wsFlags & WHERE_VIRTUALTABLE)==0 ); + assert( (pY->wsFlags & WHERE_VIRTUALTABLE)==0 ); + if( pX->u.btree.nEq < pY->u.btree.nEq /* (1b) */ + && pX->u.btree.pIndex==pY->u.btree.pIndex /* (1a) */ + && pX->nSkip==0 && pY->nSkip==0 /* (1c) */ + ){ + return 1; /* Case 1 is true */ + } if( pX->nLTerm-pX->nSkip >= pY->nLTerm-pY->nSkip ){ - return 0; /* X is not a subset of Y */ + return 0; /* (2b) */ } - if( pX->rRun>pY->rRun && pX->nOut>pY->nOut ) return 0; - if( pY->nSkip > pX->nSkip ) return 0; + if( pY->nSkip > pX->nSkip ) return 0; /* (2d) */ for(i=pX->nLTerm-1; i>=0; i--){ if( pX->aLTerm[i]==0 ) continue; for(j=pY->nLTerm-1; j>=0; j--){ if( pY->aLTerm[j]==pX->aLTerm[i] ) break; } - if( j<0 ) return 0; /* X not a subset of Y since term X[i] not used by Y */ + if( j<0 ) return 0; /* (2c) */ } if( (pX->wsFlags&WHERE_IDX_ONLY)!=0 && (pY->wsFlags&WHERE_IDX_ONLY)==0 ){ - return 0; /* Constraint (5) */ + return 0; /* (2e) */ } - return 1; /* All conditions meet */ + return 1; /* Case 2 is true */ } /* @@ -162176,7 +165133,12 @@ static int whereLoopAddBtreeIndex( assert( pNew->u.btree.nBtm==0 ); opMask = WO_EQ|WO_IN|WO_GT|WO_GE|WO_LT|WO_LE|WO_ISNULL|WO_IS; } - if( pProbe->bUnordered ) opMask &= ~(WO_GT|WO_GE|WO_LT|WO_LE); + if( pProbe->bUnordered || pProbe->bLowQual ){ + if( pProbe->bUnordered ) opMask &= ~(WO_GT|WO_GE|WO_LT|WO_LE); + if( pProbe->bLowQual && pSrc->fg.isIndexedBy==0 ){ + opMask &= ~(WO_EQ|WO_IN|WO_IS); + } + } assert( pNew->u.btree.nEqnColumn ); assert( pNew->u.btree.nEqnKeyCol @@ -162442,10 +165404,13 @@ static int whereLoopAddBtreeIndex( } } - /* Set rCostIdx to the cost of visiting selected rows in index. Add - ** it to pNew->rRun, which is currently set to the cost of the index - ** seek only. Then, if this is a non-covering index, add the cost of - ** visiting the rows in the main table. */ + /* Set rCostIdx to the estimated cost of visiting selected rows in the + ** index. The estimate is the sum of two values: + ** 1. The cost of doing one search-by-key to find the first matching + ** entry + ** 2. Stepping forward in the index pNew->nOut times to find all + ** additional matching entries. + */ assert( pSrc->pTab->szTabRow>0 ); if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){ /* The pProbe->szIdxRow is low for an IPK table since the interior @@ -162456,7 +165421,15 @@ static int whereLoopAddBtreeIndex( }else{ rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow; } - pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx); + rCostIdx = sqlite3LogEstAdd(rLogSize, rCostIdx); + + /* Estimate the cost of running the loop. If all data is coming + ** from the index, then this is just the cost of doing the index + ** lookup and scan. But if some data is coming out of the main table, + ** we also have to add in the cost of doing pNew->nOut searches to + ** locate the row in the main table that corresponds to the index entry. + */ + pNew->rRun = rCostIdx; if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){ pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16); } @@ -162562,7 +165535,9 @@ static int indexMightHelpWithOrderBy( for(ii=0; iinExpr; ii++){ Expr *pExpr = sqlite3ExprSkipCollateAndLikely(pOB->a[ii].pExpr); if( NEVER(pExpr==0) ) continue; - if( pExpr->op==TK_COLUMN && pExpr->iTable==iCursor ){ + if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN) + && pExpr->iTable==iCursor + ){ if( pExpr->iColumn<0 ) return 1; for(jj=0; jjnKeyCol; jj++){ if( pExpr->iColumn==pIndex->aiColumn[jj] ) return 1; @@ -162756,6 +165731,100 @@ static SQLITE_NOINLINE u32 whereIsCoveringIndex( return rc; } +/* +** This is an sqlite3ParserAddCleanup() callback that is invoked to +** free the Parse->pIdxEpr list when the Parse object is destroyed. +*/ +static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){ + IndexedExpr **pp = (IndexedExpr**)pObject; + while( *pp!=0 ){ + IndexedExpr *p = *pp; + *pp = p->pIENext; + sqlite3ExprDelete(db, p->pExpr); + sqlite3DbFreeNN(db, p); + } +} + +/* +** This function is called for a partial index - one with a WHERE clause - in +** two scenarios. In both cases, it determines whether or not the WHERE +** clause on the index implies that a column of the table may be safely +** replaced by a constant expression. For example, in the following +** SELECT: +** +** CREATE INDEX i1 ON t1(b, c) WHERE a=; +** SELECT a, b, c FROM t1 WHERE a= AND b=?; +** +** The "a" in the select-list may be replaced by , iff: +** +** (a) is a constant expression, and +** (b) The (a=) comparison uses the BINARY collation sequence, and +** (c) Column "a" has an affinity other than NONE or BLOB. +** +** If argument pItem is NULL, then pMask must not be NULL. In this case this +** function is being called as part of determining whether or not pIdx +** is a covering index. This function clears any bits in (*pMask) +** corresponding to columns that may be replaced by constants as described +** above. +** +** Otherwise, if pItem is not NULL, then this function is being called +** as part of coding a loop that uses index pIdx. In this case, add entries +** to the Parse.pIdxPartExpr list for each column that can be replaced +** by a constant. +*/ +static void wherePartIdxExpr( + Parse *pParse, /* Parse context */ + Index *pIdx, /* Partial index being processed */ + Expr *pPart, /* WHERE clause being processed */ + Bitmask *pMask, /* Mask to clear bits in */ + int iIdxCur, /* Cursor number for index */ + SrcItem *pItem /* The FROM clause entry for the table */ +){ + assert( pItem==0 || (pItem->fg.jointype & JT_RIGHT)==0 ); + assert( (pItem==0 || pMask==0) && (pMask!=0 || pItem!=0) ); + + if( pPart->op==TK_AND ){ + wherePartIdxExpr(pParse, pIdx, pPart->pRight, pMask, iIdxCur, pItem); + pPart = pPart->pLeft; + } + + if( (pPart->op==TK_EQ || pPart->op==TK_IS) ){ + Expr *pLeft = pPart->pLeft; + Expr *pRight = pPart->pRight; + u8 aff; + + if( pLeft->op!=TK_COLUMN ) return; + if( !sqlite3ExprIsConstant(0, pRight) ) return; + if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pParse, pPart)) ) return; + if( pLeft->iColumn<0 ) return; + aff = pIdx->pTable->aCol[pLeft->iColumn].affinity; + if( aff>=SQLITE_AFF_TEXT ){ + if( pItem ){ + sqlite3 *db = pParse->db; + IndexedExpr *p = (IndexedExpr*)sqlite3DbMallocRaw(db, sizeof(*p)); + if( p ){ + int bNullRow = (pItem->fg.jointype&(JT_LEFT|JT_LTORJ))!=0; + p->pExpr = sqlite3ExprDup(db, pRight, 0); + p->iDataCur = pItem->iCursor; + p->iIdxCur = iIdxCur; + p->iIdxCol = pLeft->iColumn; + p->bMaybeNullRow = bNullRow; + p->pIENext = pParse->pIdxPartExpr; + p->aff = aff; + pParse->pIdxPartExpr = p; + if( p->pIENext==0 ){ + void *pArg = (void*)&pParse->pIdxPartExpr; + sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pArg); + } + } + }else if( pLeft->iColumn<(BMS-1) ){ + *pMask &= ~((Bitmask)1 << pLeft->iColumn); + } + } + } +} + + /* ** Add all WhereLoop objects for a single table of the join where the table ** is identified by pBuilder->pNew->iTab. That table is guaranteed to be @@ -162959,9 +166028,6 @@ static int whereLoopAddBtree( #else pNew->rRun = rSize + 16; #endif - if( IsView(pTab) || (pTab->tabFlags & TF_Ephemeral)!=0 ){ - pNew->wsFlags |= WHERE_VIEWSCAN; - } ApplyCostMultiplier(pNew->rRun, pTab->costMult); whereLoopOutputAdjust(pWC, pNew, rSize); rc = whereLoopInsert(pBuilder, pNew); @@ -162974,6 +166040,11 @@ static int whereLoopAddBtree( pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; }else{ m = pSrc->colUsed & pProbe->colNotIdxed; + if( pProbe->pPartIdxWhere ){ + wherePartIdxExpr( + pWInfo->pParse, pProbe, pProbe->pPartIdxWhere, &m, 0, 0 + ); + } pNew->wsFlags = WHERE_INDEXED; if( m==TOPBIT || (pProbe->bHasExpr && !pProbe->bHasVCol && m!=0) ){ u32 isCov = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor); @@ -163072,7 +166143,7 @@ static int whereLoopAddBtree( ** unique index is used (making the index functionally non-unique) ** then the sqlite_stat1 data becomes important for scoring the ** plan */ - pTab->tabFlags |= TF_StatsUsed; + pTab->tabFlags |= TF_MaybeReanalyze; } #ifdef SQLITE_ENABLE_STAT4 sqlite3Stat4ProbeFree(pBuilder->pRec); @@ -163094,6 +166165,21 @@ static int isLimitTerm(WhereTerm *pTerm){ && pTerm->eMatchOp<=SQLITE_INDEX_CONSTRAINT_OFFSET; } +/* +** Return true if the first nCons constraints in the pUsage array are +** marked as in-use (have argvIndex>0). False otherwise. +*/ +static int allConstraintsUsed( + struct sqlite3_index_constraint_usage *aUsage, + int nCons +){ + int ii; + for(ii=0; iipNew->iTab. This @@ -163234,13 +166320,20 @@ static int whereLoopAddVirtualOne( *pbIn = 1; assert( (mExclude & WO_IN)==0 ); } + /* Unless pbRetryLimit is non-NULL, there should be no LIMIT/OFFSET + ** terms. And if there are any, they should follow all other terms. */ assert( pbRetryLimit || !isLimitTerm(pTerm) ); - if( isLimitTerm(pTerm) && *pbIn ){ + assert( !isLimitTerm(pTerm) || i>=nConstraint-2 ); + assert( !isLimitTerm(pTerm) || i==nConstraint-1 || isLimitTerm(pTerm+1) ); + + if( isLimitTerm(pTerm) && (*pbIn || !allConstraintsUsed(pUsage, i)) ){ /* If there is an IN(...) term handled as an == (separate call to ** xFilter for each value on the RHS of the IN) and a LIMIT or - ** OFFSET term handled as well, the plan is unusable. Set output - ** variable *pbRetryLimit to true to tell the caller to retry with - ** LIMIT and OFFSET disabled. */ + ** OFFSET term handled as well, the plan is unusable. Similarly, + ** if there is a LIMIT/OFFSET and there are other unused terms, + ** the plan cannot be used. In these cases set variable *pbRetryLimit + ** to true to tell the caller to retry with LIMIT and OFFSET + ** disabled. */ if( pIdxInfo->needToFreeIdxStr ){ sqlite3_free(pIdxInfo->idxStr); pIdxInfo->idxStr = 0; @@ -163356,7 +166449,7 @@ SQLITE_API int sqlite3_vtab_rhs_value( sqlite3_value *pVal = 0; int rc = SQLITE_OK; if( iCons<0 || iCons>=pIdxInfo->nConstraint ){ - rc = SQLITE_MISUSE; /* EV: R-30545-25046 */ + rc = SQLITE_MISUSE_BKPT; /* EV: R-30545-25046 */ }else{ if( pH->aRhs[iCons]==0 ){ WhereTerm *pTerm = &pH->pWC->a[pIdxInfo->aConstraint[iCons].iTermOffset]; @@ -164097,7 +167190,7 @@ static i8 wherePathSatisfiesOrderBy( if( MASKBIT(i) & obSat ) continue; p = pOrderBy->a[i].pExpr; mTerm = sqlite3WhereExprUsage(&pWInfo->sMaskSet,p); - if( mTerm==0 && !sqlite3ExprIsConstant(p) ) continue; + if( mTerm==0 && !sqlite3ExprIsConstant(0,p) ) continue; if( (mTerm&~orderDistinctMask)==0 ){ obSat |= MASKBIT(i); } @@ -164380,14 +167473,6 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */ } - /* TUNING: A full-scan of a VIEW or subquery in the outer loop - ** is not so bad. */ - if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 && nLoop>1 ){ - rCost += -10; - nOut += -30; - WHERETRACE(0x80,("VIEWSCAN cost reduction for %c\n",pWLoop->cId)); - } - /* Check to see if pWLoop should be added to the set of ** mxChoice best-so-far paths. ** @@ -164574,10 +167659,9 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){ pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; } - if( pWInfo->pSelect->pOrderBy - && pWInfo->nOBSat > pWInfo->pSelect->pOrderBy->nExpr ){ - pWInfo->nOBSat = pWInfo->pSelect->pOrderBy->nExpr; - } + /* vvv--- See check-in [12ad822d9b827777] on 2023-03-16 ---vvv */ + assert( pWInfo->pSelect->pOrderBy==0 + || pWInfo->nOBSat <= pWInfo->pSelect->pOrderBy->nExpr ); }else{ pWInfo->revMask = pFrom->revLoop; if( pWInfo->nOBSat<=0 ){ @@ -164620,7 +167704,6 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ } } - pWInfo->nRowOut = pFrom->nRow; /* Free temporary memory and return success */ @@ -164628,6 +167711,83 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ return SQLITE_OK; } +/* +** This routine implements a heuristic designed to improve query planning. +** This routine is called in between the first and second call to +** wherePathSolver(). Hence the name "Interstage" "Heuristic". +** +** The first call to wherePathSolver() (hereafter just "solver()") computes +** the best path without regard to the order of the outputs. The second call +** to the solver() builds upon the first call to try to find an alternative +** path that satisfies the ORDER BY clause. +** +** This routine looks at the results of the first solver() run, and for +** every FROM clause term in the resulting query plan that uses an equality +** constraint against an index, disable other WhereLoops for that same +** FROM clause term that would try to do a full-table scan. This prevents +** an index search from being converted into a full-table scan in order to +** satisfy an ORDER BY clause, since even though we might get slightly better +** performance using the full-scan without sorting if the output size +** estimates are very precise, we might also get severe performance +** degradation using the full-scan if the output size estimate is too large. +** It is better to err on the side of caution. +** +** Except, if the first solver() call generated a full-table scan in an outer +** loop then stop this analysis at the first full-scan, since the second +** solver() run might try to swap that full-scan for another in order to +** get the output into the correct order. In other words, we allow a +** rewrite like this: +** +** First Solver() Second Solver() +** |-- SCAN t1 |-- SCAN t2 +** |-- SEARCH t2 `-- SEARCH t1 +** `-- SORT USING B-TREE +** +** The purpose of this routine is to disallow rewrites such as: +** +** First Solver() Second Solver() +** |-- SEARCH t1 |-- SCAN t2 <--- bad! +** |-- SEARCH t2 `-- SEARCH t1 +** `-- SORT USING B-TREE +** +** See test cases in test/whereN.test for the real-world query that +** originally provoked this heuristic. +*/ +static SQLITE_NOINLINE void whereInterstageHeuristic(WhereInfo *pWInfo){ + int i; +#ifdef WHERETRACE_ENABLED + int once = 0; +#endif + for(i=0; inLevel; i++){ + WhereLoop *p = pWInfo->a[i].pWLoop; + if( p==0 ) break; + if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 ) continue; + if( (p->wsFlags & (WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_IN))!=0 ){ + u8 iTab = p->iTab; + WhereLoop *pLoop; + for(pLoop=pWInfo->pLoops; pLoop; pLoop=pLoop->pNextLoop){ + if( pLoop->iTab!=iTab ) continue; + if( (pLoop->wsFlags & (WHERE_CONSTRAINT|WHERE_AUTO_INDEX))!=0 ){ + /* Auto-index and index-constrained loops allowed to remain */ + continue; + } +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x80 ){ + if( once==0 ){ + sqlite3DebugPrintf("Loops disabled by interstage heuristic:\n"); + once = 1; + } + sqlite3WhereLoopPrint(pLoop, &pWInfo->sWC); + } +#endif /* WHERETRACE_ENABLED */ + pLoop->prereq = ALLBITS; /* Prevent 2nd solver() from using this one */ + } + }else{ + break; + } + } +} + /* ** Most queries use only a single table (they are not joins) and have ** simple == constraints against indexed fields. This routine attempts @@ -164916,7 +168076,7 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful( SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab]; Table *pTab = pItem->pTab; if( (pTab->tabFlags & TF_HasStat1)==0 ) break; - pTab->tabFlags |= TF_StatsUsed; + pTab->tabFlags |= TF_MaybeReanalyze; if( i>=1 && (pLoop->wsFlags & reqFlags)==reqFlags /* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */ @@ -164938,17 +168098,55 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful( } /* -** This is an sqlite3ParserAddCleanup() callback that is invoked to -** free the Parse->pIdxEpr list when the Parse object is destroyed. +** Expression Node callback for sqlite3ExprCanReturnSubtype(). +** +** Only a function call is able to return a subtype. So if the node +** is not a function call, return WRC_Prune immediately. +** +** A function call is able to return a subtype if it has the +** SQLITE_RESULT_SUBTYPE property. +** +** Assume that every function is able to pass-through a subtype from +** one of its argument (using sqlite3_result_value()). Most functions +** are not this way, but we don't have a mechanism to distinguish those +** that are from those that are not, so assume they all work this way. +** That means that if one of its arguments is another function and that +** other function is able to return a subtype, then this function is +** able to return a subtype. */ -static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){ - Parse *pParse = (Parse*)pObject; - while( pParse->pIdxEpr!=0 ){ - IndexedExpr *p = pParse->pIdxEpr; - pParse->pIdxEpr = p->pIENext; - sqlite3ExprDelete(db, p->pExpr); - sqlite3DbFreeNN(db, p); +static int exprNodeCanReturnSubtype(Walker *pWalker, Expr *pExpr){ + int n; + FuncDef *pDef; + sqlite3 *db; + if( pExpr->op!=TK_FUNCTION ){ + return WRC_Prune; } + assert( ExprUseXList(pExpr) ); + db = pWalker->pParse->db; + n = pExpr->x.pList ? pExpr->x.pList->nExpr : 0; + pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0); + if( pDef==0 || (pDef->funcFlags & SQLITE_RESULT_SUBTYPE)!=0 ){ + pWalker->eCode = 1; + return WRC_Prune; + } + return WRC_Continue; +} + +/* +** Return TRUE if expression pExpr is able to return a subtype. +** +** A TRUE return does not guarantee that a subtype will be returned. +** It only indicates that a subtype return is possible. False positives +** are acceptable as they only disable an optimization. False negatives, +** on the other hand, can lead to incorrect answers. +*/ +static int sqlite3ExprCanReturnSubtype(Parse *pParse, Expr *pExpr){ + Walker w; + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = exprNodeCanReturnSubtype; + sqlite3WalkExpr(&w, pExpr); + return w.eCode; } /* @@ -164976,20 +168174,20 @@ static SQLITE_NOINLINE void whereAddIndexedExpr( for(i=0; inColumn; i++){ Expr *pExpr; int j = pIdx->aiColumn[i]; - int bMaybeNullRow; if( j==XN_EXPR ){ pExpr = pIdx->aColExpr->a[i].pExpr; - testcase( pTabItem->fg.jointype & JT_LEFT ); - testcase( pTabItem->fg.jointype & JT_RIGHT ); - testcase( pTabItem->fg.jointype & JT_LTORJ ); - bMaybeNullRow = (pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0; }else if( j>=0 && (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)!=0 ){ pExpr = sqlite3ColumnExpr(pTab, &pTab->aCol[j]); - bMaybeNullRow = 0; }else{ continue; } - if( sqlite3ExprIsConstant(pExpr) ) continue; + if( sqlite3ExprIsConstant(0,pExpr) ) continue; + if( pExpr->op==TK_FUNCTION && sqlite3ExprCanReturnSubtype(pParse,pExpr) ){ + /* Functions that might set a subtype should not be replaced by the + ** value taken from an expression index since the index omits the + ** subtype. https://sqlite.org/forum/forumpost/68d284c86b082c3e */ + continue; + } p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr)); if( p==0 ) break; p->pIENext = pParse->pIdxEpr; @@ -165003,7 +168201,7 @@ static SQLITE_NOINLINE void whereAddIndexedExpr( p->iDataCur = pTabItem->iCursor; p->iIdxCur = iIdxCur; p->iIdxCol = i; - p->bMaybeNullRow = bMaybeNullRow; + p->bMaybeNullRow = (pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0; if( sqlite3IndexAffinityStr(pParse->db, pIdx) ){ p->aff = pIdx->zColAff[i]; } @@ -165012,7 +168210,8 @@ static SQLITE_NOINLINE void whereAddIndexedExpr( #endif pParse->pIdxEpr = p; if( p->pIENext==0 ){ - sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pParse); + void *pArg = (void*)&pParse->pIdxEpr; + sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pArg); } } } @@ -165167,7 +168366,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( /* An ORDER/GROUP BY clause of more than 63 terms cannot be optimized */ testcase( pOrderBy && pOrderBy->nExpr==BMS-1 ); - if( pOrderBy && pOrderBy->nExpr>=BMS ) pOrderBy = 0; + if( pOrderBy && pOrderBy->nExpr>=BMS ){ + pOrderBy = 0; + wctrlFlags &= ~WHERE_WANT_DISTINCT; + } /* The number of tables in the FROM clause is limited by the number of ** bits in a Bitmask @@ -165192,7 +168394,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( ** field (type Bitmask) it must be aligned on an 8-byte boundary on ** some architectures. Hence the ROUND8() below. */ - nByteWInfo = ROUND8P(sizeof(WhereInfo)+(nTabList-1)*sizeof(WhereLevel)); + nByteWInfo = ROUND8P(sizeof(WhereInfo)); + if( nTabList>1 ){ + nByteWInfo = ROUND8P(nByteWInfo + (nTabList-1)*sizeof(WhereLevel)); + } pWInfo = sqlite3DbMallocRawNN(db, nByteWInfo + sizeof(WhereLoop)); if( db->mallocFailed ){ sqlite3DbFree(db, pWInfo); @@ -165246,7 +168451,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( ){ pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; } - ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW")); + if( ALWAYS(pWInfo->pSelect) + && (pWInfo->pSelect->selFlags & SF_MultiValue)==0 + ){ + ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW")); + } }else{ /* Assign a bit from the bitmask to every term in the FROM clause. ** @@ -165399,9 +168608,20 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( wherePathSolver(pWInfo, 0); if( db->mallocFailed ) goto whereBeginError; if( pWInfo->pOrderBy ){ + whereInterstageHeuristic(pWInfo); wherePathSolver(pWInfo, pWInfo->nRowOut+1); if( db->mallocFailed ) goto whereBeginError; } + + /* TUNING: Assume that a DISTINCT clause on a subquery reduces + ** the output size by a factor of 8 (LogEst -30). + */ + if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)!=0 ){ + WHERETRACE(0x0080,("nRowOut reduced from %d to %d due to DISTINCT\n", + pWInfo->nRowOut, pWInfo->nRowOut-30)); + pWInfo->nRowOut -= 30; + } + } assert( pWInfo->pTabList!=0 ); if( pWInfo->pOrderBy==0 && (db->flags & SQLITE_ReverseOrder)!=0 ){ @@ -165614,6 +168834,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( if( pIx->bHasExpr && OptimizationEnabled(db, SQLITE_IndexedExpr) ){ whereAddIndexedExpr(pParse, pIx, iIndexCur, pTabItem); } + if( pIx->pPartIdxWhere && (pTabItem->fg.jointype & JT_RIGHT)==0 ){ + wherePartIdxExpr( + pParse, pIx, pIx->pPartIdxWhere, 0, iIndexCur, pTabItem + ); + } } pLevel->iIdxCur = iIndexCur; assert( pIx!=0 ); @@ -165739,6 +168964,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( pParse->nQueryLoop = pWInfo->savedNQueryLoop; whereInfoFree(db, pWInfo); } +#ifdef WHERETRACE_ENABLED + /* Prevent harmless compiler warnings about debugging routines + ** being declared but never used */ + sqlite3ShowWhereLoopList(0); +#endif /* WHERETRACE_ENABLED */ return 0; } @@ -165928,7 +169158,15 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v); assert( (ws & WHERE_IDX_ONLY)==0 || (ws & WHERE_INDEXED)!=0 ); if( (ws & WHERE_IDX_ONLY)==0 ){ - assert( pLevel->iTabCur==pTabList->a[pLevel->iFrom].iCursor ); + SrcItem *pSrc = &pTabList->a[pLevel->iFrom]; + assert( pLevel->iTabCur==pSrc->iCursor ); + if( pSrc->fg.viaCoroutine ){ + int m, n; + n = pSrc->regResult; + assert( pSrc->pTab!=0 ); + m = pSrc->pTab->nCol; + sqlite3VdbeAddOp3(v, OP_Null, 0, n, n+m-1); + } sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur); } if( (ws & WHERE_INDEXED) @@ -165978,6 +169216,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ */ if( pTabItem->fg.viaCoroutine ){ testcase( pParse->db->mallocFailed ); + assert( pTabItem->regResult>=0 ); translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur, pTabItem->regResult, 0); continue; @@ -167156,7 +170395,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){ assert( ExprUseXList(pWin->pOwner) ); assert( pWin->pWFunc!=0 ); pArgs = pWin->pOwner->x.pList; - if( pWin->pWFunc->funcFlags & SQLITE_FUNC_SUBTYPE ){ + if( pWin->pWFunc->funcFlags & SQLITE_SUBTYPE ){ selectWindowRewriteEList(pParse, pMWin, pSrc, pArgs, pTab, &pSublist); pWin->iArgCol = (pSublist ? pSublist->nExpr : 0); pWin->bExprArgs = 1; @@ -167282,7 +170521,7 @@ SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p){ ** variable values in the expression tree. */ static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){ - if( 0==sqlite3ExprIsConstant(pExpr) ){ + if( 0==sqlite3ExprIsConstant(0,pExpr) ){ if( IN_RENAME_OBJECT ) sqlite3RenameExprUnmap(pParse, pExpr); sqlite3ExprDelete(pParse->db, pExpr); pExpr = sqlite3ExprAlloc(pParse->db, TK_NULL, 0, 0); @@ -167430,8 +170669,9 @@ SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){ if( p ){ assert( p->op==TK_FUNCTION ); assert( pWin ); + assert( ExprIsFullSize(p) ); p->y.pWin = pWin; - ExprSetProperty(p, EP_WinFunc); + ExprSetProperty(p, EP_WinFunc|EP_FullSize); pWin->pOwner = p; if( (p->flags & EP_Distinct) && pWin->eFrmType!=TK_FILTER ){ sqlite3ErrorMsg(pParse, @@ -169373,6 +172613,14 @@ static void updateDeleteLimitError( return pSelect; } + /* Memory allocator for parser stack resizing. This is a thin wrapper around + ** sqlite3_realloc() that includes a call to sqlite3FaultSim() to facilitate + ** testing. + */ + static void *parserStackRealloc(void *pOld, sqlite3_uint64 newSize){ + return sqlite3FaultSim(700) ? 0 : sqlite3_realloc(pOld, newSize); + } + /* Construct a new Expr object from a single token */ static Expr *tokenExpr(Parse *pParse, int op, Token t){ @@ -169622,8 +172870,8 @@ static void updateDeleteLimitError( #define TK_TRUEFALSE 170 #define TK_ISNOT 171 #define TK_FUNCTION 172 -#define TK_UMINUS 173 -#define TK_UPLUS 174 +#define TK_UPLUS 173 +#define TK_UMINUS 174 #define TK_TRUTH 175 #define TK_REGISTER 176 #define TK_VECTOR 177 @@ -169632,8 +172880,9 @@ static void updateDeleteLimitError( #define TK_ASTERISK 180 #define TK_SPAN 181 #define TK_ERROR 182 -#define TK_SPACE 183 -#define TK_ILLEGAL 184 +#define TK_QNUMBER 183 +#define TK_SPACE 184 +#define TK_ILLEGAL 185 #endif /**************** End token definitions ***************************************/ @@ -169674,6 +172923,9 @@ static void updateDeleteLimitError( ** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser ** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser ** sqlite3ParserCTX_* As sqlite3ParserARG_ except for %extra_context +** YYREALLOC Name of the realloc() function to use +** YYFREE Name of the free() function to use +** YYDYNSTACK True if stack space should be extended on heap ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. ** YYNSTATE the combined number of states. @@ -169687,37 +172939,39 @@ static void updateDeleteLimitError( ** YY_NO_ACTION The yy_action[] code for no-op ** YY_MIN_REDUCE Minimum value for reduce actions ** YY_MAX_REDUCE Maximum value for reduce actions +** YY_MIN_DSTRCTR Minimum symbol value that has a destructor +** YY_MAX_DSTRCTR Maximum symbol value that has a destructor */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 319 +#define YYNOCODE 322 #define YYACTIONTYPE unsigned short int #define YYWILDCARD 101 #define sqlite3ParserTOKENTYPE Token typedef union { int yyinit; sqlite3ParserTOKENTYPE yy0; - TriggerStep* yy33; - Window* yy41; - Select* yy47; - SrcList* yy131; - struct TrigEvent yy180; - struct {int value; int mask;} yy231; - IdList* yy254; - u32 yy285; - ExprList* yy322; - Cte* yy385; - int yy394; - Upsert* yy444; - u8 yy516; - With* yy521; - const char* yy522; - Expr* yy528; - OnOrUsing yy561; - struct FrameBound yy595; + ExprList* yy14; + With* yy59; + Cte* yy67; + Upsert* yy122; + IdList* yy132; + int yy144; + const char* yy168; + SrcList* yy203; + Window* yy211; + OnOrUsing yy269; + struct TrigEvent yy286; + struct {int value; int mask;} yy383; + u32 yy391; + TriggerStep* yy427; + Expr* yy454; + u8 yy462; + struct FrameBound yy509; + Select* yy555; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -169727,24 +172981,29 @@ typedef union { #define sqlite3ParserARG_PARAM #define sqlite3ParserARG_FETCH #define sqlite3ParserARG_STORE +#define YYREALLOC parserStackRealloc +#define YYFREE sqlite3_free +#define YYDYNSTACK 1 #define sqlite3ParserCTX_SDECL Parse *pParse; #define sqlite3ParserCTX_PDECL ,Parse *pParse #define sqlite3ParserCTX_PARAM ,pParse #define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; #define sqlite3ParserCTX_STORE yypParser->pParse=pParse; #define YYFALLBACK 1 -#define YYNSTATE 575 -#define YYNRULE 403 -#define YYNRULE_WITH_ACTION 338 -#define YYNTOKEN 185 -#define YY_MAX_SHIFT 574 -#define YY_MIN_SHIFTREDUCE 833 -#define YY_MAX_SHIFTREDUCE 1235 -#define YY_ERROR_ACTION 1236 -#define YY_ACCEPT_ACTION 1237 -#define YY_NO_ACTION 1238 -#define YY_MIN_REDUCE 1239 -#define YY_MAX_REDUCE 1641 +#define YYNSTATE 583 +#define YYNRULE 409 +#define YYNRULE_WITH_ACTION 344 +#define YYNTOKEN 186 +#define YY_MAX_SHIFT 582 +#define YY_MIN_SHIFTREDUCE 845 +#define YY_MAX_SHIFTREDUCE 1253 +#define YY_ERROR_ACTION 1254 +#define YY_ACCEPT_ACTION 1255 +#define YY_NO_ACTION 1256 +#define YY_MIN_REDUCE 1257 +#define YY_MAX_REDUCE 1665 +#define YY_MIN_DSTRCTR 205 +#define YY_MAX_DSTRCTR 319 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -169760,6 +173019,22 @@ typedef union { # define yytestcase(X) #endif +/* Macro to determine if stack space has the ability to grow using +** heap memory. +*/ +#if YYSTACKDEPTH<=0 || YYDYNSTACK +# define YYGROWABLESTACK 1 +#else +# define YYGROWABLESTACK 0 +#endif + +/* Guarantee a minimum number of initial stack slots. +*/ +#if YYSTACKDEPTH<=0 +# undef YYSTACKDEPTH +# define YYSTACKDEPTH 2 /* Need a minimum stack size */ +#endif + /* Next are the tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement @@ -169811,618 +173086,630 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2096) +#define YY_ACTTAB_COUNT (2142) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 568, 208, 568, 118, 115, 229, 568, 118, 115, 229, - /* 10 */ 568, 1310, 377, 1289, 408, 562, 562, 562, 568, 409, - /* 20 */ 378, 1310, 1272, 41, 41, 41, 41, 208, 1520, 71, - /* 30 */ 71, 969, 419, 41, 41, 491, 303, 279, 303, 970, - /* 40 */ 397, 71, 71, 125, 126, 80, 1210, 1210, 1047, 1050, - /* 50 */ 1037, 1037, 123, 123, 124, 124, 124, 124, 476, 409, - /* 60 */ 1237, 1, 1, 574, 2, 1241, 550, 118, 115, 229, - /* 70 */ 317, 480, 146, 480, 524, 118, 115, 229, 529, 1323, - /* 80 */ 417, 523, 142, 125, 126, 80, 1210, 1210, 1047, 1050, - /* 90 */ 1037, 1037, 123, 123, 124, 124, 124, 124, 118, 115, - /* 100 */ 229, 327, 122, 122, 122, 122, 121, 121, 120, 120, - /* 110 */ 120, 119, 116, 444, 284, 284, 284, 284, 442, 442, - /* 120 */ 442, 1559, 376, 1561, 1186, 375, 1157, 565, 1157, 565, - /* 130 */ 409, 1559, 537, 259, 226, 444, 101, 145, 449, 316, - /* 140 */ 559, 240, 122, 122, 122, 122, 121, 121, 120, 120, - /* 150 */ 120, 119, 116, 444, 125, 126, 80, 1210, 1210, 1047, - /* 160 */ 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, 142, - /* 170 */ 294, 1186, 339, 448, 120, 120, 120, 119, 116, 444, - /* 180 */ 127, 1186, 1187, 1186, 148, 441, 440, 568, 119, 116, - /* 190 */ 444, 124, 124, 124, 124, 117, 122, 122, 122, 122, - /* 200 */ 121, 121, 120, 120, 120, 119, 116, 444, 454, 113, - /* 210 */ 13, 13, 546, 122, 122, 122, 122, 121, 121, 120, - /* 220 */ 120, 120, 119, 116, 444, 422, 316, 559, 1186, 1187, - /* 230 */ 1186, 149, 1218, 409, 1218, 124, 124, 124, 124, 122, - /* 240 */ 122, 122, 122, 121, 121, 120, 120, 120, 119, 116, - /* 250 */ 444, 465, 342, 1034, 1034, 1048, 1051, 125, 126, 80, - /* 260 */ 1210, 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, - /* 270 */ 124, 124, 1275, 522, 222, 1186, 568, 409, 224, 514, - /* 280 */ 175, 82, 83, 122, 122, 122, 122, 121, 121, 120, - /* 290 */ 120, 120, 119, 116, 444, 1005, 16, 16, 1186, 133, - /* 300 */ 133, 125, 126, 80, 1210, 1210, 1047, 1050, 1037, 1037, - /* 310 */ 123, 123, 124, 124, 124, 124, 122, 122, 122, 122, - /* 320 */ 121, 121, 120, 120, 120, 119, 116, 444, 1038, 546, - /* 330 */ 1186, 373, 1186, 1187, 1186, 252, 1429, 399, 504, 501, - /* 340 */ 500, 111, 560, 566, 4, 924, 924, 433, 499, 340, - /* 350 */ 460, 328, 360, 394, 1231, 1186, 1187, 1186, 563, 568, - /* 360 */ 122, 122, 122, 122, 121, 121, 120, 120, 120, 119, - /* 370 */ 116, 444, 284, 284, 369, 1572, 1598, 441, 440, 154, - /* 380 */ 409, 445, 71, 71, 1282, 565, 1215, 1186, 1187, 1186, - /* 390 */ 85, 1217, 271, 557, 543, 515, 515, 568, 98, 1216, - /* 400 */ 6, 1274, 472, 142, 125, 126, 80, 1210, 1210, 1047, - /* 410 */ 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, 550, - /* 420 */ 13, 13, 1024, 507, 1218, 1186, 1218, 549, 109, 109, - /* 430 */ 222, 568, 1232, 175, 568, 427, 110, 197, 445, 569, - /* 440 */ 445, 430, 1546, 1014, 325, 551, 1186, 270, 287, 368, - /* 450 */ 510, 363, 509, 257, 71, 71, 543, 71, 71, 359, - /* 460 */ 316, 559, 1604, 122, 122, 122, 122, 121, 121, 120, - /* 470 */ 120, 120, 119, 116, 444, 1014, 1014, 1016, 1017, 27, - /* 480 */ 284, 284, 1186, 1187, 1186, 1152, 568, 1603, 409, 899, - /* 490 */ 190, 550, 356, 565, 550, 935, 533, 517, 1152, 516, - /* 500 */ 413, 1152, 552, 1186, 1187, 1186, 568, 544, 544, 51, - /* 510 */ 51, 214, 125, 126, 80, 1210, 1210, 1047, 1050, 1037, - /* 520 */ 1037, 123, 123, 124, 124, 124, 124, 1186, 474, 135, - /* 530 */ 135, 409, 284, 284, 1484, 505, 121, 121, 120, 120, - /* 540 */ 120, 119, 116, 444, 1005, 565, 518, 217, 541, 541, - /* 550 */ 316, 559, 142, 6, 532, 125, 126, 80, 1210, 1210, - /* 560 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, - /* 570 */ 1548, 122, 122, 122, 122, 121, 121, 120, 120, 120, - /* 580 */ 119, 116, 444, 485, 1186, 1187, 1186, 482, 281, 1263, - /* 590 */ 955, 252, 1186, 373, 504, 501, 500, 1186, 340, 570, - /* 600 */ 1186, 570, 409, 292, 499, 955, 874, 191, 480, 316, - /* 610 */ 559, 384, 290, 380, 122, 122, 122, 122, 121, 121, - /* 620 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, - /* 630 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 640 */ 124, 409, 394, 1132, 1186, 867, 100, 284, 284, 1186, - /* 650 */ 1187, 1186, 373, 1089, 1186, 1187, 1186, 1186, 1187, 1186, - /* 660 */ 565, 455, 32, 373, 233, 125, 126, 80, 1210, 1210, - /* 670 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, - /* 680 */ 1428, 957, 568, 228, 956, 122, 122, 122, 122, 121, - /* 690 */ 121, 120, 120, 120, 119, 116, 444, 1152, 228, 1186, - /* 700 */ 157, 1186, 1187, 1186, 1547, 13, 13, 301, 955, 1226, - /* 710 */ 1152, 153, 409, 1152, 373, 1575, 1170, 5, 369, 1572, - /* 720 */ 429, 1232, 3, 955, 122, 122, 122, 122, 121, 121, - /* 730 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, - /* 740 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 750 */ 124, 409, 208, 567, 1186, 1025, 1186, 1187, 1186, 1186, - /* 760 */ 388, 850, 155, 1546, 286, 402, 1094, 1094, 488, 568, - /* 770 */ 465, 342, 1315, 1315, 1546, 125, 126, 80, 1210, 1210, - /* 780 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, - /* 790 */ 129, 568, 13, 13, 374, 122, 122, 122, 122, 121, - /* 800 */ 121, 120, 120, 120, 119, 116, 444, 302, 568, 453, - /* 810 */ 528, 1186, 1187, 1186, 13, 13, 1186, 1187, 1186, 1293, - /* 820 */ 463, 1263, 409, 1313, 1313, 1546, 1010, 453, 452, 200, - /* 830 */ 299, 71, 71, 1261, 122, 122, 122, 122, 121, 121, - /* 840 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, - /* 850 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 860 */ 124, 409, 227, 1069, 1152, 284, 284, 419, 312, 278, - /* 870 */ 278, 285, 285, 1415, 406, 405, 382, 1152, 565, 568, - /* 880 */ 1152, 1189, 565, 1592, 565, 125, 126, 80, 1210, 1210, - /* 890 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, - /* 900 */ 453, 1476, 13, 13, 1530, 122, 122, 122, 122, 121, - /* 910 */ 121, 120, 120, 120, 119, 116, 444, 201, 568, 354, - /* 920 */ 1578, 574, 2, 1241, 838, 839, 840, 1554, 317, 1205, - /* 930 */ 146, 6, 409, 255, 254, 253, 206, 1323, 9, 1189, - /* 940 */ 262, 71, 71, 424, 122, 122, 122, 122, 121, 121, - /* 950 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, - /* 960 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 970 */ 124, 568, 284, 284, 568, 1206, 409, 573, 313, 1241, - /* 980 */ 349, 1292, 352, 419, 317, 565, 146, 491, 525, 1635, - /* 990 */ 395, 371, 491, 1323, 70, 70, 1291, 71, 71, 240, - /* 1000 */ 1321, 104, 80, 1210, 1210, 1047, 1050, 1037, 1037, 123, - /* 1010 */ 123, 124, 124, 124, 124, 122, 122, 122, 122, 121, - /* 1020 */ 121, 120, 120, 120, 119, 116, 444, 1110, 284, 284, - /* 1030 */ 428, 448, 1519, 1206, 439, 284, 284, 1483, 1348, 311, - /* 1040 */ 474, 565, 1111, 969, 491, 491, 217, 1259, 565, 1532, - /* 1050 */ 568, 970, 207, 568, 1024, 240, 383, 1112, 519, 122, - /* 1060 */ 122, 122, 122, 121, 121, 120, 120, 120, 119, 116, - /* 1070 */ 444, 1015, 107, 71, 71, 1014, 13, 13, 910, 568, - /* 1080 */ 1489, 568, 284, 284, 97, 526, 491, 448, 911, 1322, - /* 1090 */ 1318, 545, 409, 284, 284, 565, 151, 209, 1489, 1491, - /* 1100 */ 262, 450, 55, 55, 56, 56, 565, 1014, 1014, 1016, - /* 1110 */ 443, 332, 409, 527, 12, 295, 125, 126, 80, 1210, - /* 1120 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 1130 */ 124, 347, 409, 862, 1528, 1206, 125, 126, 80, 1210, - /* 1140 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 1150 */ 124, 1133, 1633, 474, 1633, 371, 125, 114, 80, 1210, - /* 1160 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, - /* 1170 */ 124, 1489, 329, 474, 331, 122, 122, 122, 122, 121, - /* 1180 */ 121, 120, 120, 120, 119, 116, 444, 203, 1415, 568, - /* 1190 */ 1290, 862, 464, 1206, 436, 122, 122, 122, 122, 121, - /* 1200 */ 121, 120, 120, 120, 119, 116, 444, 553, 1133, 1634, - /* 1210 */ 539, 1634, 15, 15, 890, 122, 122, 122, 122, 121, - /* 1220 */ 121, 120, 120, 120, 119, 116, 444, 568, 298, 538, - /* 1230 */ 1131, 1415, 1552, 1553, 1327, 409, 6, 6, 1163, 1264, - /* 1240 */ 415, 320, 284, 284, 1415, 508, 565, 525, 300, 457, - /* 1250 */ 43, 43, 568, 891, 12, 565, 330, 478, 425, 407, - /* 1260 */ 126, 80, 1210, 1210, 1047, 1050, 1037, 1037, 123, 123, - /* 1270 */ 124, 124, 124, 124, 568, 57, 57, 288, 1186, 1415, - /* 1280 */ 496, 458, 392, 392, 391, 273, 389, 1131, 1551, 847, - /* 1290 */ 1163, 407, 6, 568, 321, 1152, 470, 44, 44, 1550, - /* 1300 */ 1110, 426, 234, 6, 323, 256, 540, 256, 1152, 431, - /* 1310 */ 568, 1152, 322, 17, 487, 1111, 58, 58, 122, 122, - /* 1320 */ 122, 122, 121, 121, 120, 120, 120, 119, 116, 444, - /* 1330 */ 1112, 216, 481, 59, 59, 1186, 1187, 1186, 111, 560, - /* 1340 */ 324, 4, 236, 456, 526, 568, 237, 456, 568, 437, - /* 1350 */ 168, 556, 420, 141, 479, 563, 568, 293, 568, 1091, - /* 1360 */ 568, 293, 568, 1091, 531, 568, 870, 8, 60, 60, - /* 1370 */ 235, 61, 61, 568, 414, 568, 414, 568, 445, 62, - /* 1380 */ 62, 45, 45, 46, 46, 47, 47, 199, 49, 49, - /* 1390 */ 557, 568, 359, 568, 100, 486, 50, 50, 63, 63, - /* 1400 */ 64, 64, 561, 415, 535, 410, 568, 1024, 568, 534, - /* 1410 */ 316, 559, 316, 559, 65, 65, 14, 14, 568, 1024, - /* 1420 */ 568, 512, 930, 870, 1015, 109, 109, 929, 1014, 66, - /* 1430 */ 66, 131, 131, 110, 451, 445, 569, 445, 416, 177, - /* 1440 */ 1014, 132, 132, 67, 67, 568, 467, 568, 930, 471, - /* 1450 */ 1360, 283, 226, 929, 315, 1359, 407, 568, 459, 407, - /* 1460 */ 1014, 1014, 1016, 239, 407, 86, 213, 1346, 52, 52, - /* 1470 */ 68, 68, 1014, 1014, 1016, 1017, 27, 1577, 1174, 447, - /* 1480 */ 69, 69, 288, 97, 108, 1535, 106, 392, 392, 391, - /* 1490 */ 273, 389, 568, 877, 847, 881, 568, 111, 560, 466, - /* 1500 */ 4, 568, 152, 30, 38, 568, 1128, 234, 396, 323, - /* 1510 */ 111, 560, 527, 4, 563, 53, 53, 322, 568, 163, - /* 1520 */ 163, 568, 337, 468, 164, 164, 333, 563, 76, 76, - /* 1530 */ 568, 289, 1508, 568, 31, 1507, 568, 445, 338, 483, - /* 1540 */ 100, 54, 54, 344, 72, 72, 296, 236, 1076, 557, - /* 1550 */ 445, 877, 1356, 134, 134, 168, 73, 73, 141, 161, - /* 1560 */ 161, 1566, 557, 535, 568, 319, 568, 348, 536, 1007, - /* 1570 */ 473, 261, 261, 889, 888, 235, 535, 568, 1024, 568, - /* 1580 */ 475, 534, 261, 367, 109, 109, 521, 136, 136, 130, - /* 1590 */ 130, 1024, 110, 366, 445, 569, 445, 109, 109, 1014, - /* 1600 */ 162, 162, 156, 156, 568, 110, 1076, 445, 569, 445, - /* 1610 */ 410, 351, 1014, 568, 353, 316, 559, 568, 343, 568, - /* 1620 */ 100, 497, 357, 258, 100, 896, 897, 140, 140, 355, - /* 1630 */ 1306, 1014, 1014, 1016, 1017, 27, 139, 139, 362, 451, - /* 1640 */ 137, 137, 138, 138, 1014, 1014, 1016, 1017, 27, 1174, - /* 1650 */ 447, 568, 372, 288, 111, 560, 1018, 4, 392, 392, - /* 1660 */ 391, 273, 389, 568, 1137, 847, 568, 1072, 568, 258, - /* 1670 */ 492, 563, 568, 211, 75, 75, 555, 960, 234, 261, - /* 1680 */ 323, 111, 560, 927, 4, 113, 77, 77, 322, 74, - /* 1690 */ 74, 42, 42, 1369, 445, 48, 48, 1414, 563, 972, - /* 1700 */ 973, 1088, 1087, 1088, 1087, 860, 557, 150, 928, 1342, - /* 1710 */ 113, 1354, 554, 1419, 1018, 1271, 1262, 1250, 236, 1249, - /* 1720 */ 1251, 445, 1585, 1339, 308, 276, 168, 309, 11, 141, - /* 1730 */ 393, 310, 232, 557, 1401, 1024, 335, 291, 1396, 219, - /* 1740 */ 336, 109, 109, 934, 297, 1406, 235, 341, 477, 110, - /* 1750 */ 502, 445, 569, 445, 1389, 1405, 1014, 400, 1289, 365, - /* 1760 */ 223, 1480, 1024, 1479, 1351, 1352, 1350, 1349, 109, 109, - /* 1770 */ 204, 1588, 1226, 558, 265, 218, 110, 205, 445, 569, - /* 1780 */ 445, 410, 387, 1014, 1527, 179, 316, 559, 1014, 1014, - /* 1790 */ 1016, 1017, 27, 230, 1525, 1223, 79, 560, 85, 4, - /* 1800 */ 418, 215, 548, 81, 84, 188, 1402, 173, 181, 461, - /* 1810 */ 451, 35, 462, 563, 183, 1014, 1014, 1016, 1017, 27, - /* 1820 */ 184, 1485, 185, 186, 495, 242, 98, 398, 1408, 36, - /* 1830 */ 1407, 484, 91, 469, 401, 1410, 445, 192, 1474, 246, - /* 1840 */ 1496, 490, 346, 277, 248, 196, 493, 511, 557, 350, - /* 1850 */ 1252, 249, 250, 403, 1309, 1308, 111, 560, 432, 4, - /* 1860 */ 1307, 1300, 93, 1602, 881, 1601, 224, 404, 434, 520, - /* 1870 */ 263, 435, 1571, 563, 1279, 1278, 364, 1024, 306, 1277, - /* 1880 */ 264, 1600, 1557, 109, 109, 370, 1299, 307, 1556, 438, - /* 1890 */ 128, 110, 1374, 445, 569, 445, 445, 546, 1014, 10, - /* 1900 */ 1461, 105, 381, 1373, 34, 571, 99, 1332, 557, 314, - /* 1910 */ 1180, 530, 272, 274, 379, 210, 1331, 547, 385, 386, - /* 1920 */ 275, 572, 1247, 1242, 411, 412, 1512, 165, 178, 1513, - /* 1930 */ 1014, 1014, 1016, 1017, 27, 1511, 1510, 1024, 78, 147, - /* 1940 */ 166, 220, 221, 109, 109, 834, 304, 167, 446, 212, - /* 1950 */ 318, 110, 231, 445, 569, 445, 144, 1086, 1014, 1084, - /* 1960 */ 326, 180, 169, 1205, 182, 334, 238, 913, 241, 1100, - /* 1970 */ 187, 170, 171, 421, 87, 88, 423, 189, 89, 90, - /* 1980 */ 172, 1103, 243, 1099, 244, 158, 18, 245, 345, 247, - /* 1990 */ 1014, 1014, 1016, 1017, 27, 261, 1092, 193, 1220, 489, - /* 2000 */ 194, 37, 366, 849, 494, 251, 195, 506, 92, 19, - /* 2010 */ 498, 358, 20, 503, 879, 361, 94, 892, 305, 159, - /* 2020 */ 513, 39, 95, 1168, 160, 1053, 964, 1139, 96, 174, - /* 2030 */ 1138, 225, 280, 282, 198, 958, 113, 1158, 1154, 260, - /* 2040 */ 21, 22, 23, 1156, 1162, 1161, 1143, 24, 33, 25, - /* 2050 */ 202, 542, 26, 100, 1067, 102, 1054, 103, 7, 1052, - /* 2060 */ 1056, 1109, 1057, 1108, 266, 267, 28, 40, 390, 1019, - /* 2070 */ 861, 112, 29, 564, 1176, 1175, 268, 176, 143, 923, - /* 2080 */ 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, - /* 2090 */ 1238, 1238, 1238, 1238, 269, 1593, + /* 0 */ 576, 128, 125, 232, 1622, 549, 576, 1290, 1281, 576, + /* 10 */ 328, 576, 1300, 212, 576, 128, 125, 232, 578, 412, + /* 20 */ 578, 391, 1542, 51, 51, 523, 405, 1293, 529, 51, + /* 30 */ 51, 983, 51, 51, 81, 81, 1107, 61, 61, 984, + /* 40 */ 1107, 1292, 380, 135, 136, 90, 1228, 1228, 1063, 1066, + /* 50 */ 1053, 1053, 133, 133, 134, 134, 134, 134, 1577, 412, + /* 60 */ 287, 287, 7, 287, 287, 422, 1050, 1050, 1064, 1067, + /* 70 */ 289, 556, 492, 573, 524, 561, 573, 497, 561, 482, + /* 80 */ 530, 262, 229, 135, 136, 90, 1228, 1228, 1063, 1066, + /* 90 */ 1053, 1053, 133, 133, 134, 134, 134, 134, 128, 125, + /* 100 */ 232, 1506, 132, 132, 132, 132, 131, 131, 130, 130, + /* 110 */ 130, 129, 126, 450, 1204, 1255, 1, 1, 582, 2, + /* 120 */ 1259, 1571, 420, 1582, 379, 320, 1174, 153, 1174, 1584, + /* 130 */ 412, 378, 1582, 543, 1341, 330, 111, 570, 570, 570, + /* 140 */ 293, 1054, 132, 132, 132, 132, 131, 131, 130, 130, + /* 150 */ 130, 129, 126, 450, 135, 136, 90, 1228, 1228, 1063, + /* 160 */ 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, 287, + /* 170 */ 287, 1204, 1205, 1204, 255, 287, 287, 510, 507, 506, + /* 180 */ 137, 455, 573, 212, 561, 447, 446, 505, 573, 1616, + /* 190 */ 561, 134, 134, 134, 134, 127, 400, 243, 132, 132, + /* 200 */ 132, 132, 131, 131, 130, 130, 130, 129, 126, 450, + /* 210 */ 282, 471, 345, 132, 132, 132, 132, 131, 131, 130, + /* 220 */ 130, 130, 129, 126, 450, 574, 155, 936, 936, 454, + /* 230 */ 227, 521, 1236, 412, 1236, 134, 134, 134, 134, 132, + /* 240 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126, + /* 250 */ 450, 130, 130, 130, 129, 126, 450, 135, 136, 90, + /* 260 */ 1228, 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, + /* 270 */ 134, 134, 128, 125, 232, 450, 576, 412, 397, 1249, + /* 280 */ 180, 92, 93, 132, 132, 132, 132, 131, 131, 130, + /* 290 */ 130, 130, 129, 126, 450, 381, 387, 1204, 383, 81, + /* 300 */ 81, 135, 136, 90, 1228, 1228, 1063, 1066, 1053, 1053, + /* 310 */ 133, 133, 134, 134, 134, 134, 132, 132, 132, 132, + /* 320 */ 131, 131, 130, 130, 130, 129, 126, 450, 131, 131, + /* 330 */ 130, 130, 130, 129, 126, 450, 556, 1204, 302, 319, + /* 340 */ 567, 121, 568, 480, 4, 555, 1149, 1657, 1628, 1657, + /* 350 */ 45, 128, 125, 232, 1204, 1205, 1204, 1250, 571, 1169, + /* 360 */ 132, 132, 132, 132, 131, 131, 130, 130, 130, 129, + /* 370 */ 126, 450, 1169, 287, 287, 1169, 1019, 576, 422, 1019, + /* 380 */ 412, 451, 1602, 582, 2, 1259, 573, 44, 561, 95, + /* 390 */ 320, 110, 153, 565, 1204, 1205, 1204, 522, 522, 1341, + /* 400 */ 81, 81, 7, 44, 135, 136, 90, 1228, 1228, 1063, + /* 410 */ 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, 295, + /* 420 */ 1149, 1658, 1040, 1658, 1204, 1147, 319, 567, 119, 119, + /* 430 */ 343, 466, 331, 343, 287, 287, 120, 556, 451, 577, + /* 440 */ 451, 1169, 1169, 1028, 319, 567, 438, 573, 210, 561, + /* 450 */ 1339, 1451, 546, 531, 1169, 1169, 1598, 1169, 1169, 416, + /* 460 */ 319, 567, 243, 132, 132, 132, 132, 131, 131, 130, + /* 470 */ 130, 130, 129, 126, 450, 1028, 1028, 1030, 1031, 35, + /* 480 */ 44, 1204, 1205, 1204, 472, 287, 287, 1328, 412, 1307, + /* 490 */ 372, 1595, 359, 225, 454, 1204, 195, 1328, 573, 1147, + /* 500 */ 561, 1333, 1333, 274, 576, 1188, 576, 340, 46, 196, + /* 510 */ 537, 217, 135, 136, 90, 1228, 1228, 1063, 1066, 1053, + /* 520 */ 1053, 133, 133, 134, 134, 134, 134, 19, 19, 19, + /* 530 */ 19, 412, 581, 1204, 1259, 511, 1204, 319, 567, 320, + /* 540 */ 944, 153, 425, 491, 430, 943, 1204, 488, 1341, 1450, + /* 550 */ 532, 1277, 1204, 1205, 1204, 135, 136, 90, 1228, 1228, + /* 560 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, + /* 570 */ 575, 132, 132, 132, 132, 131, 131, 130, 130, 130, + /* 580 */ 129, 126, 450, 287, 287, 528, 287, 287, 372, 1595, + /* 590 */ 1204, 1205, 1204, 1204, 1205, 1204, 573, 486, 561, 573, + /* 600 */ 889, 561, 412, 1204, 1205, 1204, 886, 40, 22, 22, + /* 610 */ 220, 243, 525, 1449, 132, 132, 132, 132, 131, 131, + /* 620 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228, + /* 630 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 640 */ 134, 412, 180, 454, 1204, 879, 255, 287, 287, 510, + /* 650 */ 507, 506, 372, 1595, 1568, 1331, 1331, 576, 889, 505, + /* 660 */ 573, 44, 561, 559, 1207, 135, 136, 90, 1228, 1228, + /* 670 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, + /* 680 */ 81, 81, 422, 576, 377, 132, 132, 132, 132, 131, + /* 690 */ 131, 130, 130, 130, 129, 126, 450, 297, 287, 287, + /* 700 */ 460, 1204, 1205, 1204, 1204, 534, 19, 19, 448, 448, + /* 710 */ 448, 573, 412, 561, 230, 436, 1187, 535, 319, 567, + /* 720 */ 363, 432, 1207, 1435, 132, 132, 132, 132, 131, 131, + /* 730 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228, + /* 740 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 750 */ 134, 412, 211, 949, 1169, 1041, 1110, 1110, 494, 547, + /* 760 */ 547, 1204, 1205, 1204, 7, 539, 1570, 1169, 376, 576, + /* 770 */ 1169, 5, 1204, 486, 3, 135, 136, 90, 1228, 1228, + /* 780 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, + /* 790 */ 576, 513, 19, 19, 427, 132, 132, 132, 132, 131, + /* 800 */ 131, 130, 130, 130, 129, 126, 450, 305, 1204, 433, + /* 810 */ 225, 1204, 385, 19, 19, 273, 290, 371, 516, 366, + /* 820 */ 515, 260, 412, 538, 1568, 549, 1024, 362, 437, 1204, + /* 830 */ 1205, 1204, 902, 1552, 132, 132, 132, 132, 131, 131, + /* 840 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228, + /* 850 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 860 */ 134, 412, 1435, 514, 1281, 1204, 1205, 1204, 1204, 1205, + /* 870 */ 1204, 903, 48, 342, 1568, 1568, 1279, 1627, 1568, 911, + /* 880 */ 576, 129, 126, 450, 110, 135, 136, 90, 1228, 1228, + /* 890 */ 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, 134, + /* 900 */ 265, 576, 459, 19, 19, 132, 132, 132, 132, 131, + /* 910 */ 131, 130, 130, 130, 129, 126, 450, 1345, 204, 576, + /* 920 */ 459, 458, 50, 47, 19, 19, 49, 434, 1105, 573, + /* 930 */ 497, 561, 412, 428, 108, 1224, 1569, 1554, 376, 205, + /* 940 */ 550, 550, 81, 81, 132, 132, 132, 132, 131, 131, + /* 950 */ 130, 130, 130, 129, 126, 450, 135, 136, 90, 1228, + /* 960 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 970 */ 134, 480, 576, 1204, 576, 1541, 412, 1435, 969, 315, + /* 980 */ 1659, 398, 284, 497, 969, 893, 1569, 1569, 376, 376, + /* 990 */ 1569, 461, 376, 1224, 459, 80, 80, 81, 81, 497, + /* 1000 */ 374, 114, 90, 1228, 1228, 1063, 1066, 1053, 1053, 133, + /* 1010 */ 133, 134, 134, 134, 134, 132, 132, 132, 132, 131, + /* 1020 */ 131, 130, 130, 130, 129, 126, 450, 1204, 1505, 576, + /* 1030 */ 1204, 1205, 1204, 1366, 316, 486, 281, 281, 497, 431, + /* 1040 */ 557, 288, 288, 402, 1340, 471, 345, 298, 429, 573, + /* 1050 */ 576, 561, 81, 81, 573, 374, 561, 971, 386, 132, + /* 1060 */ 132, 132, 132, 131, 131, 130, 130, 130, 129, 126, + /* 1070 */ 450, 231, 117, 81, 81, 287, 287, 231, 287, 287, + /* 1080 */ 576, 1511, 576, 1336, 1204, 1205, 1204, 139, 573, 556, + /* 1090 */ 561, 573, 412, 561, 441, 456, 969, 213, 558, 1511, + /* 1100 */ 1513, 1550, 969, 143, 143, 145, 145, 1368, 314, 478, + /* 1110 */ 444, 970, 412, 850, 851, 852, 135, 136, 90, 1228, + /* 1120 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 1130 */ 134, 357, 412, 397, 1148, 304, 135, 136, 90, 1228, + /* 1140 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 1150 */ 134, 1575, 323, 6, 862, 7, 135, 124, 90, 1228, + /* 1160 */ 1228, 1063, 1066, 1053, 1053, 133, 133, 134, 134, 134, + /* 1170 */ 134, 409, 408, 1511, 212, 132, 132, 132, 132, 131, + /* 1180 */ 131, 130, 130, 130, 129, 126, 450, 411, 118, 1204, + /* 1190 */ 116, 10, 352, 265, 355, 132, 132, 132, 132, 131, + /* 1200 */ 131, 130, 130, 130, 129, 126, 450, 576, 324, 306, + /* 1210 */ 576, 306, 1250, 469, 158, 132, 132, 132, 132, 131, + /* 1220 */ 131, 130, 130, 130, 129, 126, 450, 207, 1224, 1126, + /* 1230 */ 65, 65, 470, 66, 66, 412, 447, 446, 882, 531, + /* 1240 */ 335, 258, 257, 256, 1127, 1233, 1204, 1205, 1204, 327, + /* 1250 */ 1235, 874, 159, 576, 16, 480, 1085, 1040, 1234, 1128, + /* 1260 */ 136, 90, 1228, 1228, 1063, 1066, 1053, 1053, 133, 133, + /* 1270 */ 134, 134, 134, 134, 1029, 576, 81, 81, 1028, 1040, + /* 1280 */ 922, 576, 463, 1236, 576, 1236, 1224, 502, 107, 1435, + /* 1290 */ 923, 6, 576, 410, 1498, 882, 1029, 480, 21, 21, + /* 1300 */ 1028, 332, 1380, 334, 53, 53, 497, 81, 81, 874, + /* 1310 */ 1028, 1028, 1030, 445, 259, 19, 19, 533, 132, 132, + /* 1320 */ 132, 132, 131, 131, 130, 130, 130, 129, 126, 450, + /* 1330 */ 551, 301, 1028, 1028, 1030, 107, 532, 545, 121, 568, + /* 1340 */ 1188, 4, 1126, 1576, 449, 576, 462, 7, 1282, 418, + /* 1350 */ 462, 350, 1435, 576, 518, 571, 544, 1127, 121, 568, + /* 1360 */ 442, 4, 1188, 464, 533, 1180, 1223, 9, 67, 67, + /* 1370 */ 487, 576, 1128, 303, 410, 571, 54, 54, 451, 576, + /* 1380 */ 123, 944, 576, 417, 576, 333, 943, 1379, 576, 236, + /* 1390 */ 565, 576, 1574, 564, 68, 68, 7, 576, 451, 362, + /* 1400 */ 419, 182, 69, 69, 541, 70, 70, 71, 71, 540, + /* 1410 */ 565, 72, 72, 484, 55, 55, 473, 1180, 296, 1040, + /* 1420 */ 56, 56, 296, 493, 541, 119, 119, 410, 1573, 542, + /* 1430 */ 569, 418, 7, 120, 1244, 451, 577, 451, 465, 1040, + /* 1440 */ 1028, 576, 1557, 552, 476, 119, 119, 527, 259, 121, + /* 1450 */ 568, 240, 4, 120, 576, 451, 577, 451, 576, 477, + /* 1460 */ 1028, 576, 156, 576, 57, 57, 571, 576, 286, 229, + /* 1470 */ 410, 336, 1028, 1028, 1030, 1031, 35, 59, 59, 219, + /* 1480 */ 983, 60, 60, 220, 73, 73, 74, 74, 984, 451, + /* 1490 */ 75, 75, 1028, 1028, 1030, 1031, 35, 96, 216, 291, + /* 1500 */ 552, 565, 1188, 318, 395, 395, 394, 276, 392, 576, + /* 1510 */ 485, 859, 474, 1311, 410, 541, 576, 417, 1530, 1144, + /* 1520 */ 540, 399, 1188, 292, 237, 1153, 326, 38, 23, 576, + /* 1530 */ 1040, 576, 20, 20, 325, 299, 119, 119, 164, 76, + /* 1540 */ 76, 1529, 121, 568, 120, 4, 451, 577, 451, 203, + /* 1550 */ 576, 1028, 141, 141, 142, 142, 576, 322, 39, 571, + /* 1560 */ 341, 1021, 110, 264, 239, 901, 900, 423, 242, 908, + /* 1570 */ 909, 370, 173, 77, 77, 43, 479, 1310, 264, 62, + /* 1580 */ 62, 369, 451, 1028, 1028, 1030, 1031, 35, 1601, 1192, + /* 1590 */ 453, 1092, 238, 291, 565, 163, 1309, 110, 395, 395, + /* 1600 */ 394, 276, 392, 986, 987, 859, 481, 346, 264, 110, + /* 1610 */ 1032, 489, 576, 1188, 503, 1088, 261, 261, 237, 576, + /* 1620 */ 326, 121, 568, 1040, 4, 347, 1376, 413, 325, 119, + /* 1630 */ 119, 948, 319, 567, 351, 78, 78, 120, 571, 451, + /* 1640 */ 577, 451, 79, 79, 1028, 354, 356, 576, 360, 1092, + /* 1650 */ 110, 576, 974, 942, 264, 123, 457, 358, 239, 576, + /* 1660 */ 519, 451, 939, 1104, 123, 1104, 173, 576, 1032, 43, + /* 1670 */ 63, 63, 1324, 565, 168, 168, 1028, 1028, 1030, 1031, + /* 1680 */ 35, 576, 169, 169, 1308, 872, 238, 157, 1589, 576, + /* 1690 */ 86, 86, 365, 89, 568, 375, 4, 1103, 941, 1103, + /* 1700 */ 123, 576, 1040, 1389, 64, 64, 1188, 1434, 119, 119, + /* 1710 */ 571, 576, 82, 82, 563, 576, 120, 165, 451, 577, + /* 1720 */ 451, 413, 1362, 1028, 144, 144, 319, 567, 576, 1374, + /* 1730 */ 562, 498, 279, 451, 83, 83, 1439, 576, 166, 166, + /* 1740 */ 576, 1289, 554, 576, 1280, 565, 576, 12, 576, 1268, + /* 1750 */ 457, 146, 146, 1267, 576, 1028, 1028, 1030, 1031, 35, + /* 1760 */ 140, 140, 1269, 167, 167, 1609, 160, 160, 1359, 150, + /* 1770 */ 150, 149, 149, 311, 1040, 576, 312, 147, 147, 313, + /* 1780 */ 119, 119, 222, 235, 576, 1188, 396, 576, 120, 576, + /* 1790 */ 451, 577, 451, 1192, 453, 1028, 508, 291, 148, 148, + /* 1800 */ 1421, 1612, 395, 395, 394, 276, 392, 85, 85, 859, + /* 1810 */ 87, 87, 84, 84, 553, 576, 294, 576, 1426, 338, + /* 1820 */ 339, 1425, 237, 300, 326, 1416, 1409, 1028, 1028, 1030, + /* 1830 */ 1031, 35, 325, 344, 403, 483, 226, 1307, 52, 52, + /* 1840 */ 58, 58, 368, 1371, 1502, 566, 1501, 121, 568, 221, + /* 1850 */ 4, 208, 268, 209, 390, 1244, 1549, 1188, 1372, 1370, + /* 1860 */ 1369, 1547, 239, 184, 571, 233, 421, 1241, 95, 218, + /* 1870 */ 173, 1507, 193, 43, 91, 94, 178, 186, 467, 188, + /* 1880 */ 468, 1422, 13, 189, 190, 191, 501, 451, 245, 108, + /* 1890 */ 238, 401, 1428, 1427, 1430, 475, 404, 1496, 197, 565, + /* 1900 */ 14, 490, 249, 101, 1518, 496, 349, 280, 251, 201, + /* 1910 */ 353, 499, 252, 406, 1270, 253, 517, 1327, 1326, 435, + /* 1920 */ 1325, 1318, 103, 893, 1296, 413, 227, 407, 1040, 1626, + /* 1930 */ 319, 567, 1625, 1297, 119, 119, 439, 367, 1317, 1295, + /* 1940 */ 1624, 526, 120, 440, 451, 577, 451, 1594, 309, 1028, + /* 1950 */ 310, 373, 266, 267, 457, 1580, 1579, 443, 138, 1394, + /* 1960 */ 552, 1393, 11, 1483, 384, 115, 317, 1350, 109, 536, + /* 1970 */ 42, 579, 382, 214, 1349, 388, 1198, 389, 275, 277, + /* 1980 */ 278, 1028, 1028, 1030, 1031, 35, 580, 1265, 414, 1260, + /* 1990 */ 170, 415, 183, 1534, 1535, 1533, 171, 154, 307, 1532, + /* 2000 */ 846, 223, 224, 88, 452, 215, 172, 321, 234, 1102, + /* 2010 */ 152, 1188, 1100, 329, 185, 174, 1223, 925, 187, 241, + /* 2020 */ 337, 244, 1116, 192, 175, 176, 424, 426, 97, 194, + /* 2030 */ 98, 99, 100, 177, 1119, 1115, 246, 247, 161, 24, + /* 2040 */ 248, 348, 1238, 264, 1108, 250, 495, 199, 198, 15, + /* 2050 */ 861, 500, 369, 254, 504, 509, 512, 200, 102, 25, + /* 2060 */ 179, 361, 26, 364, 104, 891, 308, 162, 105, 904, + /* 2070 */ 520, 106, 1185, 1069, 1155, 17, 228, 27, 1154, 283, + /* 2080 */ 285, 263, 978, 202, 972, 123, 28, 1175, 29, 30, + /* 2090 */ 1179, 1171, 31, 1173, 1160, 41, 32, 206, 548, 33, + /* 2100 */ 110, 1178, 1083, 8, 112, 1070, 113, 1068, 1072, 34, + /* 2110 */ 1073, 560, 1125, 269, 1124, 270, 36, 18, 1194, 1033, + /* 2120 */ 873, 151, 122, 37, 393, 271, 272, 572, 181, 1193, + /* 2130 */ 1256, 1256, 1256, 935, 1256, 1256, 1256, 1256, 1256, 1256, + /* 2140 */ 1256, 1617, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 193, 193, 193, 274, 275, 276, 193, 274, 275, 276, - /* 10 */ 193, 223, 219, 225, 206, 210, 211, 212, 193, 19, - /* 20 */ 219, 233, 216, 216, 217, 216, 217, 193, 295, 216, - /* 30 */ 217, 31, 193, 216, 217, 193, 228, 213, 230, 39, - /* 40 */ 206, 216, 217, 43, 44, 45, 46, 47, 48, 49, - /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 193, 19, - /* 60 */ 185, 186, 187, 188, 189, 190, 253, 274, 275, 276, - /* 70 */ 195, 193, 197, 193, 261, 274, 275, 276, 253, 204, - /* 80 */ 238, 204, 81, 43, 44, 45, 46, 47, 48, 49, - /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 274, 275, - /* 100 */ 276, 262, 102, 103, 104, 105, 106, 107, 108, 109, - /* 110 */ 110, 111, 112, 113, 239, 240, 239, 240, 210, 211, - /* 120 */ 212, 314, 315, 314, 59, 316, 86, 252, 88, 252, - /* 130 */ 19, 314, 315, 256, 257, 113, 25, 72, 296, 138, - /* 140 */ 139, 266, 102, 103, 104, 105, 106, 107, 108, 109, + /* 0 */ 194, 276, 277, 278, 216, 194, 194, 217, 194, 194, + /* 10 */ 194, 194, 224, 194, 194, 276, 277, 278, 204, 19, + /* 20 */ 206, 202, 297, 217, 218, 205, 207, 217, 205, 217, + /* 30 */ 218, 31, 217, 218, 217, 218, 29, 217, 218, 39, + /* 40 */ 33, 217, 220, 43, 44, 45, 46, 47, 48, 49, + /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 312, 19, + /* 60 */ 240, 241, 316, 240, 241, 194, 46, 47, 48, 49, + /* 70 */ 22, 254, 65, 253, 254, 255, 253, 194, 255, 194, + /* 80 */ 263, 258, 259, 43, 44, 45, 46, 47, 48, 49, + /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 276, 277, + /* 100 */ 278, 285, 102, 103, 104, 105, 106, 107, 108, 109, + /* 110 */ 110, 111, 112, 113, 59, 186, 187, 188, 189, 190, + /* 120 */ 191, 310, 239, 317, 318, 196, 86, 198, 88, 317, + /* 130 */ 19, 319, 317, 318, 205, 264, 25, 211, 212, 213, + /* 140 */ 205, 121, 102, 103, 104, 105, 106, 107, 108, 109, /* 150 */ 110, 111, 112, 113, 43, 44, 45, 46, 47, 48, - /* 160 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 81, - /* 170 */ 292, 59, 292, 298, 108, 109, 110, 111, 112, 113, - /* 180 */ 69, 116, 117, 118, 72, 106, 107, 193, 111, 112, - /* 190 */ 113, 54, 55, 56, 57, 58, 102, 103, 104, 105, - /* 200 */ 106, 107, 108, 109, 110, 111, 112, 113, 120, 25, - /* 210 */ 216, 217, 145, 102, 103, 104, 105, 106, 107, 108, - /* 220 */ 109, 110, 111, 112, 113, 231, 138, 139, 116, 117, - /* 230 */ 118, 164, 153, 19, 155, 54, 55, 56, 57, 102, + /* 160 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 240, + /* 170 */ 241, 116, 117, 118, 119, 240, 241, 122, 123, 124, + /* 180 */ 69, 298, 253, 194, 255, 106, 107, 132, 253, 141, + /* 190 */ 255, 54, 55, 56, 57, 58, 207, 268, 102, 103, + /* 200 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + /* 210 */ 214, 128, 129, 102, 103, 104, 105, 106, 107, 108, + /* 220 */ 109, 110, 111, 112, 113, 134, 25, 136, 137, 300, + /* 230 */ 165, 166, 153, 19, 155, 54, 55, 56, 57, 102, /* 240 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - /* 250 */ 113, 128, 129, 46, 47, 48, 49, 43, 44, 45, + /* 250 */ 113, 108, 109, 110, 111, 112, 113, 43, 44, 45, /* 260 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - /* 270 */ 56, 57, 216, 193, 25, 59, 193, 19, 165, 166, - /* 280 */ 193, 67, 24, 102, 103, 104, 105, 106, 107, 108, - /* 290 */ 109, 110, 111, 112, 113, 73, 216, 217, 59, 216, - /* 300 */ 217, 43, 44, 45, 46, 47, 48, 49, 50, 51, + /* 270 */ 56, 57, 276, 277, 278, 113, 194, 19, 22, 23, + /* 280 */ 194, 67, 24, 102, 103, 104, 105, 106, 107, 108, + /* 290 */ 109, 110, 111, 112, 113, 220, 250, 59, 252, 217, + /* 300 */ 218, 43, 44, 45, 46, 47, 48, 49, 50, 51, /* 310 */ 52, 53, 54, 55, 56, 57, 102, 103, 104, 105, - /* 320 */ 106, 107, 108, 109, 110, 111, 112, 113, 121, 145, - /* 330 */ 59, 193, 116, 117, 118, 119, 273, 204, 122, 123, - /* 340 */ 124, 19, 20, 134, 22, 136, 137, 19, 132, 127, - /* 350 */ 128, 129, 24, 22, 23, 116, 117, 118, 36, 193, + /* 320 */ 106, 107, 108, 109, 110, 111, 112, 113, 106, 107, + /* 330 */ 108, 109, 110, 111, 112, 113, 254, 59, 205, 138, + /* 340 */ 139, 19, 20, 194, 22, 263, 22, 23, 231, 25, + /* 350 */ 72, 276, 277, 278, 116, 117, 118, 101, 36, 76, /* 360 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - /* 370 */ 112, 113, 239, 240, 311, 312, 215, 106, 107, 241, - /* 380 */ 19, 59, 216, 217, 223, 252, 115, 116, 117, 118, - /* 390 */ 151, 120, 26, 71, 193, 308, 309, 193, 149, 128, - /* 400 */ 313, 216, 269, 81, 43, 44, 45, 46, 47, 48, - /* 410 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 253, - /* 420 */ 216, 217, 100, 95, 153, 59, 155, 261, 106, 107, - /* 430 */ 25, 193, 101, 193, 193, 231, 114, 25, 116, 117, - /* 440 */ 118, 113, 304, 121, 193, 204, 59, 119, 120, 121, - /* 450 */ 122, 123, 124, 125, 216, 217, 193, 216, 217, 131, - /* 460 */ 138, 139, 230, 102, 103, 104, 105, 106, 107, 108, + /* 370 */ 112, 113, 89, 240, 241, 92, 73, 194, 194, 73, + /* 380 */ 19, 59, 188, 189, 190, 191, 253, 81, 255, 151, + /* 390 */ 196, 25, 198, 71, 116, 117, 118, 311, 312, 205, + /* 400 */ 217, 218, 316, 81, 43, 44, 45, 46, 47, 48, + /* 410 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 270, + /* 420 */ 22, 23, 100, 25, 59, 101, 138, 139, 106, 107, + /* 430 */ 127, 128, 129, 127, 240, 241, 114, 254, 116, 117, + /* 440 */ 118, 76, 76, 121, 138, 139, 263, 253, 264, 255, + /* 450 */ 205, 275, 87, 19, 89, 89, 194, 92, 92, 199, + /* 460 */ 138, 139, 268, 102, 103, 104, 105, 106, 107, 108, /* 470 */ 109, 110, 111, 112, 113, 153, 154, 155, 156, 157, - /* 480 */ 239, 240, 116, 117, 118, 76, 193, 23, 19, 25, - /* 490 */ 22, 253, 23, 252, 253, 108, 87, 204, 89, 261, - /* 500 */ 198, 92, 261, 116, 117, 118, 193, 306, 307, 216, - /* 510 */ 217, 150, 43, 44, 45, 46, 47, 48, 49, 50, - /* 520 */ 51, 52, 53, 54, 55, 56, 57, 59, 193, 216, - /* 530 */ 217, 19, 239, 240, 283, 23, 106, 107, 108, 109, - /* 540 */ 110, 111, 112, 113, 73, 252, 253, 142, 308, 309, - /* 550 */ 138, 139, 81, 313, 145, 43, 44, 45, 46, 47, + /* 480 */ 81, 116, 117, 118, 129, 240, 241, 224, 19, 226, + /* 490 */ 314, 315, 23, 25, 300, 59, 22, 234, 253, 101, + /* 500 */ 255, 236, 237, 26, 194, 183, 194, 152, 72, 22, + /* 510 */ 145, 150, 43, 44, 45, 46, 47, 48, 49, 50, + /* 520 */ 51, 52, 53, 54, 55, 56, 57, 217, 218, 217, + /* 530 */ 218, 19, 189, 59, 191, 23, 59, 138, 139, 196, + /* 540 */ 135, 198, 232, 283, 232, 140, 59, 287, 205, 275, + /* 550 */ 116, 205, 116, 117, 118, 43, 44, 45, 46, 47, /* 560 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 570 */ 307, 102, 103, 104, 105, 106, 107, 108, 109, 110, - /* 580 */ 111, 112, 113, 281, 116, 117, 118, 285, 23, 193, - /* 590 */ 25, 119, 59, 193, 122, 123, 124, 59, 127, 203, - /* 600 */ 59, 205, 19, 268, 132, 25, 23, 22, 193, 138, - /* 610 */ 139, 249, 204, 251, 102, 103, 104, 105, 106, 107, + /* 570 */ 194, 102, 103, 104, 105, 106, 107, 108, 109, 110, + /* 580 */ 111, 112, 113, 240, 241, 194, 240, 241, 314, 315, + /* 590 */ 116, 117, 118, 116, 117, 118, 253, 194, 255, 253, + /* 600 */ 59, 255, 19, 116, 117, 118, 23, 22, 217, 218, + /* 610 */ 142, 268, 205, 275, 102, 103, 104, 105, 106, 107, /* 620 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, /* 630 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 640 */ 57, 19, 22, 23, 59, 23, 25, 239, 240, 116, - /* 650 */ 117, 118, 193, 11, 116, 117, 118, 116, 117, 118, - /* 660 */ 252, 269, 22, 193, 15, 43, 44, 45, 46, 47, + /* 640 */ 57, 19, 194, 300, 59, 23, 119, 240, 241, 122, + /* 650 */ 123, 124, 314, 315, 194, 236, 237, 194, 117, 132, + /* 660 */ 253, 81, 255, 205, 59, 43, 44, 45, 46, 47, /* 670 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 680 */ 273, 143, 193, 118, 143, 102, 103, 104, 105, 106, - /* 690 */ 107, 108, 109, 110, 111, 112, 113, 76, 118, 59, - /* 700 */ 241, 116, 117, 118, 304, 216, 217, 292, 143, 60, - /* 710 */ 89, 241, 19, 92, 193, 193, 23, 22, 311, 312, - /* 720 */ 231, 101, 22, 143, 102, 103, 104, 105, 106, 107, + /* 680 */ 217, 218, 194, 194, 194, 102, 103, 104, 105, 106, + /* 690 */ 107, 108, 109, 110, 111, 112, 113, 294, 240, 241, + /* 700 */ 120, 116, 117, 118, 59, 194, 217, 218, 211, 212, + /* 710 */ 213, 253, 19, 255, 194, 19, 23, 254, 138, 139, + /* 720 */ 24, 232, 117, 194, 102, 103, 104, 105, 106, 107, /* 730 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, /* 740 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 750 */ 57, 19, 193, 193, 59, 23, 116, 117, 118, 59, - /* 760 */ 201, 21, 241, 304, 22, 206, 127, 128, 129, 193, - /* 770 */ 128, 129, 235, 236, 304, 43, 44, 45, 46, 47, + /* 750 */ 57, 19, 264, 108, 76, 23, 127, 128, 129, 311, + /* 760 */ 312, 116, 117, 118, 316, 87, 306, 89, 308, 194, + /* 770 */ 92, 22, 59, 194, 22, 43, 44, 45, 46, 47, /* 780 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 790 */ 22, 193, 216, 217, 193, 102, 103, 104, 105, 106, - /* 800 */ 107, 108, 109, 110, 111, 112, 113, 231, 193, 193, - /* 810 */ 193, 116, 117, 118, 216, 217, 116, 117, 118, 226, - /* 820 */ 80, 193, 19, 235, 236, 304, 23, 211, 212, 231, - /* 830 */ 204, 216, 217, 205, 102, 103, 104, 105, 106, 107, + /* 790 */ 194, 95, 217, 218, 265, 102, 103, 104, 105, 106, + /* 800 */ 107, 108, 109, 110, 111, 112, 113, 232, 59, 113, + /* 810 */ 25, 59, 194, 217, 218, 119, 120, 121, 122, 123, + /* 820 */ 124, 125, 19, 145, 194, 194, 23, 131, 232, 116, + /* 830 */ 117, 118, 35, 194, 102, 103, 104, 105, 106, 107, /* 840 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, /* 850 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 860 */ 57, 19, 193, 123, 76, 239, 240, 193, 253, 239, - /* 870 */ 240, 239, 240, 193, 106, 107, 193, 89, 252, 193, - /* 880 */ 92, 59, 252, 141, 252, 43, 44, 45, 46, 47, + /* 860 */ 57, 19, 194, 66, 194, 116, 117, 118, 116, 117, + /* 870 */ 118, 74, 242, 294, 194, 194, 206, 23, 194, 25, + /* 880 */ 194, 111, 112, 113, 25, 43, 44, 45, 46, 47, /* 890 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 900 */ 284, 161, 216, 217, 193, 102, 103, 104, 105, 106, - /* 910 */ 107, 108, 109, 110, 111, 112, 113, 231, 193, 16, - /* 920 */ 187, 188, 189, 190, 7, 8, 9, 309, 195, 25, - /* 930 */ 197, 313, 19, 127, 128, 129, 262, 204, 22, 117, - /* 940 */ 24, 216, 217, 263, 102, 103, 104, 105, 106, 107, + /* 900 */ 24, 194, 194, 217, 218, 102, 103, 104, 105, 106, + /* 910 */ 107, 108, 109, 110, 111, 112, 113, 241, 232, 194, + /* 920 */ 212, 213, 242, 242, 217, 218, 242, 130, 11, 253, + /* 930 */ 194, 255, 19, 265, 149, 59, 306, 194, 308, 232, + /* 940 */ 309, 310, 217, 218, 102, 103, 104, 105, 106, 107, /* 950 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, /* 960 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 970 */ 57, 193, 239, 240, 193, 59, 19, 188, 253, 190, - /* 980 */ 77, 226, 79, 193, 195, 252, 197, 193, 19, 301, - /* 990 */ 302, 193, 193, 204, 216, 217, 226, 216, 217, 266, - /* 1000 */ 204, 159, 45, 46, 47, 48, 49, 50, 51, 52, + /* 970 */ 57, 194, 194, 59, 194, 239, 19, 194, 25, 254, + /* 980 */ 303, 304, 23, 194, 25, 126, 306, 306, 308, 308, + /* 990 */ 306, 271, 308, 117, 286, 217, 218, 217, 218, 194, + /* 1000 */ 194, 159, 45, 46, 47, 48, 49, 50, 51, 52, /* 1010 */ 53, 54, 55, 56, 57, 102, 103, 104, 105, 106, - /* 1020 */ 107, 108, 109, 110, 111, 112, 113, 12, 239, 240, - /* 1030 */ 232, 298, 238, 117, 253, 239, 240, 238, 259, 260, - /* 1040 */ 193, 252, 27, 31, 193, 193, 142, 204, 252, 193, - /* 1050 */ 193, 39, 262, 193, 100, 266, 278, 42, 204, 102, + /* 1020 */ 107, 108, 109, 110, 111, 112, 113, 59, 239, 194, + /* 1030 */ 116, 117, 118, 260, 254, 194, 240, 241, 194, 233, + /* 1040 */ 205, 240, 241, 205, 239, 128, 129, 270, 265, 253, + /* 1050 */ 194, 255, 217, 218, 253, 194, 255, 143, 280, 102, /* 1060 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - /* 1070 */ 113, 117, 159, 216, 217, 121, 216, 217, 63, 193, - /* 1080 */ 193, 193, 239, 240, 115, 116, 193, 298, 73, 238, - /* 1090 */ 238, 231, 19, 239, 240, 252, 22, 24, 211, 212, - /* 1100 */ 24, 193, 216, 217, 216, 217, 252, 153, 154, 155, - /* 1110 */ 253, 16, 19, 144, 213, 268, 43, 44, 45, 46, + /* 1070 */ 113, 118, 159, 217, 218, 240, 241, 118, 240, 241, + /* 1080 */ 194, 194, 194, 239, 116, 117, 118, 22, 253, 254, + /* 1090 */ 255, 253, 19, 255, 233, 194, 143, 24, 263, 212, + /* 1100 */ 213, 194, 143, 217, 218, 217, 218, 261, 262, 271, + /* 1110 */ 254, 143, 19, 7, 8, 9, 43, 44, 45, 46, /* 1120 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 1130 */ 57, 238, 19, 59, 193, 59, 43, 44, 45, 46, + /* 1130 */ 57, 16, 19, 22, 23, 294, 43, 44, 45, 46, /* 1140 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 1150 */ 57, 22, 23, 193, 25, 193, 43, 44, 45, 46, + /* 1150 */ 57, 312, 194, 214, 21, 316, 43, 44, 45, 46, /* 1160 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - /* 1170 */ 57, 284, 77, 193, 79, 102, 103, 104, 105, 106, - /* 1180 */ 107, 108, 109, 110, 111, 112, 113, 286, 193, 193, - /* 1190 */ 193, 117, 291, 117, 232, 102, 103, 104, 105, 106, - /* 1200 */ 107, 108, 109, 110, 111, 112, 113, 204, 22, 23, - /* 1210 */ 66, 25, 216, 217, 35, 102, 103, 104, 105, 106, - /* 1220 */ 107, 108, 109, 110, 111, 112, 113, 193, 268, 85, - /* 1230 */ 101, 193, 309, 309, 240, 19, 313, 313, 94, 208, - /* 1240 */ 209, 193, 239, 240, 193, 66, 252, 19, 268, 244, - /* 1250 */ 216, 217, 193, 74, 213, 252, 161, 19, 263, 254, + /* 1170 */ 57, 106, 107, 286, 194, 102, 103, 104, 105, 106, + /* 1180 */ 107, 108, 109, 110, 111, 112, 113, 207, 158, 59, + /* 1190 */ 160, 22, 77, 24, 79, 102, 103, 104, 105, 106, + /* 1200 */ 107, 108, 109, 110, 111, 112, 113, 194, 194, 229, + /* 1210 */ 194, 231, 101, 80, 22, 102, 103, 104, 105, 106, + /* 1220 */ 107, 108, 109, 110, 111, 112, 113, 288, 59, 12, + /* 1230 */ 217, 218, 293, 217, 218, 19, 106, 107, 59, 19, + /* 1240 */ 16, 127, 128, 129, 27, 115, 116, 117, 118, 194, + /* 1250 */ 120, 59, 22, 194, 24, 194, 123, 100, 128, 42, /* 1260 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 1270 */ 54, 55, 56, 57, 193, 216, 217, 5, 59, 193, - /* 1280 */ 19, 244, 10, 11, 12, 13, 14, 101, 309, 17, - /* 1290 */ 146, 254, 313, 193, 193, 76, 115, 216, 217, 309, - /* 1300 */ 12, 263, 30, 313, 32, 46, 87, 46, 89, 130, - /* 1310 */ 193, 92, 40, 22, 263, 27, 216, 217, 102, 103, + /* 1270 */ 54, 55, 56, 57, 117, 194, 217, 218, 121, 100, + /* 1280 */ 63, 194, 245, 153, 194, 155, 117, 19, 115, 194, + /* 1290 */ 73, 214, 194, 256, 161, 116, 117, 194, 217, 218, + /* 1300 */ 121, 77, 194, 79, 217, 218, 194, 217, 218, 117, + /* 1310 */ 153, 154, 155, 254, 46, 217, 218, 144, 102, 103, /* 1320 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - /* 1330 */ 42, 150, 291, 216, 217, 116, 117, 118, 19, 20, - /* 1340 */ 193, 22, 70, 260, 116, 193, 24, 264, 193, 263, - /* 1350 */ 78, 63, 61, 81, 116, 36, 193, 260, 193, 29, - /* 1360 */ 193, 264, 193, 33, 145, 193, 59, 48, 216, 217, - /* 1370 */ 98, 216, 217, 193, 115, 193, 115, 193, 59, 216, - /* 1380 */ 217, 216, 217, 216, 217, 216, 217, 255, 216, 217, - /* 1390 */ 71, 193, 131, 193, 25, 65, 216, 217, 216, 217, - /* 1400 */ 216, 217, 208, 209, 85, 133, 193, 100, 193, 90, - /* 1410 */ 138, 139, 138, 139, 216, 217, 216, 217, 193, 100, - /* 1420 */ 193, 108, 135, 116, 117, 106, 107, 140, 121, 216, - /* 1430 */ 217, 216, 217, 114, 162, 116, 117, 118, 299, 300, - /* 1440 */ 121, 216, 217, 216, 217, 193, 244, 193, 135, 244, - /* 1450 */ 193, 256, 257, 140, 244, 193, 254, 193, 193, 254, - /* 1460 */ 153, 154, 155, 141, 254, 149, 150, 258, 216, 217, - /* 1470 */ 216, 217, 153, 154, 155, 156, 157, 0, 1, 2, - /* 1480 */ 216, 217, 5, 115, 158, 193, 160, 10, 11, 12, - /* 1490 */ 13, 14, 193, 59, 17, 126, 193, 19, 20, 129, - /* 1500 */ 22, 193, 22, 22, 24, 193, 23, 30, 25, 32, - /* 1510 */ 19, 20, 144, 22, 36, 216, 217, 40, 193, 216, - /* 1520 */ 217, 193, 152, 129, 216, 217, 193, 36, 216, 217, - /* 1530 */ 193, 99, 193, 193, 53, 193, 193, 59, 23, 193, - /* 1540 */ 25, 216, 217, 193, 216, 217, 152, 70, 59, 71, - /* 1550 */ 59, 117, 193, 216, 217, 78, 216, 217, 81, 216, - /* 1560 */ 217, 318, 71, 85, 193, 133, 193, 193, 90, 23, - /* 1570 */ 23, 25, 25, 120, 121, 98, 85, 193, 100, 193, - /* 1580 */ 23, 90, 25, 121, 106, 107, 19, 216, 217, 216, - /* 1590 */ 217, 100, 114, 131, 116, 117, 118, 106, 107, 121, - /* 1600 */ 216, 217, 216, 217, 193, 114, 117, 116, 117, 118, - /* 1610 */ 133, 193, 121, 193, 193, 138, 139, 193, 23, 193, - /* 1620 */ 25, 23, 23, 25, 25, 7, 8, 216, 217, 193, - /* 1630 */ 193, 153, 154, 155, 156, 157, 216, 217, 193, 162, - /* 1640 */ 216, 217, 216, 217, 153, 154, 155, 156, 157, 1, - /* 1650 */ 2, 193, 193, 5, 19, 20, 59, 22, 10, 11, - /* 1660 */ 12, 13, 14, 193, 97, 17, 193, 23, 193, 25, - /* 1670 */ 288, 36, 193, 242, 216, 217, 236, 23, 30, 25, - /* 1680 */ 32, 19, 20, 23, 22, 25, 216, 217, 40, 216, - /* 1690 */ 217, 216, 217, 193, 59, 216, 217, 193, 36, 83, - /* 1700 */ 84, 153, 153, 155, 155, 23, 71, 25, 23, 193, - /* 1710 */ 25, 193, 193, 193, 117, 193, 193, 193, 70, 193, - /* 1720 */ 193, 59, 193, 255, 255, 287, 78, 255, 243, 81, - /* 1730 */ 191, 255, 297, 71, 271, 100, 293, 245, 267, 214, - /* 1740 */ 246, 106, 107, 108, 246, 271, 98, 245, 293, 114, - /* 1750 */ 220, 116, 117, 118, 267, 271, 121, 271, 225, 219, - /* 1760 */ 229, 219, 100, 219, 259, 259, 259, 259, 106, 107, - /* 1770 */ 249, 196, 60, 280, 141, 243, 114, 249, 116, 117, - /* 1780 */ 118, 133, 245, 121, 200, 297, 138, 139, 153, 154, - /* 1790 */ 155, 156, 157, 297, 200, 38, 19, 20, 151, 22, - /* 1800 */ 200, 150, 140, 294, 294, 22, 272, 43, 234, 18, - /* 1810 */ 162, 270, 200, 36, 237, 153, 154, 155, 156, 157, - /* 1820 */ 237, 283, 237, 237, 18, 199, 149, 246, 272, 270, - /* 1830 */ 272, 200, 158, 246, 246, 234, 59, 234, 246, 199, - /* 1840 */ 290, 62, 289, 200, 199, 22, 221, 115, 71, 200, - /* 1850 */ 200, 199, 199, 221, 218, 218, 19, 20, 64, 22, - /* 1860 */ 218, 227, 22, 224, 126, 224, 165, 221, 24, 305, - /* 1870 */ 200, 113, 312, 36, 218, 220, 218, 100, 282, 218, - /* 1880 */ 91, 218, 317, 106, 107, 221, 227, 282, 317, 82, - /* 1890 */ 148, 114, 265, 116, 117, 118, 59, 145, 121, 22, - /* 1900 */ 277, 158, 200, 265, 25, 202, 147, 250, 71, 279, - /* 1910 */ 13, 146, 194, 194, 249, 248, 250, 140, 247, 246, - /* 1920 */ 6, 192, 192, 192, 303, 303, 213, 207, 300, 213, - /* 1930 */ 153, 154, 155, 156, 157, 213, 213, 100, 213, 222, - /* 1940 */ 207, 214, 214, 106, 107, 4, 222, 207, 3, 22, - /* 1950 */ 163, 114, 15, 116, 117, 118, 16, 23, 121, 23, - /* 1960 */ 139, 151, 130, 25, 142, 16, 24, 20, 144, 1, - /* 1970 */ 142, 130, 130, 61, 53, 53, 37, 151, 53, 53, - /* 1980 */ 130, 116, 34, 1, 141, 5, 22, 115, 161, 141, - /* 1990 */ 153, 154, 155, 156, 157, 25, 68, 68, 75, 41, - /* 2000 */ 115, 24, 131, 20, 19, 125, 22, 96, 22, 22, - /* 2010 */ 67, 23, 22, 67, 59, 24, 22, 28, 67, 23, - /* 2020 */ 22, 22, 149, 23, 23, 23, 116, 23, 25, 37, - /* 2030 */ 97, 141, 23, 23, 22, 143, 25, 75, 88, 34, - /* 2040 */ 34, 34, 34, 86, 75, 93, 23, 34, 22, 34, - /* 2050 */ 25, 24, 34, 25, 23, 142, 23, 142, 44, 23, - /* 2060 */ 23, 23, 11, 23, 25, 22, 22, 22, 15, 23, - /* 2070 */ 23, 22, 22, 25, 1, 1, 141, 25, 23, 135, - /* 2080 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2090 */ 319, 319, 319, 319, 141, 141, 319, 319, 319, 319, - /* 2100 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2110 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2120 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2130 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2140 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2150 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2160 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2170 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2180 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2190 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2200 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2210 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2220 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2230 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2240 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2250 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2260 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2270 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2280 */ 319, + /* 1330 */ 232, 270, 153, 154, 155, 115, 116, 66, 19, 20, + /* 1340 */ 183, 22, 12, 312, 254, 194, 262, 316, 209, 210, + /* 1350 */ 266, 239, 194, 194, 108, 36, 85, 27, 19, 20, + /* 1360 */ 265, 22, 183, 245, 144, 94, 25, 48, 217, 218, + /* 1370 */ 293, 194, 42, 270, 256, 36, 217, 218, 59, 194, + /* 1380 */ 25, 135, 194, 115, 194, 161, 140, 194, 194, 15, + /* 1390 */ 71, 194, 312, 63, 217, 218, 316, 194, 59, 131, + /* 1400 */ 301, 302, 217, 218, 85, 217, 218, 217, 218, 90, + /* 1410 */ 71, 217, 218, 19, 217, 218, 245, 146, 262, 100, + /* 1420 */ 217, 218, 266, 265, 85, 106, 107, 256, 312, 90, + /* 1430 */ 209, 210, 316, 114, 60, 116, 117, 118, 194, 100, + /* 1440 */ 121, 194, 194, 145, 115, 106, 107, 19, 46, 19, + /* 1450 */ 20, 24, 22, 114, 194, 116, 117, 118, 194, 245, + /* 1460 */ 121, 194, 164, 194, 217, 218, 36, 194, 258, 259, + /* 1470 */ 256, 194, 153, 154, 155, 156, 157, 217, 218, 150, + /* 1480 */ 31, 217, 218, 142, 217, 218, 217, 218, 39, 59, + /* 1490 */ 217, 218, 153, 154, 155, 156, 157, 149, 150, 5, + /* 1500 */ 145, 71, 183, 245, 10, 11, 12, 13, 14, 194, + /* 1510 */ 116, 17, 129, 227, 256, 85, 194, 115, 194, 23, + /* 1520 */ 90, 25, 183, 99, 30, 97, 32, 22, 22, 194, + /* 1530 */ 100, 194, 217, 218, 40, 152, 106, 107, 23, 217, + /* 1540 */ 218, 194, 19, 20, 114, 22, 116, 117, 118, 257, + /* 1550 */ 194, 121, 217, 218, 217, 218, 194, 133, 53, 36, + /* 1560 */ 23, 23, 25, 25, 70, 120, 121, 61, 141, 7, + /* 1570 */ 8, 121, 78, 217, 218, 81, 23, 227, 25, 217, + /* 1580 */ 218, 131, 59, 153, 154, 155, 156, 157, 0, 1, + /* 1590 */ 2, 59, 98, 5, 71, 23, 227, 25, 10, 11, + /* 1600 */ 12, 13, 14, 83, 84, 17, 23, 23, 25, 25, + /* 1610 */ 59, 194, 194, 183, 23, 23, 25, 25, 30, 194, + /* 1620 */ 32, 19, 20, 100, 22, 194, 194, 133, 40, 106, + /* 1630 */ 107, 108, 138, 139, 194, 217, 218, 114, 36, 116, + /* 1640 */ 117, 118, 217, 218, 121, 194, 194, 194, 23, 117, + /* 1650 */ 25, 194, 23, 23, 25, 25, 162, 194, 70, 194, + /* 1660 */ 145, 59, 23, 153, 25, 155, 78, 194, 117, 81, + /* 1670 */ 217, 218, 194, 71, 217, 218, 153, 154, 155, 156, + /* 1680 */ 157, 194, 217, 218, 194, 23, 98, 25, 321, 194, + /* 1690 */ 217, 218, 194, 19, 20, 194, 22, 153, 23, 155, + /* 1700 */ 25, 194, 100, 194, 217, 218, 183, 194, 106, 107, + /* 1710 */ 36, 194, 217, 218, 237, 194, 114, 243, 116, 117, + /* 1720 */ 118, 133, 194, 121, 217, 218, 138, 139, 194, 194, + /* 1730 */ 194, 290, 289, 59, 217, 218, 194, 194, 217, 218, + /* 1740 */ 194, 194, 140, 194, 194, 71, 194, 244, 194, 194, + /* 1750 */ 162, 217, 218, 194, 194, 153, 154, 155, 156, 157, + /* 1760 */ 217, 218, 194, 217, 218, 194, 217, 218, 257, 217, + /* 1770 */ 218, 217, 218, 257, 100, 194, 257, 217, 218, 257, + /* 1780 */ 106, 107, 215, 299, 194, 183, 192, 194, 114, 194, + /* 1790 */ 116, 117, 118, 1, 2, 121, 221, 5, 217, 218, + /* 1800 */ 273, 197, 10, 11, 12, 13, 14, 217, 218, 17, + /* 1810 */ 217, 218, 217, 218, 140, 194, 246, 194, 273, 295, + /* 1820 */ 247, 273, 30, 247, 32, 269, 269, 153, 154, 155, + /* 1830 */ 156, 157, 40, 246, 273, 295, 230, 226, 217, 218, + /* 1840 */ 217, 218, 220, 261, 220, 282, 220, 19, 20, 244, + /* 1850 */ 22, 250, 141, 250, 246, 60, 201, 183, 261, 261, + /* 1860 */ 261, 201, 70, 299, 36, 299, 201, 38, 151, 150, + /* 1870 */ 78, 285, 22, 81, 296, 296, 43, 235, 18, 238, + /* 1880 */ 201, 274, 272, 238, 238, 238, 18, 59, 200, 149, + /* 1890 */ 98, 247, 274, 274, 235, 247, 247, 247, 235, 71, + /* 1900 */ 272, 201, 200, 158, 292, 62, 291, 201, 200, 22, + /* 1910 */ 201, 222, 200, 222, 201, 200, 115, 219, 219, 64, + /* 1920 */ 219, 228, 22, 126, 221, 133, 165, 222, 100, 225, + /* 1930 */ 138, 139, 225, 219, 106, 107, 24, 219, 228, 219, + /* 1940 */ 219, 307, 114, 113, 116, 117, 118, 315, 284, 121, + /* 1950 */ 284, 222, 201, 91, 162, 320, 320, 82, 148, 267, + /* 1960 */ 145, 267, 22, 279, 201, 158, 281, 251, 147, 146, + /* 1970 */ 25, 203, 250, 249, 251, 248, 13, 247, 195, 195, + /* 1980 */ 6, 153, 154, 155, 156, 157, 193, 193, 305, 193, + /* 1990 */ 208, 305, 302, 214, 214, 214, 208, 223, 223, 214, + /* 2000 */ 4, 215, 215, 214, 3, 22, 208, 163, 15, 23, + /* 2010 */ 16, 183, 23, 139, 151, 130, 25, 20, 142, 24, + /* 2020 */ 16, 144, 1, 142, 130, 130, 61, 37, 53, 151, + /* 2030 */ 53, 53, 53, 130, 116, 1, 34, 141, 5, 22, + /* 2040 */ 115, 161, 75, 25, 68, 141, 41, 115, 68, 24, + /* 2050 */ 20, 19, 131, 125, 67, 67, 96, 22, 22, 22, + /* 2060 */ 37, 23, 22, 24, 22, 59, 67, 23, 149, 28, + /* 2070 */ 22, 25, 23, 23, 23, 22, 141, 34, 97, 23, + /* 2080 */ 23, 34, 116, 22, 143, 25, 34, 75, 34, 34, + /* 2090 */ 75, 88, 34, 86, 23, 22, 34, 25, 24, 34, + /* 2100 */ 25, 93, 23, 44, 142, 23, 142, 23, 23, 22, + /* 2110 */ 11, 25, 23, 25, 23, 22, 22, 22, 1, 23, + /* 2120 */ 23, 23, 22, 22, 15, 141, 141, 25, 25, 1, + /* 2130 */ 322, 322, 322, 135, 322, 322, 322, 322, 322, 322, + /* 2140 */ 322, 141, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2150 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2160 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2170 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2180 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2190 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2200 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2210 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2220 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2230 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2240 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2250 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2260 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2270 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2280 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2290 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2300 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2310 */ 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + /* 2320 */ 322, 322, 322, 322, 322, 322, 322, 322, }; -#define YY_SHIFT_COUNT (574) +#define YY_SHIFT_COUNT (582) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2074) +#define YY_SHIFT_MAX (2128) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 1648, 1477, 1272, 322, 322, 1, 1319, 1478, 1491, 1837, - /* 10 */ 1837, 1837, 471, 0, 0, 214, 1093, 1837, 1837, 1837, - /* 20 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, - /* 30 */ 271, 271, 1219, 1219, 216, 88, 1, 1, 1, 1, - /* 40 */ 1, 40, 111, 258, 361, 469, 512, 583, 622, 693, - /* 50 */ 732, 803, 842, 913, 1073, 1093, 1093, 1093, 1093, 1093, - /* 60 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - /* 70 */ 1093, 1093, 1093, 1113, 1093, 1216, 957, 957, 1635, 1662, - /* 80 */ 1777, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, - /* 90 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, - /* 100 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, - /* 110 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, - /* 120 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, - /* 130 */ 137, 181, 181, 181, 181, 181, 181, 181, 94, 430, - /* 140 */ 66, 65, 112, 366, 533, 533, 740, 1261, 533, 533, - /* 150 */ 79, 79, 533, 412, 412, 412, 77, 412, 123, 113, - /* 160 */ 113, 22, 22, 2096, 2096, 328, 328, 328, 239, 468, - /* 170 */ 468, 468, 468, 1015, 1015, 409, 366, 1129, 1186, 533, - /* 180 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - /* 190 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 969, - /* 200 */ 621, 621, 533, 642, 788, 788, 1228, 1228, 822, 822, - /* 210 */ 67, 1274, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 1307, - /* 220 */ 954, 954, 585, 472, 640, 387, 695, 538, 541, 700, - /* 230 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - /* 240 */ 222, 533, 533, 533, 533, 533, 533, 533, 533, 533, - /* 250 */ 533, 533, 533, 1179, 1179, 1179, 533, 533, 533, 565, - /* 260 */ 533, 533, 533, 916, 1144, 533, 533, 1288, 533, 533, - /* 270 */ 533, 533, 533, 533, 533, 533, 639, 1330, 209, 1076, - /* 280 */ 1076, 1076, 1076, 580, 209, 209, 1313, 768, 917, 649, - /* 290 */ 1181, 1316, 405, 1316, 1238, 249, 1181, 1181, 249, 1181, - /* 300 */ 405, 1238, 1369, 464, 1259, 1012, 1012, 1012, 1368, 1368, - /* 310 */ 1368, 1368, 184, 184, 1326, 904, 1287, 1480, 1712, 1712, - /* 320 */ 1633, 1633, 1757, 1757, 1633, 1647, 1651, 1783, 1764, 1791, - /* 330 */ 1791, 1791, 1791, 1633, 1806, 1677, 1651, 1651, 1677, 1783, - /* 340 */ 1764, 1677, 1764, 1677, 1633, 1806, 1674, 1779, 1633, 1806, - /* 350 */ 1823, 1633, 1806, 1633, 1806, 1823, 1732, 1732, 1732, 1794, - /* 360 */ 1840, 1840, 1823, 1732, 1738, 1732, 1794, 1732, 1732, 1701, - /* 370 */ 1844, 1758, 1758, 1823, 1633, 1789, 1789, 1807, 1807, 1742, - /* 380 */ 1752, 1877, 1633, 1743, 1742, 1759, 1765, 1677, 1879, 1897, - /* 390 */ 1897, 1914, 1914, 1914, 2096, 2096, 2096, 2096, 2096, 2096, - /* 400 */ 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 207, - /* 410 */ 1095, 331, 620, 903, 806, 1074, 1483, 1432, 1481, 1322, - /* 420 */ 1370, 1394, 1515, 1291, 1546, 1547, 1557, 1595, 1598, 1599, - /* 430 */ 1434, 1453, 1618, 1462, 1567, 1489, 1644, 1654, 1616, 1660, - /* 440 */ 1548, 1549, 1682, 1685, 1597, 742, 1941, 1945, 1927, 1787, - /* 450 */ 1937, 1940, 1934, 1936, 1821, 1810, 1832, 1938, 1938, 1942, - /* 460 */ 1822, 1947, 1824, 1949, 1968, 1828, 1841, 1938, 1842, 1912, - /* 470 */ 1939, 1938, 1826, 1921, 1922, 1925, 1926, 1850, 1865, 1948, - /* 480 */ 1843, 1982, 1980, 1964, 1872, 1827, 1928, 1970, 1929, 1923, - /* 490 */ 1958, 1848, 1885, 1977, 1983, 1985, 1871, 1880, 1984, 1943, - /* 500 */ 1986, 1987, 1988, 1990, 1946, 1955, 1991, 1911, 1989, 1994, - /* 510 */ 1951, 1992, 1996, 1873, 1998, 2000, 2001, 2002, 2003, 2004, - /* 520 */ 1999, 1933, 1890, 2009, 2010, 1910, 2005, 2012, 1892, 2011, - /* 530 */ 2006, 2007, 2008, 2013, 1950, 1962, 1957, 2014, 1969, 1952, - /* 540 */ 2015, 2023, 2026, 2027, 2025, 2028, 2018, 1913, 1915, 2031, - /* 550 */ 2011, 2033, 2036, 2037, 2038, 2039, 2040, 2043, 2051, 2044, - /* 560 */ 2045, 2046, 2047, 2049, 2050, 2048, 1944, 1935, 1953, 1954, - /* 570 */ 2052, 2055, 2053, 2073, 2074, + /* 0 */ 1792, 1588, 1494, 322, 322, 399, 306, 1319, 1339, 1430, + /* 10 */ 1828, 1828, 1828, 580, 399, 399, 399, 399, 399, 0, + /* 20 */ 0, 214, 1093, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + /* 30 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1130, 1130, + /* 40 */ 365, 365, 55, 278, 436, 713, 713, 201, 201, 201, + /* 50 */ 201, 40, 111, 258, 361, 469, 512, 583, 622, 693, + /* 60 */ 732, 803, 842, 913, 1073, 1093, 1093, 1093, 1093, 1093, + /* 70 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + /* 80 */ 1093, 1093, 1093, 1113, 1093, 1216, 957, 957, 1523, 1602, + /* 90 */ 1674, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + /* 100 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + /* 110 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + /* 120 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + /* 130 */ 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, + /* 140 */ 137, 181, 181, 181, 181, 181, 181, 181, 96, 222, + /* 150 */ 143, 477, 713, 1133, 1268, 713, 713, 79, 79, 713, + /* 160 */ 770, 83, 65, 65, 65, 288, 162, 162, 2142, 2142, + /* 170 */ 696, 696, 696, 238, 474, 474, 474, 474, 1217, 1217, + /* 180 */ 678, 477, 324, 398, 713, 713, 713, 713, 713, 713, + /* 190 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, + /* 200 */ 713, 713, 713, 1220, 366, 366, 713, 917, 283, 283, + /* 210 */ 434, 434, 605, 605, 1298, 2142, 2142, 2142, 2142, 2142, + /* 220 */ 2142, 2142, 1179, 1157, 1157, 487, 527, 585, 645, 749, + /* 230 */ 914, 968, 752, 713, 713, 713, 713, 713, 713, 713, + /* 240 */ 713, 713, 713, 303, 713, 713, 713, 713, 713, 713, + /* 250 */ 713, 713, 713, 713, 713, 713, 797, 797, 797, 713, + /* 260 */ 713, 713, 959, 713, 713, 713, 1169, 1271, 713, 713, + /* 270 */ 1330, 713, 713, 713, 713, 713, 713, 713, 713, 629, + /* 280 */ 7, 91, 876, 876, 876, 876, 953, 91, 91, 1246, + /* 290 */ 1065, 1106, 1374, 1329, 1348, 468, 1348, 1394, 785, 1329, + /* 300 */ 1329, 785, 1329, 468, 1394, 859, 854, 1402, 1449, 1449, + /* 310 */ 1449, 1173, 1173, 1173, 1173, 1355, 1355, 1030, 1341, 405, + /* 320 */ 1230, 1795, 1795, 1711, 1711, 1829, 1829, 1711, 1717, 1719, + /* 330 */ 1850, 1833, 1860, 1860, 1860, 1860, 1711, 1868, 1740, 1719, + /* 340 */ 1719, 1740, 1850, 1833, 1740, 1833, 1740, 1711, 1868, 1745, + /* 350 */ 1843, 1711, 1868, 1887, 1711, 1868, 1711, 1868, 1887, 1801, + /* 360 */ 1801, 1801, 1855, 1900, 1900, 1887, 1801, 1797, 1801, 1855, + /* 370 */ 1801, 1801, 1761, 1912, 1830, 1830, 1887, 1711, 1862, 1862, + /* 380 */ 1875, 1875, 1810, 1815, 1940, 1711, 1807, 1810, 1821, 1823, + /* 390 */ 1740, 1945, 1963, 1963, 1974, 1974, 1974, 2142, 2142, 2142, + /* 400 */ 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, + /* 410 */ 2142, 2142, 20, 1224, 256, 1111, 1115, 1114, 1192, 1496, + /* 420 */ 1424, 1505, 1427, 355, 1383, 1537, 1506, 1538, 1553, 1583, + /* 430 */ 1584, 1591, 1625, 541, 1445, 1562, 1450, 1572, 1515, 1428, + /* 440 */ 1532, 1592, 1629, 1520, 1630, 1639, 1510, 1544, 1662, 1675, + /* 450 */ 1551, 48, 1996, 2001, 1983, 1844, 1993, 1994, 1986, 1989, + /* 460 */ 1874, 1863, 1885, 1991, 1991, 1995, 1876, 1997, 1877, 2004, + /* 470 */ 2021, 1881, 1894, 1991, 1895, 1965, 1990, 1991, 1878, 1975, + /* 480 */ 1977, 1978, 1979, 1903, 1918, 2002, 1896, 2034, 2033, 2017, + /* 490 */ 1925, 1880, 1976, 2018, 1980, 1967, 2005, 1904, 1932, 2025, + /* 500 */ 2030, 2032, 1921, 1928, 2035, 1987, 2036, 2037, 2038, 2040, + /* 510 */ 1988, 2006, 2039, 1960, 2041, 2042, 1999, 2023, 2044, 2043, + /* 520 */ 1919, 2048, 2049, 2050, 2046, 2051, 2053, 1981, 1935, 2056, + /* 530 */ 2057, 1966, 2047, 2061, 1941, 2060, 2052, 2054, 2055, 2058, + /* 540 */ 2003, 2012, 2007, 2059, 2015, 2008, 2062, 2071, 2073, 2074, + /* 550 */ 2072, 2075, 2065, 1962, 1964, 2079, 2060, 2082, 2084, 2085, + /* 560 */ 2087, 2086, 2089, 2088, 2091, 2093, 2099, 2094, 2095, 2096, + /* 570 */ 2097, 2100, 2101, 2102, 1998, 1984, 1985, 2000, 2103, 2098, + /* 580 */ 2109, 2117, 2128, }; -#define YY_REDUCE_COUNT (408) -#define YY_REDUCE_MIN (-271) -#define YY_REDUCE_MAX (1740) +#define YY_REDUCE_COUNT (411) +#define YY_REDUCE_MIN (-275) +#define YY_REDUCE_MAX (1798) static const short yy_reduce_ofst[] = { - /* 0 */ -125, 733, 789, 241, 293, -123, -193, -191, -183, -187, - /* 10 */ 166, 238, 133, -207, -199, -267, -176, -6, 204, 489, - /* 20 */ 576, -175, 598, 686, 615, 725, 860, 778, 781, 857, - /* 30 */ 616, 887, 87, 240, -192, 408, 626, 796, 843, 854, - /* 40 */ 1003, -271, -271, -271, -271, -271, -271, -271, -271, -271, - /* 50 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - /* 60 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - /* 70 */ -271, -271, -271, -271, -271, -271, -271, -271, 80, 83, - /* 80 */ 313, 886, 888, 996, 1034, 1059, 1081, 1100, 1117, 1152, - /* 90 */ 1155, 1163, 1165, 1167, 1169, 1172, 1180, 1182, 1184, 1198, - /* 100 */ 1200, 1213, 1215, 1225, 1227, 1252, 1254, 1264, 1299, 1303, - /* 110 */ 1308, 1312, 1325, 1328, 1337, 1340, 1343, 1371, 1373, 1384, - /* 120 */ 1386, 1411, 1420, 1424, 1426, 1458, 1470, 1473, 1475, 1479, - /* 130 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, - /* 140 */ -271, 138, 459, 396, -158, 470, 302, -212, 521, 201, - /* 150 */ -195, -92, 559, 630, 632, 630, -271, 632, 901, 63, - /* 160 */ 407, -271, -271, -271, -271, 161, 161, 161, 251, 335, - /* 170 */ 847, 960, 980, 537, 588, 618, 628, 688, 688, -166, - /* 180 */ -161, 674, 790, 794, 799, 851, 852, -122, 680, -120, - /* 190 */ 995, 1038, 415, 1051, 893, 798, 962, 400, 1086, 779, - /* 200 */ 923, 924, 263, 1041, 979, 990, 1083, 1097, 1031, 1194, - /* 210 */ 362, 994, 1139, 1005, 1037, 1202, 1205, 1195, 1210, -194, - /* 220 */ 56, 185, -135, 232, 522, 560, 601, 617, 669, 683, - /* 230 */ 711, 856, 908, 941, 1048, 1101, 1147, 1257, 1262, 1265, - /* 240 */ 392, 1292, 1333, 1339, 1342, 1346, 1350, 1359, 1374, 1418, - /* 250 */ 1421, 1436, 1437, 593, 755, 770, 997, 1445, 1459, 1209, - /* 260 */ 1500, 1504, 1516, 1132, 1243, 1518, 1519, 1440, 1520, 560, - /* 270 */ 1522, 1523, 1524, 1526, 1527, 1529, 1382, 1438, 1431, 1468, - /* 280 */ 1469, 1472, 1476, 1209, 1431, 1431, 1485, 1525, 1539, 1435, - /* 290 */ 1463, 1471, 1492, 1487, 1443, 1494, 1474, 1484, 1498, 1486, - /* 300 */ 1502, 1455, 1530, 1531, 1533, 1540, 1542, 1544, 1505, 1506, - /* 310 */ 1507, 1508, 1521, 1528, 1493, 1537, 1532, 1575, 1488, 1496, - /* 320 */ 1584, 1594, 1509, 1510, 1600, 1538, 1534, 1541, 1574, 1577, - /* 330 */ 1583, 1585, 1586, 1612, 1626, 1581, 1556, 1558, 1587, 1559, - /* 340 */ 1601, 1588, 1603, 1592, 1631, 1640, 1550, 1553, 1643, 1645, - /* 350 */ 1625, 1649, 1652, 1650, 1653, 1632, 1636, 1637, 1642, 1634, - /* 360 */ 1639, 1641, 1646, 1656, 1655, 1658, 1659, 1661, 1663, 1560, - /* 370 */ 1564, 1596, 1605, 1664, 1670, 1565, 1571, 1627, 1638, 1657, - /* 380 */ 1665, 1623, 1702, 1630, 1666, 1667, 1671, 1673, 1703, 1718, - /* 390 */ 1719, 1729, 1730, 1731, 1621, 1622, 1628, 1720, 1713, 1716, - /* 400 */ 1722, 1723, 1733, 1717, 1724, 1727, 1728, 1725, 1740, + /* 0 */ -71, 194, 343, 835, -180, -177, 838, -194, -188, -185, + /* 10 */ -183, 82, 183, -65, 133, 245, 346, 407, 458, -178, + /* 20 */ 75, -275, -4, 310, 312, 489, 575, 596, 463, 686, + /* 30 */ 707, 725, 780, 1098, 856, 778, 1059, 1090, 708, 887, + /* 40 */ 86, 448, 980, 630, 680, 681, 684, 796, 801, 796, + /* 50 */ 801, -261, -261, -261, -261, -261, -261, -261, -261, -261, + /* 60 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + /* 70 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + /* 80 */ -261, -261, -261, -261, -261, -261, -261, -261, 391, 886, + /* 90 */ 888, 1013, 1016, 1081, 1087, 1151, 1159, 1177, 1185, 1188, + /* 100 */ 1190, 1194, 1197, 1203, 1247, 1260, 1264, 1267, 1269, 1273, + /* 110 */ 1315, 1322, 1335, 1337, 1356, 1362, 1418, 1425, 1453, 1457, + /* 120 */ 1465, 1473, 1487, 1495, 1507, 1517, 1521, 1534, 1543, 1546, + /* 130 */ 1549, 1552, 1554, 1560, 1581, 1590, 1593, 1595, 1621, 1623, + /* 140 */ -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + /* 150 */ -261, -186, -117, 260, 263, 460, 631, -74, 497, -181, + /* 160 */ -261, 939, 176, 274, 338, 676, -261, -261, -261, -261, + /* 170 */ -212, -212, -212, -184, 149, 777, 1061, 1103, 265, 419, + /* 180 */ -254, 670, 677, 677, -11, -129, 184, 488, 736, 789, + /* 190 */ 805, 844, 403, 529, 579, 668, 783, 841, 1158, 1112, + /* 200 */ 806, 861, 1095, 846, 839, 1031, -189, 1077, 1080, 1116, + /* 210 */ 1084, 1156, 1139, 1221, 46, 1099, 1037, 1118, 1171, 1214, + /* 220 */ 1210, 1258, -210, -190, -176, -115, 117, 262, 376, 490, + /* 230 */ 511, 520, 618, 639, 743, 901, 907, 958, 1014, 1055, + /* 240 */ 1108, 1193, 1244, 720, 1248, 1277, 1324, 1347, 1417, 1431, + /* 250 */ 1432, 1440, 1451, 1452, 1463, 1478, 1286, 1350, 1369, 1490, + /* 260 */ 1498, 1501, 773, 1509, 1513, 1528, 1292, 1367, 1535, 1536, + /* 270 */ 1477, 1542, 376, 1547, 1550, 1555, 1559, 1568, 1571, 1441, + /* 280 */ 1443, 1474, 1511, 1516, 1519, 1522, 773, 1474, 1474, 1503, + /* 290 */ 1567, 1594, 1484, 1527, 1556, 1570, 1557, 1524, 1573, 1545, + /* 300 */ 1548, 1576, 1561, 1587, 1540, 1575, 1606, 1611, 1622, 1624, + /* 310 */ 1626, 1582, 1597, 1598, 1599, 1601, 1603, 1563, 1608, 1605, + /* 320 */ 1604, 1564, 1566, 1655, 1660, 1578, 1579, 1665, 1586, 1607, + /* 330 */ 1610, 1642, 1641, 1645, 1646, 1647, 1679, 1688, 1644, 1618, + /* 340 */ 1619, 1648, 1628, 1659, 1649, 1663, 1650, 1700, 1702, 1612, + /* 350 */ 1615, 1706, 1708, 1689, 1709, 1712, 1713, 1715, 1691, 1698, + /* 360 */ 1699, 1701, 1693, 1704, 1707, 1705, 1714, 1703, 1718, 1710, + /* 370 */ 1720, 1721, 1632, 1634, 1664, 1666, 1729, 1751, 1635, 1636, + /* 380 */ 1692, 1694, 1716, 1722, 1684, 1763, 1685, 1723, 1724, 1727, + /* 390 */ 1730, 1768, 1783, 1784, 1793, 1794, 1796, 1683, 1686, 1690, + /* 400 */ 1782, 1779, 1780, 1781, 1785, 1788, 1774, 1775, 1786, 1787, + /* 410 */ 1789, 1798, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1639, 1639, 1639, 1469, 1236, 1347, 1236, 1236, 1236, 1469, - /* 10 */ 1469, 1469, 1236, 1377, 1377, 1522, 1269, 1236, 1236, 1236, - /* 20 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1468, 1236, 1236, - /* 30 */ 1236, 1236, 1555, 1555, 1236, 1236, 1236, 1236, 1236, 1236, - /* 40 */ 1236, 1236, 1386, 1236, 1393, 1236, 1236, 1236, 1236, 1236, - /* 50 */ 1470, 1471, 1236, 1236, 1236, 1521, 1523, 1486, 1400, 1399, - /* 60 */ 1398, 1397, 1504, 1365, 1391, 1384, 1388, 1465, 1466, 1464, - /* 70 */ 1617, 1471, 1470, 1236, 1387, 1433, 1449, 1432, 1236, 1236, - /* 80 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 90 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 100 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 110 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 120 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 130 */ 1441, 1448, 1447, 1446, 1455, 1445, 1442, 1435, 1434, 1436, - /* 140 */ 1437, 1236, 1236, 1260, 1236, 1236, 1257, 1311, 1236, 1236, - /* 150 */ 1236, 1236, 1236, 1541, 1540, 1236, 1438, 1236, 1269, 1427, - /* 160 */ 1426, 1452, 1439, 1451, 1450, 1529, 1591, 1590, 1487, 1236, - /* 170 */ 1236, 1236, 1236, 1236, 1236, 1555, 1236, 1236, 1236, 1236, - /* 180 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 190 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1367, - /* 200 */ 1555, 1555, 1236, 1269, 1555, 1555, 1368, 1368, 1265, 1265, - /* 210 */ 1371, 1236, 1536, 1338, 1338, 1338, 1338, 1347, 1338, 1236, - /* 220 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 230 */ 1236, 1236, 1236, 1236, 1526, 1524, 1236, 1236, 1236, 1236, - /* 240 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 250 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 260 */ 1236, 1236, 1236, 1343, 1236, 1236, 1236, 1236, 1236, 1236, - /* 270 */ 1236, 1236, 1236, 1236, 1236, 1584, 1236, 1499, 1325, 1343, - /* 280 */ 1343, 1343, 1343, 1345, 1326, 1324, 1337, 1270, 1243, 1631, - /* 290 */ 1403, 1392, 1344, 1392, 1628, 1390, 1403, 1403, 1390, 1403, - /* 300 */ 1344, 1628, 1286, 1606, 1281, 1377, 1377, 1377, 1367, 1367, - /* 310 */ 1367, 1367, 1371, 1371, 1467, 1344, 1337, 1236, 1631, 1631, - /* 320 */ 1353, 1353, 1630, 1630, 1353, 1487, 1614, 1412, 1314, 1320, - /* 330 */ 1320, 1320, 1320, 1353, 1254, 1390, 1614, 1614, 1390, 1412, - /* 340 */ 1314, 1390, 1314, 1390, 1353, 1254, 1503, 1625, 1353, 1254, - /* 350 */ 1477, 1353, 1254, 1353, 1254, 1477, 1312, 1312, 1312, 1301, - /* 360 */ 1236, 1236, 1477, 1312, 1286, 1312, 1301, 1312, 1312, 1573, - /* 370 */ 1236, 1481, 1481, 1477, 1353, 1565, 1565, 1380, 1380, 1385, - /* 380 */ 1371, 1472, 1353, 1236, 1385, 1383, 1381, 1390, 1304, 1587, - /* 390 */ 1587, 1583, 1583, 1583, 1636, 1636, 1536, 1599, 1269, 1269, - /* 400 */ 1269, 1269, 1599, 1288, 1288, 1270, 1270, 1269, 1599, 1236, - /* 410 */ 1236, 1236, 1236, 1236, 1236, 1594, 1236, 1531, 1488, 1357, - /* 420 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 430 */ 1236, 1236, 1236, 1236, 1542, 1236, 1236, 1236, 1236, 1236, - /* 440 */ 1236, 1236, 1236, 1236, 1236, 1417, 1236, 1239, 1533, 1236, - /* 450 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1394, 1395, 1358, - /* 460 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1409, 1236, 1236, - /* 470 */ 1236, 1404, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 480 */ 1627, 1236, 1236, 1236, 1236, 1236, 1236, 1502, 1501, 1236, - /* 490 */ 1236, 1355, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 500 */ 1236, 1236, 1236, 1236, 1236, 1284, 1236, 1236, 1236, 1236, - /* 510 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 520 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1382, - /* 530 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 540 */ 1236, 1236, 1236, 1236, 1570, 1372, 1236, 1236, 1236, 1236, - /* 550 */ 1618, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, - /* 560 */ 1236, 1236, 1236, 1236, 1236, 1610, 1328, 1418, 1236, 1421, - /* 570 */ 1258, 1236, 1248, 1236, 1236, + /* 0 */ 1663, 1663, 1663, 1491, 1254, 1367, 1254, 1254, 1254, 1254, + /* 10 */ 1491, 1491, 1491, 1254, 1254, 1254, 1254, 1254, 1254, 1397, + /* 20 */ 1397, 1544, 1287, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 30 */ 1254, 1254, 1254, 1254, 1254, 1490, 1254, 1254, 1254, 1254, + /* 40 */ 1578, 1578, 1254, 1254, 1254, 1254, 1254, 1563, 1562, 1254, + /* 50 */ 1254, 1254, 1406, 1254, 1413, 1254, 1254, 1254, 1254, 1254, + /* 60 */ 1492, 1493, 1254, 1254, 1254, 1543, 1545, 1508, 1420, 1419, + /* 70 */ 1418, 1417, 1526, 1385, 1411, 1404, 1408, 1487, 1488, 1486, + /* 80 */ 1641, 1493, 1492, 1254, 1407, 1455, 1471, 1454, 1254, 1254, + /* 90 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 100 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 110 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 120 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 130 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 140 */ 1463, 1470, 1469, 1468, 1477, 1467, 1464, 1457, 1456, 1458, + /* 150 */ 1459, 1278, 1254, 1275, 1329, 1254, 1254, 1254, 1254, 1254, + /* 160 */ 1460, 1287, 1448, 1447, 1446, 1254, 1474, 1461, 1473, 1472, + /* 170 */ 1551, 1615, 1614, 1509, 1254, 1254, 1254, 1254, 1254, 1254, + /* 180 */ 1578, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 190 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 200 */ 1254, 1254, 1254, 1387, 1578, 1578, 1254, 1287, 1578, 1578, + /* 210 */ 1388, 1388, 1283, 1283, 1391, 1558, 1358, 1358, 1358, 1358, + /* 220 */ 1367, 1358, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 230 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1548, 1546, 1254, + /* 240 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 250 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 260 */ 1254, 1254, 1254, 1254, 1254, 1254, 1363, 1254, 1254, 1254, + /* 270 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1608, 1254, + /* 280 */ 1521, 1343, 1363, 1363, 1363, 1363, 1365, 1344, 1342, 1357, + /* 290 */ 1288, 1261, 1655, 1423, 1412, 1364, 1412, 1652, 1410, 1423, + /* 300 */ 1423, 1410, 1423, 1364, 1652, 1304, 1630, 1299, 1397, 1397, + /* 310 */ 1397, 1387, 1387, 1387, 1387, 1391, 1391, 1489, 1364, 1357, + /* 320 */ 1254, 1655, 1655, 1373, 1373, 1654, 1654, 1373, 1509, 1638, + /* 330 */ 1432, 1332, 1338, 1338, 1338, 1338, 1373, 1272, 1410, 1638, + /* 340 */ 1638, 1410, 1432, 1332, 1410, 1332, 1410, 1373, 1272, 1525, + /* 350 */ 1649, 1373, 1272, 1499, 1373, 1272, 1373, 1272, 1499, 1330, + /* 360 */ 1330, 1330, 1319, 1254, 1254, 1499, 1330, 1304, 1330, 1319, + /* 370 */ 1330, 1330, 1596, 1254, 1503, 1503, 1499, 1373, 1588, 1588, + /* 380 */ 1400, 1400, 1405, 1391, 1494, 1373, 1254, 1405, 1403, 1401, + /* 390 */ 1410, 1322, 1611, 1611, 1607, 1607, 1607, 1660, 1660, 1558, + /* 400 */ 1623, 1287, 1287, 1287, 1287, 1623, 1306, 1306, 1288, 1288, + /* 410 */ 1287, 1623, 1254, 1254, 1254, 1254, 1254, 1254, 1618, 1254, + /* 420 */ 1553, 1510, 1377, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 430 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1564, + /* 440 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 450 */ 1254, 1437, 1254, 1257, 1555, 1254, 1254, 1254, 1254, 1254, + /* 460 */ 1254, 1254, 1254, 1414, 1415, 1378, 1254, 1254, 1254, 1254, + /* 470 */ 1254, 1254, 1254, 1429, 1254, 1254, 1254, 1424, 1254, 1254, + /* 480 */ 1254, 1254, 1254, 1254, 1254, 1254, 1651, 1254, 1254, 1254, + /* 490 */ 1254, 1254, 1254, 1524, 1523, 1254, 1254, 1375, 1254, 1254, + /* 500 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 510 */ 1254, 1302, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 520 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 530 */ 1254, 1254, 1254, 1254, 1254, 1402, 1254, 1254, 1254, 1254, + /* 540 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 550 */ 1593, 1392, 1254, 1254, 1254, 1254, 1642, 1254, 1254, 1254, + /* 560 */ 1254, 1352, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 570 */ 1254, 1254, 1254, 1634, 1346, 1438, 1254, 1441, 1276, 1254, + /* 580 */ 1266, 1254, 1254, }; /********** End of lemon-generated parsing tables *****************************/ @@ -170615,8 +173902,8 @@ static const YYCODETYPE yyFallback[] = { 0, /* TRUEFALSE => nothing */ 0, /* ISNOT => nothing */ 0, /* FUNCTION => nothing */ - 0, /* UMINUS => nothing */ 0, /* UPLUS => nothing */ + 0, /* UMINUS => nothing */ 0, /* TRUTH => nothing */ 0, /* REGISTER => nothing */ 0, /* VECTOR => nothing */ @@ -170625,6 +173912,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* ASTERISK => nothing */ 0, /* SPAN => nothing */ 0, /* ERROR => nothing */ + 0, /* QNUMBER => nothing */ 0, /* SPACE => nothing */ 0, /* ILLEGAL => nothing */ }; @@ -170667,14 +173955,9 @@ struct yyParser { #endif sqlite3ParserARG_SDECL /* A place to hold %extra_argument */ sqlite3ParserCTX_SDECL /* A place to hold %extra_context */ -#if YYSTACKDEPTH<=0 - int yystksz; /* Current side of the stack */ - yyStackEntry *yystack; /* The parser's stack */ - yyStackEntry yystk0; /* First stack entry */ -#else - yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ - yyStackEntry *yystackEnd; /* Last entry in the stack */ -#endif + yyStackEntry *yystackEnd; /* Last entry in the stack */ + yyStackEntry *yystack; /* The parser stack */ + yyStackEntry yystk0[YYSTACKDEPTH]; /* Initial stack space */ }; typedef struct yyParser yyParser; @@ -170888,8 +174171,8 @@ static const char *const yyTokenName[] = { /* 170 */ "TRUEFALSE", /* 171 */ "ISNOT", /* 172 */ "FUNCTION", - /* 173 */ "UMINUS", - /* 174 */ "UPLUS", + /* 173 */ "UPLUS", + /* 174 */ "UMINUS", /* 175 */ "TRUTH", /* 176 */ "REGISTER", /* 177 */ "VECTOR", @@ -170898,142 +174181,145 @@ static const char *const yyTokenName[] = { /* 180 */ "ASTERISK", /* 181 */ "SPAN", /* 182 */ "ERROR", - /* 183 */ "SPACE", - /* 184 */ "ILLEGAL", - /* 185 */ "input", - /* 186 */ "cmdlist", - /* 187 */ "ecmd", - /* 188 */ "cmdx", - /* 189 */ "explain", - /* 190 */ "cmd", - /* 191 */ "transtype", - /* 192 */ "trans_opt", - /* 193 */ "nm", - /* 194 */ "savepoint_opt", - /* 195 */ "create_table", - /* 196 */ "create_table_args", - /* 197 */ "createkw", - /* 198 */ "temp", - /* 199 */ "ifnotexists", - /* 200 */ "dbnm", - /* 201 */ "columnlist", - /* 202 */ "conslist_opt", - /* 203 */ "table_option_set", - /* 204 */ "select", - /* 205 */ "table_option", - /* 206 */ "columnname", - /* 207 */ "carglist", - /* 208 */ "typetoken", - /* 209 */ "typename", - /* 210 */ "signed", - /* 211 */ "plus_num", - /* 212 */ "minus_num", - /* 213 */ "scanpt", - /* 214 */ "scantok", - /* 215 */ "ccons", - /* 216 */ "term", - /* 217 */ "expr", - /* 218 */ "onconf", - /* 219 */ "sortorder", - /* 220 */ "autoinc", - /* 221 */ "eidlist_opt", - /* 222 */ "refargs", - /* 223 */ "defer_subclause", - /* 224 */ "generated", - /* 225 */ "refarg", - /* 226 */ "refact", - /* 227 */ "init_deferred_pred_opt", - /* 228 */ "conslist", - /* 229 */ "tconscomma", - /* 230 */ "tcons", - /* 231 */ "sortlist", - /* 232 */ "eidlist", - /* 233 */ "defer_subclause_opt", - /* 234 */ "orconf", - /* 235 */ "resolvetype", - /* 236 */ "raisetype", - /* 237 */ "ifexists", - /* 238 */ "fullname", - /* 239 */ "selectnowith", - /* 240 */ "oneselect", - /* 241 */ "wqlist", - /* 242 */ "multiselect_op", - /* 243 */ "distinct", - /* 244 */ "selcollist", - /* 245 */ "from", - /* 246 */ "where_opt", - /* 247 */ "groupby_opt", - /* 248 */ "having_opt", - /* 249 */ "orderby_opt", - /* 250 */ "limit_opt", - /* 251 */ "window_clause", - /* 252 */ "values", - /* 253 */ "nexprlist", - /* 254 */ "sclp", - /* 255 */ "as", - /* 256 */ "seltablist", - /* 257 */ "stl_prefix", - /* 258 */ "joinop", - /* 259 */ "on_using", - /* 260 */ "indexed_by", - /* 261 */ "exprlist", - /* 262 */ "xfullname", - /* 263 */ "idlist", - /* 264 */ "indexed_opt", - /* 265 */ "nulls", - /* 266 */ "with", - /* 267 */ "where_opt_ret", - /* 268 */ "setlist", - /* 269 */ "insert_cmd", - /* 270 */ "idlist_opt", - /* 271 */ "upsert", - /* 272 */ "returning", - /* 273 */ "filter_over", - /* 274 */ "likeop", - /* 275 */ "between_op", - /* 276 */ "in_op", - /* 277 */ "paren_exprlist", - /* 278 */ "case_operand", - /* 279 */ "case_exprlist", - /* 280 */ "case_else", - /* 281 */ "uniqueflag", - /* 282 */ "collate", - /* 283 */ "vinto", - /* 284 */ "nmnum", - /* 285 */ "trigger_decl", - /* 286 */ "trigger_cmd_list", - /* 287 */ "trigger_time", - /* 288 */ "trigger_event", - /* 289 */ "foreach_clause", - /* 290 */ "when_clause", - /* 291 */ "trigger_cmd", - /* 292 */ "trnm", - /* 293 */ "tridxby", - /* 294 */ "database_kw_opt", - /* 295 */ "key_opt", - /* 296 */ "add_column_fullname", - /* 297 */ "kwcolumn_opt", - /* 298 */ "create_vtab", - /* 299 */ "vtabarglist", - /* 300 */ "vtabarg", - /* 301 */ "vtabargtoken", - /* 302 */ "lp", - /* 303 */ "anylist", - /* 304 */ "wqitem", - /* 305 */ "wqas", - /* 306 */ "windowdefn_list", - /* 307 */ "windowdefn", - /* 308 */ "window", - /* 309 */ "frame_opt", - /* 310 */ "part_opt", - /* 311 */ "filter_clause", - /* 312 */ "over_clause", - /* 313 */ "range_or_rows", - /* 314 */ "frame_bound", - /* 315 */ "frame_bound_s", - /* 316 */ "frame_bound_e", - /* 317 */ "frame_exclude_opt", - /* 318 */ "frame_exclude", + /* 183 */ "QNUMBER", + /* 184 */ "SPACE", + /* 185 */ "ILLEGAL", + /* 186 */ "input", + /* 187 */ "cmdlist", + /* 188 */ "ecmd", + /* 189 */ "cmdx", + /* 190 */ "explain", + /* 191 */ "cmd", + /* 192 */ "transtype", + /* 193 */ "trans_opt", + /* 194 */ "nm", + /* 195 */ "savepoint_opt", + /* 196 */ "create_table", + /* 197 */ "create_table_args", + /* 198 */ "createkw", + /* 199 */ "temp", + /* 200 */ "ifnotexists", + /* 201 */ "dbnm", + /* 202 */ "columnlist", + /* 203 */ "conslist_opt", + /* 204 */ "table_option_set", + /* 205 */ "select", + /* 206 */ "table_option", + /* 207 */ "columnname", + /* 208 */ "carglist", + /* 209 */ "typetoken", + /* 210 */ "typename", + /* 211 */ "signed", + /* 212 */ "plus_num", + /* 213 */ "minus_num", + /* 214 */ "scanpt", + /* 215 */ "scantok", + /* 216 */ "ccons", + /* 217 */ "term", + /* 218 */ "expr", + /* 219 */ "onconf", + /* 220 */ "sortorder", + /* 221 */ "autoinc", + /* 222 */ "eidlist_opt", + /* 223 */ "refargs", + /* 224 */ "defer_subclause", + /* 225 */ "generated", + /* 226 */ "refarg", + /* 227 */ "refact", + /* 228 */ "init_deferred_pred_opt", + /* 229 */ "conslist", + /* 230 */ "tconscomma", + /* 231 */ "tcons", + /* 232 */ "sortlist", + /* 233 */ "eidlist", + /* 234 */ "defer_subclause_opt", + /* 235 */ "orconf", + /* 236 */ "resolvetype", + /* 237 */ "raisetype", + /* 238 */ "ifexists", + /* 239 */ "fullname", + /* 240 */ "selectnowith", + /* 241 */ "oneselect", + /* 242 */ "wqlist", + /* 243 */ "multiselect_op", + /* 244 */ "distinct", + /* 245 */ "selcollist", + /* 246 */ "from", + /* 247 */ "where_opt", + /* 248 */ "groupby_opt", + /* 249 */ "having_opt", + /* 250 */ "orderby_opt", + /* 251 */ "limit_opt", + /* 252 */ "window_clause", + /* 253 */ "values", + /* 254 */ "nexprlist", + /* 255 */ "mvalues", + /* 256 */ "sclp", + /* 257 */ "as", + /* 258 */ "seltablist", + /* 259 */ "stl_prefix", + /* 260 */ "joinop", + /* 261 */ "on_using", + /* 262 */ "indexed_by", + /* 263 */ "exprlist", + /* 264 */ "xfullname", + /* 265 */ "idlist", + /* 266 */ "indexed_opt", + /* 267 */ "nulls", + /* 268 */ "with", + /* 269 */ "where_opt_ret", + /* 270 */ "setlist", + /* 271 */ "insert_cmd", + /* 272 */ "idlist_opt", + /* 273 */ "upsert", + /* 274 */ "returning", + /* 275 */ "filter_over", + /* 276 */ "likeop", + /* 277 */ "between_op", + /* 278 */ "in_op", + /* 279 */ "paren_exprlist", + /* 280 */ "case_operand", + /* 281 */ "case_exprlist", + /* 282 */ "case_else", + /* 283 */ "uniqueflag", + /* 284 */ "collate", + /* 285 */ "vinto", + /* 286 */ "nmnum", + /* 287 */ "trigger_decl", + /* 288 */ "trigger_cmd_list", + /* 289 */ "trigger_time", + /* 290 */ "trigger_event", + /* 291 */ "foreach_clause", + /* 292 */ "when_clause", + /* 293 */ "trigger_cmd", + /* 294 */ "trnm", + /* 295 */ "tridxby", + /* 296 */ "database_kw_opt", + /* 297 */ "key_opt", + /* 298 */ "add_column_fullname", + /* 299 */ "kwcolumn_opt", + /* 300 */ "create_vtab", + /* 301 */ "vtabarglist", + /* 302 */ "vtabarg", + /* 303 */ "vtabargtoken", + /* 304 */ "lp", + /* 305 */ "anylist", + /* 306 */ "wqitem", + /* 307 */ "wqas", + /* 308 */ "withnm", + /* 309 */ "windowdefn_list", + /* 310 */ "windowdefn", + /* 311 */ "window", + /* 312 */ "frame_opt", + /* 313 */ "part_opt", + /* 314 */ "filter_clause", + /* 315 */ "over_clause", + /* 316 */ "range_or_rows", + /* 317 */ "frame_bound", + /* 318 */ "frame_bound_s", + /* 319 */ "frame_bound_e", + /* 320 */ "frame_exclude_opt", + /* 321 */ "frame_exclude", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -171136,349 +174422,363 @@ static const char *const yyRuleName[] = { /* 92 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", /* 93 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt", /* 94 */ "values ::= VALUES LP nexprlist RP", - /* 95 */ "values ::= values COMMA LP nexprlist RP", - /* 96 */ "distinct ::= DISTINCT", - /* 97 */ "distinct ::= ALL", - /* 98 */ "distinct ::=", - /* 99 */ "sclp ::=", - /* 100 */ "selcollist ::= sclp scanpt expr scanpt as", - /* 101 */ "selcollist ::= sclp scanpt STAR", - /* 102 */ "selcollist ::= sclp scanpt nm DOT STAR", - /* 103 */ "as ::= AS nm", - /* 104 */ "as ::=", - /* 105 */ "from ::=", - /* 106 */ "from ::= FROM seltablist", - /* 107 */ "stl_prefix ::= seltablist joinop", - /* 108 */ "stl_prefix ::=", - /* 109 */ "seltablist ::= stl_prefix nm dbnm as on_using", - /* 110 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using", - /* 111 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using", - /* 112 */ "seltablist ::= stl_prefix LP select RP as on_using", - /* 113 */ "seltablist ::= stl_prefix LP seltablist RP as on_using", - /* 114 */ "dbnm ::=", - /* 115 */ "dbnm ::= DOT nm", - /* 116 */ "fullname ::= nm", - /* 117 */ "fullname ::= nm DOT nm", - /* 118 */ "xfullname ::= nm", - /* 119 */ "xfullname ::= nm DOT nm", - /* 120 */ "xfullname ::= nm DOT nm AS nm", - /* 121 */ "xfullname ::= nm AS nm", - /* 122 */ "joinop ::= COMMA|JOIN", - /* 123 */ "joinop ::= JOIN_KW JOIN", - /* 124 */ "joinop ::= JOIN_KW nm JOIN", - /* 125 */ "joinop ::= JOIN_KW nm nm JOIN", - /* 126 */ "on_using ::= ON expr", - /* 127 */ "on_using ::= USING LP idlist RP", - /* 128 */ "on_using ::=", - /* 129 */ "indexed_opt ::=", - /* 130 */ "indexed_by ::= INDEXED BY nm", - /* 131 */ "indexed_by ::= NOT INDEXED", - /* 132 */ "orderby_opt ::=", - /* 133 */ "orderby_opt ::= ORDER BY sortlist", - /* 134 */ "sortlist ::= sortlist COMMA expr sortorder nulls", - /* 135 */ "sortlist ::= expr sortorder nulls", - /* 136 */ "sortorder ::= ASC", - /* 137 */ "sortorder ::= DESC", - /* 138 */ "sortorder ::=", - /* 139 */ "nulls ::= NULLS FIRST", - /* 140 */ "nulls ::= NULLS LAST", - /* 141 */ "nulls ::=", - /* 142 */ "groupby_opt ::=", - /* 143 */ "groupby_opt ::= GROUP BY nexprlist", - /* 144 */ "having_opt ::=", - /* 145 */ "having_opt ::= HAVING expr", - /* 146 */ "limit_opt ::=", - /* 147 */ "limit_opt ::= LIMIT expr", - /* 148 */ "limit_opt ::= LIMIT expr OFFSET expr", - /* 149 */ "limit_opt ::= LIMIT expr COMMA expr", - /* 150 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret", - /* 151 */ "where_opt ::=", - /* 152 */ "where_opt ::= WHERE expr", - /* 153 */ "where_opt_ret ::=", - /* 154 */ "where_opt_ret ::= WHERE expr", - /* 155 */ "where_opt_ret ::= RETURNING selcollist", - /* 156 */ "where_opt_ret ::= WHERE expr RETURNING selcollist", - /* 157 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret", - /* 158 */ "setlist ::= setlist COMMA nm EQ expr", - /* 159 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", - /* 160 */ "setlist ::= nm EQ expr", - /* 161 */ "setlist ::= LP idlist RP EQ expr", - /* 162 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert", - /* 163 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning", - /* 164 */ "upsert ::=", - /* 165 */ "upsert ::= RETURNING selcollist", - /* 166 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert", - /* 167 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert", - /* 168 */ "upsert ::= ON CONFLICT DO NOTHING returning", - /* 169 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning", - /* 170 */ "returning ::= RETURNING selcollist", - /* 171 */ "insert_cmd ::= INSERT orconf", - /* 172 */ "insert_cmd ::= REPLACE", - /* 173 */ "idlist_opt ::=", - /* 174 */ "idlist_opt ::= LP idlist RP", - /* 175 */ "idlist ::= idlist COMMA nm", - /* 176 */ "idlist ::= nm", - /* 177 */ "expr ::= LP expr RP", - /* 178 */ "expr ::= ID|INDEXED|JOIN_KW", - /* 179 */ "expr ::= nm DOT nm", - /* 180 */ "expr ::= nm DOT nm DOT nm", - /* 181 */ "term ::= NULL|FLOAT|BLOB", - /* 182 */ "term ::= STRING", - /* 183 */ "term ::= INTEGER", - /* 184 */ "expr ::= VARIABLE", - /* 185 */ "expr ::= expr COLLATE ID|STRING", - /* 186 */ "expr ::= CAST LP expr AS typetoken RP", - /* 187 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP", - /* 188 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP", - /* 189 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over", - /* 190 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over", - /* 191 */ "term ::= CTIME_KW", - /* 192 */ "expr ::= LP nexprlist COMMA expr RP", - /* 193 */ "expr ::= expr AND expr", - /* 194 */ "expr ::= expr OR expr", - /* 195 */ "expr ::= expr LT|GT|GE|LE expr", - /* 196 */ "expr ::= expr EQ|NE expr", - /* 197 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 198 */ "expr ::= expr PLUS|MINUS expr", - /* 199 */ "expr ::= expr STAR|SLASH|REM expr", - /* 200 */ "expr ::= expr CONCAT expr", - /* 201 */ "likeop ::= NOT LIKE_KW|MATCH", - /* 202 */ "expr ::= expr likeop expr", - /* 203 */ "expr ::= expr likeop expr ESCAPE expr", - /* 204 */ "expr ::= expr ISNULL|NOTNULL", - /* 205 */ "expr ::= expr NOT NULL", - /* 206 */ "expr ::= expr IS expr", - /* 207 */ "expr ::= expr IS NOT expr", - /* 208 */ "expr ::= expr IS NOT DISTINCT FROM expr", - /* 209 */ "expr ::= expr IS DISTINCT FROM expr", - /* 210 */ "expr ::= NOT expr", - /* 211 */ "expr ::= BITNOT expr", - /* 212 */ "expr ::= PLUS|MINUS expr", - /* 213 */ "expr ::= expr PTR expr", - /* 214 */ "between_op ::= BETWEEN", - /* 215 */ "between_op ::= NOT BETWEEN", - /* 216 */ "expr ::= expr between_op expr AND expr", - /* 217 */ "in_op ::= IN", - /* 218 */ "in_op ::= NOT IN", - /* 219 */ "expr ::= expr in_op LP exprlist RP", - /* 220 */ "expr ::= LP select RP", - /* 221 */ "expr ::= expr in_op LP select RP", - /* 222 */ "expr ::= expr in_op nm dbnm paren_exprlist", - /* 223 */ "expr ::= EXISTS LP select RP", - /* 224 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 225 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 226 */ "case_exprlist ::= WHEN expr THEN expr", - /* 227 */ "case_else ::= ELSE expr", - /* 228 */ "case_else ::=", - /* 229 */ "case_operand ::=", - /* 230 */ "exprlist ::=", - /* 231 */ "nexprlist ::= nexprlist COMMA expr", - /* 232 */ "nexprlist ::= expr", - /* 233 */ "paren_exprlist ::=", - /* 234 */ "paren_exprlist ::= LP exprlist RP", - /* 235 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", - /* 236 */ "uniqueflag ::= UNIQUE", - /* 237 */ "uniqueflag ::=", - /* 238 */ "eidlist_opt ::=", - /* 239 */ "eidlist_opt ::= LP eidlist RP", - /* 240 */ "eidlist ::= eidlist COMMA nm collate sortorder", - /* 241 */ "eidlist ::= nm collate sortorder", - /* 242 */ "collate ::=", - /* 243 */ "collate ::= COLLATE ID|STRING", - /* 244 */ "cmd ::= DROP INDEX ifexists fullname", - /* 245 */ "cmd ::= VACUUM vinto", - /* 246 */ "cmd ::= VACUUM nm vinto", - /* 247 */ "vinto ::= INTO expr", - /* 248 */ "vinto ::=", - /* 249 */ "cmd ::= PRAGMA nm dbnm", - /* 250 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 251 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 252 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 253 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 254 */ "plus_num ::= PLUS INTEGER|FLOAT", - /* 255 */ "minus_num ::= MINUS INTEGER|FLOAT", - /* 256 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 257 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 258 */ "trigger_time ::= BEFORE|AFTER", - /* 259 */ "trigger_time ::= INSTEAD OF", - /* 260 */ "trigger_time ::=", - /* 261 */ "trigger_event ::= DELETE|INSERT", - /* 262 */ "trigger_event ::= UPDATE", - /* 263 */ "trigger_event ::= UPDATE OF idlist", - /* 264 */ "when_clause ::=", - /* 265 */ "when_clause ::= WHEN expr", - /* 266 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 267 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 268 */ "trnm ::= nm DOT nm", - /* 269 */ "tridxby ::= INDEXED BY nm", - /* 270 */ "tridxby ::= NOT INDEXED", - /* 271 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt", - /* 272 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", - /* 273 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", - /* 274 */ "trigger_cmd ::= scanpt select scanpt", - /* 275 */ "expr ::= RAISE LP IGNORE RP", - /* 276 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 277 */ "raisetype ::= ROLLBACK", - /* 278 */ "raisetype ::= ABORT", - /* 279 */ "raisetype ::= FAIL", - /* 280 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 281 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 282 */ "cmd ::= DETACH database_kw_opt expr", - /* 283 */ "key_opt ::=", - /* 284 */ "key_opt ::= KEY expr", - /* 285 */ "cmd ::= REINDEX", - /* 286 */ "cmd ::= REINDEX nm dbnm", - /* 287 */ "cmd ::= ANALYZE", - /* 288 */ "cmd ::= ANALYZE nm dbnm", - /* 289 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 290 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", - /* 291 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm", - /* 292 */ "add_column_fullname ::= fullname", - /* 293 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", - /* 294 */ "cmd ::= create_vtab", - /* 295 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 296 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", - /* 297 */ "vtabarg ::=", - /* 298 */ "vtabargtoken ::= ANY", - /* 299 */ "vtabargtoken ::= lp anylist RP", - /* 300 */ "lp ::= LP", - /* 301 */ "with ::= WITH wqlist", - /* 302 */ "with ::= WITH RECURSIVE wqlist", - /* 303 */ "wqas ::= AS", - /* 304 */ "wqas ::= AS MATERIALIZED", - /* 305 */ "wqas ::= AS NOT MATERIALIZED", - /* 306 */ "wqitem ::= nm eidlist_opt wqas LP select RP", - /* 307 */ "wqlist ::= wqitem", - /* 308 */ "wqlist ::= wqlist COMMA wqitem", - /* 309 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", - /* 310 */ "windowdefn ::= nm AS LP window RP", - /* 311 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt", - /* 312 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt", - /* 313 */ "window ::= ORDER BY sortlist frame_opt", - /* 314 */ "window ::= nm ORDER BY sortlist frame_opt", - /* 315 */ "window ::= nm frame_opt", - /* 316 */ "frame_opt ::=", - /* 317 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt", - /* 318 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt", - /* 319 */ "range_or_rows ::= RANGE|ROWS|GROUPS", - /* 320 */ "frame_bound_s ::= frame_bound", - /* 321 */ "frame_bound_s ::= UNBOUNDED PRECEDING", - /* 322 */ "frame_bound_e ::= frame_bound", - /* 323 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", - /* 324 */ "frame_bound ::= expr PRECEDING|FOLLOWING", - /* 325 */ "frame_bound ::= CURRENT ROW", - /* 326 */ "frame_exclude_opt ::=", - /* 327 */ "frame_exclude_opt ::= EXCLUDE frame_exclude", - /* 328 */ "frame_exclude ::= NO OTHERS", - /* 329 */ "frame_exclude ::= CURRENT ROW", - /* 330 */ "frame_exclude ::= GROUP|TIES", - /* 331 */ "window_clause ::= WINDOW windowdefn_list", - /* 332 */ "filter_over ::= filter_clause over_clause", - /* 333 */ "filter_over ::= over_clause", - /* 334 */ "filter_over ::= filter_clause", - /* 335 */ "over_clause ::= OVER LP window RP", - /* 336 */ "over_clause ::= OVER nm", - /* 337 */ "filter_clause ::= FILTER LP WHERE expr RP", - /* 338 */ "input ::= cmdlist", - /* 339 */ "cmdlist ::= cmdlist ecmd", - /* 340 */ "cmdlist ::= ecmd", - /* 341 */ "ecmd ::= SEMI", - /* 342 */ "ecmd ::= cmdx SEMI", - /* 343 */ "ecmd ::= explain cmdx SEMI", - /* 344 */ "trans_opt ::=", - /* 345 */ "trans_opt ::= TRANSACTION", - /* 346 */ "trans_opt ::= TRANSACTION nm", - /* 347 */ "savepoint_opt ::= SAVEPOINT", - /* 348 */ "savepoint_opt ::=", - /* 349 */ "cmd ::= create_table create_table_args", - /* 350 */ "table_option_set ::= table_option", - /* 351 */ "columnlist ::= columnlist COMMA columnname carglist", - /* 352 */ "columnlist ::= columnname carglist", - /* 353 */ "nm ::= ID|INDEXED|JOIN_KW", - /* 354 */ "nm ::= STRING", - /* 355 */ "typetoken ::= typename", - /* 356 */ "typename ::= ID|STRING", - /* 357 */ "signed ::= plus_num", - /* 358 */ "signed ::= minus_num", - /* 359 */ "carglist ::= carglist ccons", - /* 360 */ "carglist ::=", - /* 361 */ "ccons ::= NULL onconf", - /* 362 */ "ccons ::= GENERATED ALWAYS AS generated", - /* 363 */ "ccons ::= AS generated", - /* 364 */ "conslist_opt ::= COMMA conslist", - /* 365 */ "conslist ::= conslist tconscomma tcons", - /* 366 */ "conslist ::= tcons", - /* 367 */ "tconscomma ::=", - /* 368 */ "defer_subclause_opt ::= defer_subclause", - /* 369 */ "resolvetype ::= raisetype", - /* 370 */ "selectnowith ::= oneselect", - /* 371 */ "oneselect ::= values", - /* 372 */ "sclp ::= selcollist COMMA", - /* 373 */ "as ::= ID|STRING", - /* 374 */ "indexed_opt ::= indexed_by", - /* 375 */ "returning ::=", - /* 376 */ "expr ::= term", - /* 377 */ "likeop ::= LIKE_KW|MATCH", - /* 378 */ "case_operand ::= expr", - /* 379 */ "exprlist ::= nexprlist", - /* 380 */ "nmnum ::= plus_num", - /* 381 */ "nmnum ::= nm", - /* 382 */ "nmnum ::= ON", - /* 383 */ "nmnum ::= DELETE", - /* 384 */ "nmnum ::= DEFAULT", - /* 385 */ "plus_num ::= INTEGER|FLOAT", - /* 386 */ "foreach_clause ::=", - /* 387 */ "foreach_clause ::= FOR EACH ROW", - /* 388 */ "trnm ::= nm", - /* 389 */ "tridxby ::=", - /* 390 */ "database_kw_opt ::= DATABASE", - /* 391 */ "database_kw_opt ::=", - /* 392 */ "kwcolumn_opt ::=", - /* 393 */ "kwcolumn_opt ::= COLUMNKW", - /* 394 */ "vtabarglist ::= vtabarg", - /* 395 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 396 */ "vtabarg ::= vtabarg vtabargtoken", - /* 397 */ "anylist ::=", - /* 398 */ "anylist ::= anylist LP anylist RP", - /* 399 */ "anylist ::= anylist ANY", - /* 400 */ "with ::=", - /* 401 */ "windowdefn_list ::= windowdefn", - /* 402 */ "window ::= frame_opt", + /* 95 */ "oneselect ::= mvalues", + /* 96 */ "mvalues ::= values COMMA LP nexprlist RP", + /* 97 */ "mvalues ::= mvalues COMMA LP nexprlist RP", + /* 98 */ "distinct ::= DISTINCT", + /* 99 */ "distinct ::= ALL", + /* 100 */ "distinct ::=", + /* 101 */ "sclp ::=", + /* 102 */ "selcollist ::= sclp scanpt expr scanpt as", + /* 103 */ "selcollist ::= sclp scanpt STAR", + /* 104 */ "selcollist ::= sclp scanpt nm DOT STAR", + /* 105 */ "as ::= AS nm", + /* 106 */ "as ::=", + /* 107 */ "from ::=", + /* 108 */ "from ::= FROM seltablist", + /* 109 */ "stl_prefix ::= seltablist joinop", + /* 110 */ "stl_prefix ::=", + /* 111 */ "seltablist ::= stl_prefix nm dbnm as on_using", + /* 112 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using", + /* 113 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using", + /* 114 */ "seltablist ::= stl_prefix LP select RP as on_using", + /* 115 */ "seltablist ::= stl_prefix LP seltablist RP as on_using", + /* 116 */ "dbnm ::=", + /* 117 */ "dbnm ::= DOT nm", + /* 118 */ "fullname ::= nm", + /* 119 */ "fullname ::= nm DOT nm", + /* 120 */ "xfullname ::= nm", + /* 121 */ "xfullname ::= nm DOT nm", + /* 122 */ "xfullname ::= nm DOT nm AS nm", + /* 123 */ "xfullname ::= nm AS nm", + /* 124 */ "joinop ::= COMMA|JOIN", + /* 125 */ "joinop ::= JOIN_KW JOIN", + /* 126 */ "joinop ::= JOIN_KW nm JOIN", + /* 127 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 128 */ "on_using ::= ON expr", + /* 129 */ "on_using ::= USING LP idlist RP", + /* 130 */ "on_using ::=", + /* 131 */ "indexed_opt ::=", + /* 132 */ "indexed_by ::= INDEXED BY nm", + /* 133 */ "indexed_by ::= NOT INDEXED", + /* 134 */ "orderby_opt ::=", + /* 135 */ "orderby_opt ::= ORDER BY sortlist", + /* 136 */ "sortlist ::= sortlist COMMA expr sortorder nulls", + /* 137 */ "sortlist ::= expr sortorder nulls", + /* 138 */ "sortorder ::= ASC", + /* 139 */ "sortorder ::= DESC", + /* 140 */ "sortorder ::=", + /* 141 */ "nulls ::= NULLS FIRST", + /* 142 */ "nulls ::= NULLS LAST", + /* 143 */ "nulls ::=", + /* 144 */ "groupby_opt ::=", + /* 145 */ "groupby_opt ::= GROUP BY nexprlist", + /* 146 */ "having_opt ::=", + /* 147 */ "having_opt ::= HAVING expr", + /* 148 */ "limit_opt ::=", + /* 149 */ "limit_opt ::= LIMIT expr", + /* 150 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 151 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 152 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret", + /* 153 */ "where_opt ::=", + /* 154 */ "where_opt ::= WHERE expr", + /* 155 */ "where_opt_ret ::=", + /* 156 */ "where_opt_ret ::= WHERE expr", + /* 157 */ "where_opt_ret ::= RETURNING selcollist", + /* 158 */ "where_opt_ret ::= WHERE expr RETURNING selcollist", + /* 159 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret", + /* 160 */ "setlist ::= setlist COMMA nm EQ expr", + /* 161 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", + /* 162 */ "setlist ::= nm EQ expr", + /* 163 */ "setlist ::= LP idlist RP EQ expr", + /* 164 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert", + /* 165 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning", + /* 166 */ "upsert ::=", + /* 167 */ "upsert ::= RETURNING selcollist", + /* 168 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert", + /* 169 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert", + /* 170 */ "upsert ::= ON CONFLICT DO NOTHING returning", + /* 171 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning", + /* 172 */ "returning ::= RETURNING selcollist", + /* 173 */ "insert_cmd ::= INSERT orconf", + /* 174 */ "insert_cmd ::= REPLACE", + /* 175 */ "idlist_opt ::=", + /* 176 */ "idlist_opt ::= LP idlist RP", + /* 177 */ "idlist ::= idlist COMMA nm", + /* 178 */ "idlist ::= nm", + /* 179 */ "expr ::= LP expr RP", + /* 180 */ "expr ::= ID|INDEXED|JOIN_KW", + /* 181 */ "expr ::= nm DOT nm", + /* 182 */ "expr ::= nm DOT nm DOT nm", + /* 183 */ "term ::= NULL|FLOAT|BLOB", + /* 184 */ "term ::= STRING", + /* 185 */ "term ::= INTEGER", + /* 186 */ "expr ::= VARIABLE", + /* 187 */ "expr ::= expr COLLATE ID|STRING", + /* 188 */ "expr ::= CAST LP expr AS typetoken RP", + /* 189 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP", + /* 190 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP", + /* 191 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP", + /* 192 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over", + /* 193 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over", + /* 194 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over", + /* 195 */ "term ::= CTIME_KW", + /* 196 */ "expr ::= LP nexprlist COMMA expr RP", + /* 197 */ "expr ::= expr AND expr", + /* 198 */ "expr ::= expr OR expr", + /* 199 */ "expr ::= expr LT|GT|GE|LE expr", + /* 200 */ "expr ::= expr EQ|NE expr", + /* 201 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 202 */ "expr ::= expr PLUS|MINUS expr", + /* 203 */ "expr ::= expr STAR|SLASH|REM expr", + /* 204 */ "expr ::= expr CONCAT expr", + /* 205 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 206 */ "expr ::= expr likeop expr", + /* 207 */ "expr ::= expr likeop expr ESCAPE expr", + /* 208 */ "expr ::= expr ISNULL|NOTNULL", + /* 209 */ "expr ::= expr NOT NULL", + /* 210 */ "expr ::= expr IS expr", + /* 211 */ "expr ::= expr IS NOT expr", + /* 212 */ "expr ::= expr IS NOT DISTINCT FROM expr", + /* 213 */ "expr ::= expr IS DISTINCT FROM expr", + /* 214 */ "expr ::= NOT expr", + /* 215 */ "expr ::= BITNOT expr", + /* 216 */ "expr ::= PLUS|MINUS expr", + /* 217 */ "expr ::= expr PTR expr", + /* 218 */ "between_op ::= BETWEEN", + /* 219 */ "between_op ::= NOT BETWEEN", + /* 220 */ "expr ::= expr between_op expr AND expr", + /* 221 */ "in_op ::= IN", + /* 222 */ "in_op ::= NOT IN", + /* 223 */ "expr ::= expr in_op LP exprlist RP", + /* 224 */ "expr ::= LP select RP", + /* 225 */ "expr ::= expr in_op LP select RP", + /* 226 */ "expr ::= expr in_op nm dbnm paren_exprlist", + /* 227 */ "expr ::= EXISTS LP select RP", + /* 228 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 229 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 230 */ "case_exprlist ::= WHEN expr THEN expr", + /* 231 */ "case_else ::= ELSE expr", + /* 232 */ "case_else ::=", + /* 233 */ "case_operand ::=", + /* 234 */ "exprlist ::=", + /* 235 */ "nexprlist ::= nexprlist COMMA expr", + /* 236 */ "nexprlist ::= expr", + /* 237 */ "paren_exprlist ::=", + /* 238 */ "paren_exprlist ::= LP exprlist RP", + /* 239 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", + /* 240 */ "uniqueflag ::= UNIQUE", + /* 241 */ "uniqueflag ::=", + /* 242 */ "eidlist_opt ::=", + /* 243 */ "eidlist_opt ::= LP eidlist RP", + /* 244 */ "eidlist ::= eidlist COMMA nm collate sortorder", + /* 245 */ "eidlist ::= nm collate sortorder", + /* 246 */ "collate ::=", + /* 247 */ "collate ::= COLLATE ID|STRING", + /* 248 */ "cmd ::= DROP INDEX ifexists fullname", + /* 249 */ "cmd ::= VACUUM vinto", + /* 250 */ "cmd ::= VACUUM nm vinto", + /* 251 */ "vinto ::= INTO expr", + /* 252 */ "vinto ::=", + /* 253 */ "cmd ::= PRAGMA nm dbnm", + /* 254 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 255 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 256 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 257 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 258 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 259 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 260 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 261 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 262 */ "trigger_time ::= BEFORE|AFTER", + /* 263 */ "trigger_time ::= INSTEAD OF", + /* 264 */ "trigger_time ::=", + /* 265 */ "trigger_event ::= DELETE|INSERT", + /* 266 */ "trigger_event ::= UPDATE", + /* 267 */ "trigger_event ::= UPDATE OF idlist", + /* 268 */ "when_clause ::=", + /* 269 */ "when_clause ::= WHEN expr", + /* 270 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 271 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 272 */ "trnm ::= nm DOT nm", + /* 273 */ "tridxby ::= INDEXED BY nm", + /* 274 */ "tridxby ::= NOT INDEXED", + /* 275 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt", + /* 276 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", + /* 277 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", + /* 278 */ "trigger_cmd ::= scanpt select scanpt", + /* 279 */ "expr ::= RAISE LP IGNORE RP", + /* 280 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 281 */ "raisetype ::= ROLLBACK", + /* 282 */ "raisetype ::= ABORT", + /* 283 */ "raisetype ::= FAIL", + /* 284 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 285 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 286 */ "cmd ::= DETACH database_kw_opt expr", + /* 287 */ "key_opt ::=", + /* 288 */ "key_opt ::= KEY expr", + /* 289 */ "cmd ::= REINDEX", + /* 290 */ "cmd ::= REINDEX nm dbnm", + /* 291 */ "cmd ::= ANALYZE", + /* 292 */ "cmd ::= ANALYZE nm dbnm", + /* 293 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 294 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", + /* 295 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm", + /* 296 */ "add_column_fullname ::= fullname", + /* 297 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", + /* 298 */ "cmd ::= create_vtab", + /* 299 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 300 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 301 */ "vtabarg ::=", + /* 302 */ "vtabargtoken ::= ANY", + /* 303 */ "vtabargtoken ::= lp anylist RP", + /* 304 */ "lp ::= LP", + /* 305 */ "with ::= WITH wqlist", + /* 306 */ "with ::= WITH RECURSIVE wqlist", + /* 307 */ "wqas ::= AS", + /* 308 */ "wqas ::= AS MATERIALIZED", + /* 309 */ "wqas ::= AS NOT MATERIALIZED", + /* 310 */ "wqitem ::= withnm eidlist_opt wqas LP select RP", + /* 311 */ "withnm ::= nm", + /* 312 */ "wqlist ::= wqitem", + /* 313 */ "wqlist ::= wqlist COMMA wqitem", + /* 314 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", + /* 315 */ "windowdefn ::= nm AS LP window RP", + /* 316 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt", + /* 317 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt", + /* 318 */ "window ::= ORDER BY sortlist frame_opt", + /* 319 */ "window ::= nm ORDER BY sortlist frame_opt", + /* 320 */ "window ::= nm frame_opt", + /* 321 */ "frame_opt ::=", + /* 322 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt", + /* 323 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt", + /* 324 */ "range_or_rows ::= RANGE|ROWS|GROUPS", + /* 325 */ "frame_bound_s ::= frame_bound", + /* 326 */ "frame_bound_s ::= UNBOUNDED PRECEDING", + /* 327 */ "frame_bound_e ::= frame_bound", + /* 328 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", + /* 329 */ "frame_bound ::= expr PRECEDING|FOLLOWING", + /* 330 */ "frame_bound ::= CURRENT ROW", + /* 331 */ "frame_exclude_opt ::=", + /* 332 */ "frame_exclude_opt ::= EXCLUDE frame_exclude", + /* 333 */ "frame_exclude ::= NO OTHERS", + /* 334 */ "frame_exclude ::= CURRENT ROW", + /* 335 */ "frame_exclude ::= GROUP|TIES", + /* 336 */ "window_clause ::= WINDOW windowdefn_list", + /* 337 */ "filter_over ::= filter_clause over_clause", + /* 338 */ "filter_over ::= over_clause", + /* 339 */ "filter_over ::= filter_clause", + /* 340 */ "over_clause ::= OVER LP window RP", + /* 341 */ "over_clause ::= OVER nm", + /* 342 */ "filter_clause ::= FILTER LP WHERE expr RP", + /* 343 */ "term ::= QNUMBER", + /* 344 */ "input ::= cmdlist", + /* 345 */ "cmdlist ::= cmdlist ecmd", + /* 346 */ "cmdlist ::= ecmd", + /* 347 */ "ecmd ::= SEMI", + /* 348 */ "ecmd ::= cmdx SEMI", + /* 349 */ "ecmd ::= explain cmdx SEMI", + /* 350 */ "trans_opt ::=", + /* 351 */ "trans_opt ::= TRANSACTION", + /* 352 */ "trans_opt ::= TRANSACTION nm", + /* 353 */ "savepoint_opt ::= SAVEPOINT", + /* 354 */ "savepoint_opt ::=", + /* 355 */ "cmd ::= create_table create_table_args", + /* 356 */ "table_option_set ::= table_option", + /* 357 */ "columnlist ::= columnlist COMMA columnname carglist", + /* 358 */ "columnlist ::= columnname carglist", + /* 359 */ "nm ::= ID|INDEXED|JOIN_KW", + /* 360 */ "nm ::= STRING", + /* 361 */ "typetoken ::= typename", + /* 362 */ "typename ::= ID|STRING", + /* 363 */ "signed ::= plus_num", + /* 364 */ "signed ::= minus_num", + /* 365 */ "carglist ::= carglist ccons", + /* 366 */ "carglist ::=", + /* 367 */ "ccons ::= NULL onconf", + /* 368 */ "ccons ::= GENERATED ALWAYS AS generated", + /* 369 */ "ccons ::= AS generated", + /* 370 */ "conslist_opt ::= COMMA conslist", + /* 371 */ "conslist ::= conslist tconscomma tcons", + /* 372 */ "conslist ::= tcons", + /* 373 */ "tconscomma ::=", + /* 374 */ "defer_subclause_opt ::= defer_subclause", + /* 375 */ "resolvetype ::= raisetype", + /* 376 */ "selectnowith ::= oneselect", + /* 377 */ "oneselect ::= values", + /* 378 */ "sclp ::= selcollist COMMA", + /* 379 */ "as ::= ID|STRING", + /* 380 */ "indexed_opt ::= indexed_by", + /* 381 */ "returning ::=", + /* 382 */ "expr ::= term", + /* 383 */ "likeop ::= LIKE_KW|MATCH", + /* 384 */ "case_operand ::= expr", + /* 385 */ "exprlist ::= nexprlist", + /* 386 */ "nmnum ::= plus_num", + /* 387 */ "nmnum ::= nm", + /* 388 */ "nmnum ::= ON", + /* 389 */ "nmnum ::= DELETE", + /* 390 */ "nmnum ::= DEFAULT", + /* 391 */ "plus_num ::= INTEGER|FLOAT", + /* 392 */ "foreach_clause ::=", + /* 393 */ "foreach_clause ::= FOR EACH ROW", + /* 394 */ "trnm ::= nm", + /* 395 */ "tridxby ::=", + /* 396 */ "database_kw_opt ::= DATABASE", + /* 397 */ "database_kw_opt ::=", + /* 398 */ "kwcolumn_opt ::=", + /* 399 */ "kwcolumn_opt ::= COLUMNKW", + /* 400 */ "vtabarglist ::= vtabarg", + /* 401 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 402 */ "vtabarg ::= vtabarg vtabargtoken", + /* 403 */ "anylist ::=", + /* 404 */ "anylist ::= anylist LP anylist RP", + /* 405 */ "anylist ::= anylist ANY", + /* 406 */ "with ::=", + /* 407 */ "windowdefn_list ::= windowdefn", + /* 408 */ "window ::= frame_opt", }; #endif /* NDEBUG */ -#if YYSTACKDEPTH<=0 +#if YYGROWABLESTACK /* ** Try to increase the size of the parser stack. Return the number ** of errors. Return 0 on success. */ static int yyGrowStack(yyParser *p){ + int oldSize = 1 + (int)(p->yystackEnd - p->yystack); int newSize; int idx; yyStackEntry *pNew; - newSize = p->yystksz*2 + 100; - idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; - if( p->yystack==&p->yystk0 ){ - pNew = malloc(newSize*sizeof(pNew[0])); - if( pNew ) pNew[0] = p->yystk0; + newSize = oldSize*2 + 100; + idx = (int)(p->yytos - p->yystack); + if( p->yystack==p->yystk0 ){ + pNew = YYREALLOC(0, newSize*sizeof(pNew[0])); + if( pNew==0 ) return 1; + memcpy(pNew, p->yystack, oldSize*sizeof(pNew[0])); }else{ - pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); + pNew = YYREALLOC(p->yystack, newSize*sizeof(pNew[0])); + if( pNew==0 ) return 1; } - if( pNew ){ - p->yystack = pNew; - p->yytos = &p->yystack[idx]; + p->yystack = pNew; + p->yytos = &p->yystack[idx]; #ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", - yyTracePrompt, p->yystksz, newSize); - } -#endif - p->yystksz = newSize; + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", + yyTracePrompt, oldSize, newSize); } - return pNew==0; +#endif + p->yystackEnd = &p->yystack[newSize-1]; + return 0; } +#endif /* YYGROWABLESTACK */ + +#if !YYGROWABLESTACK +/* For builds that do no have a growable stack, yyGrowStack always +** returns an error. +*/ +# define yyGrowStack(X) 1 #endif /* Datatype of the argument to the memory allocated passed as the @@ -171498,24 +174798,14 @@ SQLITE_PRIVATE void sqlite3ParserInit(void *yypRawParser sqlite3ParserCTX_PDECL) #ifdef YYTRACKMAXSTACKDEPTH yypParser->yyhwm = 0; #endif -#if YYSTACKDEPTH<=0 - yypParser->yytos = NULL; - yypParser->yystack = NULL; - yypParser->yystksz = 0; - if( yyGrowStack(yypParser) ){ - yypParser->yystack = &yypParser->yystk0; - yypParser->yystksz = 1; - } -#endif + yypParser->yystack = yypParser->yystk0; + yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yypParser->yytos = yypParser->yystack; yypParser->yystack[0].stateno = 0; yypParser->yystack[0].major = 0; -#if YYSTACKDEPTH>0 - yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; -#endif } #ifndef sqlite3Parser_ENGINEALWAYSONSTACK @@ -171569,97 +174859,98 @@ static void yy_destructor( ** inside the C code. */ /********* Begin destructor definitions ***************************************/ - case 204: /* select */ - case 239: /* selectnowith */ - case 240: /* oneselect */ - case 252: /* values */ + case 205: /* select */ + case 240: /* selectnowith */ + case 241: /* oneselect */ + case 253: /* values */ + case 255: /* mvalues */ { -sqlite3SelectDelete(pParse->db, (yypminor->yy47)); -} - break; - case 216: /* term */ - case 217: /* expr */ - case 246: /* where_opt */ - case 248: /* having_opt */ - case 267: /* where_opt_ret */ - case 278: /* case_operand */ - case 280: /* case_else */ - case 283: /* vinto */ - case 290: /* when_clause */ - case 295: /* key_opt */ - case 311: /* filter_clause */ +sqlite3SelectDelete(pParse->db, (yypminor->yy555)); +} + break; + case 217: /* term */ + case 218: /* expr */ + case 247: /* where_opt */ + case 249: /* having_opt */ + case 269: /* where_opt_ret */ + case 280: /* case_operand */ + case 282: /* case_else */ + case 285: /* vinto */ + case 292: /* when_clause */ + case 297: /* key_opt */ + case 314: /* filter_clause */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy528)); -} - break; - case 221: /* eidlist_opt */ - case 231: /* sortlist */ - case 232: /* eidlist */ - case 244: /* selcollist */ - case 247: /* groupby_opt */ - case 249: /* orderby_opt */ - case 253: /* nexprlist */ - case 254: /* sclp */ - case 261: /* exprlist */ - case 268: /* setlist */ - case 277: /* paren_exprlist */ - case 279: /* case_exprlist */ - case 310: /* part_opt */ +sqlite3ExprDelete(pParse->db, (yypminor->yy454)); +} + break; + case 222: /* eidlist_opt */ + case 232: /* sortlist */ + case 233: /* eidlist */ + case 245: /* selcollist */ + case 248: /* groupby_opt */ + case 250: /* orderby_opt */ + case 254: /* nexprlist */ + case 256: /* sclp */ + case 263: /* exprlist */ + case 270: /* setlist */ + case 279: /* paren_exprlist */ + case 281: /* case_exprlist */ + case 313: /* part_opt */ { -sqlite3ExprListDelete(pParse->db, (yypminor->yy322)); +sqlite3ExprListDelete(pParse->db, (yypminor->yy14)); } break; - case 238: /* fullname */ - case 245: /* from */ - case 256: /* seltablist */ - case 257: /* stl_prefix */ - case 262: /* xfullname */ + case 239: /* fullname */ + case 246: /* from */ + case 258: /* seltablist */ + case 259: /* stl_prefix */ + case 264: /* xfullname */ { -sqlite3SrcListDelete(pParse->db, (yypminor->yy131)); +sqlite3SrcListDelete(pParse->db, (yypminor->yy203)); } break; - case 241: /* wqlist */ + case 242: /* wqlist */ { -sqlite3WithDelete(pParse->db, (yypminor->yy521)); +sqlite3WithDelete(pParse->db, (yypminor->yy59)); } break; - case 251: /* window_clause */ - case 306: /* windowdefn_list */ + case 252: /* window_clause */ + case 309: /* windowdefn_list */ { -sqlite3WindowListDelete(pParse->db, (yypminor->yy41)); +sqlite3WindowListDelete(pParse->db, (yypminor->yy211)); } break; - case 263: /* idlist */ - case 270: /* idlist_opt */ + case 265: /* idlist */ + case 272: /* idlist_opt */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy254)); +sqlite3IdListDelete(pParse->db, (yypminor->yy132)); } break; - case 273: /* filter_over */ - case 307: /* windowdefn */ - case 308: /* window */ - case 309: /* frame_opt */ - case 312: /* over_clause */ + case 275: /* filter_over */ + case 310: /* windowdefn */ + case 311: /* window */ + case 312: /* frame_opt */ + case 315: /* over_clause */ { -sqlite3WindowDelete(pParse->db, (yypminor->yy41)); +sqlite3WindowDelete(pParse->db, (yypminor->yy211)); } break; - case 286: /* trigger_cmd_list */ - case 291: /* trigger_cmd */ + case 288: /* trigger_cmd_list */ + case 293: /* trigger_cmd */ { -sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy33)); +sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy427)); } break; - case 288: /* trigger_event */ + case 290: /* trigger_event */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy180).b); +sqlite3IdListDelete(pParse->db, (yypminor->yy286).b); } break; - case 314: /* frame_bound */ - case 315: /* frame_bound_s */ - case 316: /* frame_bound_e */ + case 317: /* frame_bound */ + case 318: /* frame_bound_s */ + case 319: /* frame_bound_e */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy595).pExpr); +sqlite3ExprDelete(pParse->db, (yypminor->yy509).pExpr); } break; /********* End destructor definitions *****************************************/ @@ -171693,9 +174984,26 @@ static void yy_pop_parser_stack(yyParser *pParser){ */ SQLITE_PRIVATE void sqlite3ParserFinalize(void *p){ yyParser *pParser = (yyParser*)p; - while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); -#if YYSTACKDEPTH<=0 - if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); + + /* In-lined version of calling yy_pop_parser_stack() for each + ** element left in the stack */ + yyStackEntry *yytos = pParser->yytos; + while( yytos>pParser->yystack ){ +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sPopping %s\n", + yyTracePrompt, + yyTokenName[yytos->major]); + } +#endif + if( yytos->major>=YY_MIN_DSTRCTR ){ + yy_destructor(pParser, yytos->major, &yytos->minor); + } + yytos--; + } + +#if YYGROWABLESTACK + if( pParser->yystack!=pParser->yystk0 ) YYFREE(pParser->yystack); #endif } @@ -171878,7 +175186,7 @@ static void yyStackOverflow(yyParser *yypParser){ ** stack every overflows */ /******** Begin %stack_overflow code ******************************************/ - sqlite3ErrorMsg(pParse, "parser stack overflow"); + sqlite3OomFault(pParse->db); /******** End %stack_overflow code ********************************************/ sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument var */ sqlite3ParserCTX_STORE @@ -171922,25 +175230,19 @@ static void yy_shift( assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); } #endif -#if YYSTACKDEPTH>0 - if( yypParser->yytos>yypParser->yystackEnd ){ - yypParser->yytos--; - yyStackOverflow(yypParser); - return; - } -#else - if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ + yytos = yypParser->yytos; + if( yytos>yypParser->yystackEnd ){ if( yyGrowStack(yypParser) ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } + yytos = yypParser->yytos; + assert( yytos <= yypParser->yystackEnd ); } -#endif if( yyNewState > YY_MAX_SHIFT ){ yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; } - yytos = yypParser->yytos; yytos->stateno = yyNewState; yytos->major = yyMajor; yytos->minor.yy0 = yyMinor; @@ -171950,409 +175252,415 @@ static void yy_shift( /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side ** of that rule */ static const YYCODETYPE yyRuleInfoLhs[] = { - 189, /* (0) explain ::= EXPLAIN */ - 189, /* (1) explain ::= EXPLAIN QUERY PLAN */ - 188, /* (2) cmdx ::= cmd */ - 190, /* (3) cmd ::= BEGIN transtype trans_opt */ - 191, /* (4) transtype ::= */ - 191, /* (5) transtype ::= DEFERRED */ - 191, /* (6) transtype ::= IMMEDIATE */ - 191, /* (7) transtype ::= EXCLUSIVE */ - 190, /* (8) cmd ::= COMMIT|END trans_opt */ - 190, /* (9) cmd ::= ROLLBACK trans_opt */ - 190, /* (10) cmd ::= SAVEPOINT nm */ - 190, /* (11) cmd ::= RELEASE savepoint_opt nm */ - 190, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ - 195, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ - 197, /* (14) createkw ::= CREATE */ - 199, /* (15) ifnotexists ::= */ - 199, /* (16) ifnotexists ::= IF NOT EXISTS */ - 198, /* (17) temp ::= TEMP */ - 198, /* (18) temp ::= */ - 196, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ - 196, /* (20) create_table_args ::= AS select */ - 203, /* (21) table_option_set ::= */ - 203, /* (22) table_option_set ::= table_option_set COMMA table_option */ - 205, /* (23) table_option ::= WITHOUT nm */ - 205, /* (24) table_option ::= nm */ - 206, /* (25) columnname ::= nm typetoken */ - 208, /* (26) typetoken ::= */ - 208, /* (27) typetoken ::= typename LP signed RP */ - 208, /* (28) typetoken ::= typename LP signed COMMA signed RP */ - 209, /* (29) typename ::= typename ID|STRING */ - 213, /* (30) scanpt ::= */ - 214, /* (31) scantok ::= */ - 215, /* (32) ccons ::= CONSTRAINT nm */ - 215, /* (33) ccons ::= DEFAULT scantok term */ - 215, /* (34) ccons ::= DEFAULT LP expr RP */ - 215, /* (35) ccons ::= DEFAULT PLUS scantok term */ - 215, /* (36) ccons ::= DEFAULT MINUS scantok term */ - 215, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ - 215, /* (38) ccons ::= NOT NULL onconf */ - 215, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ - 215, /* (40) ccons ::= UNIQUE onconf */ - 215, /* (41) ccons ::= CHECK LP expr RP */ - 215, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ - 215, /* (43) ccons ::= defer_subclause */ - 215, /* (44) ccons ::= COLLATE ID|STRING */ - 224, /* (45) generated ::= LP expr RP */ - 224, /* (46) generated ::= LP expr RP ID */ - 220, /* (47) autoinc ::= */ - 220, /* (48) autoinc ::= AUTOINCR */ - 222, /* (49) refargs ::= */ - 222, /* (50) refargs ::= refargs refarg */ - 225, /* (51) refarg ::= MATCH nm */ - 225, /* (52) refarg ::= ON INSERT refact */ - 225, /* (53) refarg ::= ON DELETE refact */ - 225, /* (54) refarg ::= ON UPDATE refact */ - 226, /* (55) refact ::= SET NULL */ - 226, /* (56) refact ::= SET DEFAULT */ - 226, /* (57) refact ::= CASCADE */ - 226, /* (58) refact ::= RESTRICT */ - 226, /* (59) refact ::= NO ACTION */ - 223, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ - 223, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ - 227, /* (62) init_deferred_pred_opt ::= */ - 227, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ - 227, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ - 202, /* (65) conslist_opt ::= */ - 229, /* (66) tconscomma ::= COMMA */ - 230, /* (67) tcons ::= CONSTRAINT nm */ - 230, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ - 230, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ - 230, /* (70) tcons ::= CHECK LP expr RP onconf */ - 230, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ - 233, /* (72) defer_subclause_opt ::= */ - 218, /* (73) onconf ::= */ - 218, /* (74) onconf ::= ON CONFLICT resolvetype */ - 234, /* (75) orconf ::= */ - 234, /* (76) orconf ::= OR resolvetype */ - 235, /* (77) resolvetype ::= IGNORE */ - 235, /* (78) resolvetype ::= REPLACE */ - 190, /* (79) cmd ::= DROP TABLE ifexists fullname */ - 237, /* (80) ifexists ::= IF EXISTS */ - 237, /* (81) ifexists ::= */ - 190, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ - 190, /* (83) cmd ::= DROP VIEW ifexists fullname */ - 190, /* (84) cmd ::= select */ - 204, /* (85) select ::= WITH wqlist selectnowith */ - 204, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ - 204, /* (87) select ::= selectnowith */ - 239, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ - 242, /* (89) multiselect_op ::= UNION */ - 242, /* (90) multiselect_op ::= UNION ALL */ - 242, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ - 240, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ - 240, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ - 252, /* (94) values ::= VALUES LP nexprlist RP */ - 252, /* (95) values ::= values COMMA LP nexprlist RP */ - 243, /* (96) distinct ::= DISTINCT */ - 243, /* (97) distinct ::= ALL */ - 243, /* (98) distinct ::= */ - 254, /* (99) sclp ::= */ - 244, /* (100) selcollist ::= sclp scanpt expr scanpt as */ - 244, /* (101) selcollist ::= sclp scanpt STAR */ - 244, /* (102) selcollist ::= sclp scanpt nm DOT STAR */ - 255, /* (103) as ::= AS nm */ - 255, /* (104) as ::= */ - 245, /* (105) from ::= */ - 245, /* (106) from ::= FROM seltablist */ - 257, /* (107) stl_prefix ::= seltablist joinop */ - 257, /* (108) stl_prefix ::= */ - 256, /* (109) seltablist ::= stl_prefix nm dbnm as on_using */ - 256, /* (110) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ - 256, /* (111) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ - 256, /* (112) seltablist ::= stl_prefix LP select RP as on_using */ - 256, /* (113) seltablist ::= stl_prefix LP seltablist RP as on_using */ - 200, /* (114) dbnm ::= */ - 200, /* (115) dbnm ::= DOT nm */ - 238, /* (116) fullname ::= nm */ - 238, /* (117) fullname ::= nm DOT nm */ - 262, /* (118) xfullname ::= nm */ - 262, /* (119) xfullname ::= nm DOT nm */ - 262, /* (120) xfullname ::= nm DOT nm AS nm */ - 262, /* (121) xfullname ::= nm AS nm */ - 258, /* (122) joinop ::= COMMA|JOIN */ - 258, /* (123) joinop ::= JOIN_KW JOIN */ - 258, /* (124) joinop ::= JOIN_KW nm JOIN */ - 258, /* (125) joinop ::= JOIN_KW nm nm JOIN */ - 259, /* (126) on_using ::= ON expr */ - 259, /* (127) on_using ::= USING LP idlist RP */ - 259, /* (128) on_using ::= */ - 264, /* (129) indexed_opt ::= */ - 260, /* (130) indexed_by ::= INDEXED BY nm */ - 260, /* (131) indexed_by ::= NOT INDEXED */ - 249, /* (132) orderby_opt ::= */ - 249, /* (133) orderby_opt ::= ORDER BY sortlist */ - 231, /* (134) sortlist ::= sortlist COMMA expr sortorder nulls */ - 231, /* (135) sortlist ::= expr sortorder nulls */ - 219, /* (136) sortorder ::= ASC */ - 219, /* (137) sortorder ::= DESC */ - 219, /* (138) sortorder ::= */ - 265, /* (139) nulls ::= NULLS FIRST */ - 265, /* (140) nulls ::= NULLS LAST */ - 265, /* (141) nulls ::= */ - 247, /* (142) groupby_opt ::= */ - 247, /* (143) groupby_opt ::= GROUP BY nexprlist */ - 248, /* (144) having_opt ::= */ - 248, /* (145) having_opt ::= HAVING expr */ - 250, /* (146) limit_opt ::= */ - 250, /* (147) limit_opt ::= LIMIT expr */ - 250, /* (148) limit_opt ::= LIMIT expr OFFSET expr */ - 250, /* (149) limit_opt ::= LIMIT expr COMMA expr */ - 190, /* (150) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ - 246, /* (151) where_opt ::= */ - 246, /* (152) where_opt ::= WHERE expr */ - 267, /* (153) where_opt_ret ::= */ - 267, /* (154) where_opt_ret ::= WHERE expr */ - 267, /* (155) where_opt_ret ::= RETURNING selcollist */ - 267, /* (156) where_opt_ret ::= WHERE expr RETURNING selcollist */ - 190, /* (157) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ - 268, /* (158) setlist ::= setlist COMMA nm EQ expr */ - 268, /* (159) setlist ::= setlist COMMA LP idlist RP EQ expr */ - 268, /* (160) setlist ::= nm EQ expr */ - 268, /* (161) setlist ::= LP idlist RP EQ expr */ - 190, /* (162) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ - 190, /* (163) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ - 271, /* (164) upsert ::= */ - 271, /* (165) upsert ::= RETURNING selcollist */ - 271, /* (166) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ - 271, /* (167) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ - 271, /* (168) upsert ::= ON CONFLICT DO NOTHING returning */ - 271, /* (169) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ - 272, /* (170) returning ::= RETURNING selcollist */ - 269, /* (171) insert_cmd ::= INSERT orconf */ - 269, /* (172) insert_cmd ::= REPLACE */ - 270, /* (173) idlist_opt ::= */ - 270, /* (174) idlist_opt ::= LP idlist RP */ - 263, /* (175) idlist ::= idlist COMMA nm */ - 263, /* (176) idlist ::= nm */ - 217, /* (177) expr ::= LP expr RP */ - 217, /* (178) expr ::= ID|INDEXED|JOIN_KW */ - 217, /* (179) expr ::= nm DOT nm */ - 217, /* (180) expr ::= nm DOT nm DOT nm */ - 216, /* (181) term ::= NULL|FLOAT|BLOB */ - 216, /* (182) term ::= STRING */ - 216, /* (183) term ::= INTEGER */ - 217, /* (184) expr ::= VARIABLE */ - 217, /* (185) expr ::= expr COLLATE ID|STRING */ - 217, /* (186) expr ::= CAST LP expr AS typetoken RP */ - 217, /* (187) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ - 217, /* (188) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ - 217, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ - 217, /* (190) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ - 216, /* (191) term ::= CTIME_KW */ - 217, /* (192) expr ::= LP nexprlist COMMA expr RP */ - 217, /* (193) expr ::= expr AND expr */ - 217, /* (194) expr ::= expr OR expr */ - 217, /* (195) expr ::= expr LT|GT|GE|LE expr */ - 217, /* (196) expr ::= expr EQ|NE expr */ - 217, /* (197) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ - 217, /* (198) expr ::= expr PLUS|MINUS expr */ - 217, /* (199) expr ::= expr STAR|SLASH|REM expr */ - 217, /* (200) expr ::= expr CONCAT expr */ - 274, /* (201) likeop ::= NOT LIKE_KW|MATCH */ - 217, /* (202) expr ::= expr likeop expr */ - 217, /* (203) expr ::= expr likeop expr ESCAPE expr */ - 217, /* (204) expr ::= expr ISNULL|NOTNULL */ - 217, /* (205) expr ::= expr NOT NULL */ - 217, /* (206) expr ::= expr IS expr */ - 217, /* (207) expr ::= expr IS NOT expr */ - 217, /* (208) expr ::= expr IS NOT DISTINCT FROM expr */ - 217, /* (209) expr ::= expr IS DISTINCT FROM expr */ - 217, /* (210) expr ::= NOT expr */ - 217, /* (211) expr ::= BITNOT expr */ - 217, /* (212) expr ::= PLUS|MINUS expr */ - 217, /* (213) expr ::= expr PTR expr */ - 275, /* (214) between_op ::= BETWEEN */ - 275, /* (215) between_op ::= NOT BETWEEN */ - 217, /* (216) expr ::= expr between_op expr AND expr */ - 276, /* (217) in_op ::= IN */ - 276, /* (218) in_op ::= NOT IN */ - 217, /* (219) expr ::= expr in_op LP exprlist RP */ - 217, /* (220) expr ::= LP select RP */ - 217, /* (221) expr ::= expr in_op LP select RP */ - 217, /* (222) expr ::= expr in_op nm dbnm paren_exprlist */ - 217, /* (223) expr ::= EXISTS LP select RP */ - 217, /* (224) expr ::= CASE case_operand case_exprlist case_else END */ - 279, /* (225) case_exprlist ::= case_exprlist WHEN expr THEN expr */ - 279, /* (226) case_exprlist ::= WHEN expr THEN expr */ - 280, /* (227) case_else ::= ELSE expr */ - 280, /* (228) case_else ::= */ - 278, /* (229) case_operand ::= */ - 261, /* (230) exprlist ::= */ - 253, /* (231) nexprlist ::= nexprlist COMMA expr */ - 253, /* (232) nexprlist ::= expr */ - 277, /* (233) paren_exprlist ::= */ - 277, /* (234) paren_exprlist ::= LP exprlist RP */ - 190, /* (235) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ - 281, /* (236) uniqueflag ::= UNIQUE */ - 281, /* (237) uniqueflag ::= */ - 221, /* (238) eidlist_opt ::= */ - 221, /* (239) eidlist_opt ::= LP eidlist RP */ - 232, /* (240) eidlist ::= eidlist COMMA nm collate sortorder */ - 232, /* (241) eidlist ::= nm collate sortorder */ - 282, /* (242) collate ::= */ - 282, /* (243) collate ::= COLLATE ID|STRING */ - 190, /* (244) cmd ::= DROP INDEX ifexists fullname */ - 190, /* (245) cmd ::= VACUUM vinto */ - 190, /* (246) cmd ::= VACUUM nm vinto */ - 283, /* (247) vinto ::= INTO expr */ - 283, /* (248) vinto ::= */ - 190, /* (249) cmd ::= PRAGMA nm dbnm */ - 190, /* (250) cmd ::= PRAGMA nm dbnm EQ nmnum */ - 190, /* (251) cmd ::= PRAGMA nm dbnm LP nmnum RP */ - 190, /* (252) cmd ::= PRAGMA nm dbnm EQ minus_num */ - 190, /* (253) cmd ::= PRAGMA nm dbnm LP minus_num RP */ - 211, /* (254) plus_num ::= PLUS INTEGER|FLOAT */ - 212, /* (255) minus_num ::= MINUS INTEGER|FLOAT */ - 190, /* (256) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ - 285, /* (257) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ - 287, /* (258) trigger_time ::= BEFORE|AFTER */ - 287, /* (259) trigger_time ::= INSTEAD OF */ - 287, /* (260) trigger_time ::= */ - 288, /* (261) trigger_event ::= DELETE|INSERT */ - 288, /* (262) trigger_event ::= UPDATE */ - 288, /* (263) trigger_event ::= UPDATE OF idlist */ - 290, /* (264) when_clause ::= */ - 290, /* (265) when_clause ::= WHEN expr */ - 286, /* (266) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ - 286, /* (267) trigger_cmd_list ::= trigger_cmd SEMI */ - 292, /* (268) trnm ::= nm DOT nm */ - 293, /* (269) tridxby ::= INDEXED BY nm */ - 293, /* (270) tridxby ::= NOT INDEXED */ - 291, /* (271) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ - 291, /* (272) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ - 291, /* (273) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ - 291, /* (274) trigger_cmd ::= scanpt select scanpt */ - 217, /* (275) expr ::= RAISE LP IGNORE RP */ - 217, /* (276) expr ::= RAISE LP raisetype COMMA nm RP */ - 236, /* (277) raisetype ::= ROLLBACK */ - 236, /* (278) raisetype ::= ABORT */ - 236, /* (279) raisetype ::= FAIL */ - 190, /* (280) cmd ::= DROP TRIGGER ifexists fullname */ - 190, /* (281) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ - 190, /* (282) cmd ::= DETACH database_kw_opt expr */ - 295, /* (283) key_opt ::= */ - 295, /* (284) key_opt ::= KEY expr */ - 190, /* (285) cmd ::= REINDEX */ - 190, /* (286) cmd ::= REINDEX nm dbnm */ - 190, /* (287) cmd ::= ANALYZE */ - 190, /* (288) cmd ::= ANALYZE nm dbnm */ - 190, /* (289) cmd ::= ALTER TABLE fullname RENAME TO nm */ - 190, /* (290) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ - 190, /* (291) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ - 296, /* (292) add_column_fullname ::= fullname */ - 190, /* (293) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ - 190, /* (294) cmd ::= create_vtab */ - 190, /* (295) cmd ::= create_vtab LP vtabarglist RP */ - 298, /* (296) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ - 300, /* (297) vtabarg ::= */ - 301, /* (298) vtabargtoken ::= ANY */ - 301, /* (299) vtabargtoken ::= lp anylist RP */ - 302, /* (300) lp ::= LP */ - 266, /* (301) with ::= WITH wqlist */ - 266, /* (302) with ::= WITH RECURSIVE wqlist */ - 305, /* (303) wqas ::= AS */ - 305, /* (304) wqas ::= AS MATERIALIZED */ - 305, /* (305) wqas ::= AS NOT MATERIALIZED */ - 304, /* (306) wqitem ::= nm eidlist_opt wqas LP select RP */ - 241, /* (307) wqlist ::= wqitem */ - 241, /* (308) wqlist ::= wqlist COMMA wqitem */ - 306, /* (309) windowdefn_list ::= windowdefn_list COMMA windowdefn */ - 307, /* (310) windowdefn ::= nm AS LP window RP */ - 308, /* (311) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ - 308, /* (312) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ - 308, /* (313) window ::= ORDER BY sortlist frame_opt */ - 308, /* (314) window ::= nm ORDER BY sortlist frame_opt */ - 308, /* (315) window ::= nm frame_opt */ - 309, /* (316) frame_opt ::= */ - 309, /* (317) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ - 309, /* (318) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ - 313, /* (319) range_or_rows ::= RANGE|ROWS|GROUPS */ - 315, /* (320) frame_bound_s ::= frame_bound */ - 315, /* (321) frame_bound_s ::= UNBOUNDED PRECEDING */ - 316, /* (322) frame_bound_e ::= frame_bound */ - 316, /* (323) frame_bound_e ::= UNBOUNDED FOLLOWING */ - 314, /* (324) frame_bound ::= expr PRECEDING|FOLLOWING */ - 314, /* (325) frame_bound ::= CURRENT ROW */ - 317, /* (326) frame_exclude_opt ::= */ - 317, /* (327) frame_exclude_opt ::= EXCLUDE frame_exclude */ - 318, /* (328) frame_exclude ::= NO OTHERS */ - 318, /* (329) frame_exclude ::= CURRENT ROW */ - 318, /* (330) frame_exclude ::= GROUP|TIES */ - 251, /* (331) window_clause ::= WINDOW windowdefn_list */ - 273, /* (332) filter_over ::= filter_clause over_clause */ - 273, /* (333) filter_over ::= over_clause */ - 273, /* (334) filter_over ::= filter_clause */ - 312, /* (335) over_clause ::= OVER LP window RP */ - 312, /* (336) over_clause ::= OVER nm */ - 311, /* (337) filter_clause ::= FILTER LP WHERE expr RP */ - 185, /* (338) input ::= cmdlist */ - 186, /* (339) cmdlist ::= cmdlist ecmd */ - 186, /* (340) cmdlist ::= ecmd */ - 187, /* (341) ecmd ::= SEMI */ - 187, /* (342) ecmd ::= cmdx SEMI */ - 187, /* (343) ecmd ::= explain cmdx SEMI */ - 192, /* (344) trans_opt ::= */ - 192, /* (345) trans_opt ::= TRANSACTION */ - 192, /* (346) trans_opt ::= TRANSACTION nm */ - 194, /* (347) savepoint_opt ::= SAVEPOINT */ - 194, /* (348) savepoint_opt ::= */ - 190, /* (349) cmd ::= create_table create_table_args */ - 203, /* (350) table_option_set ::= table_option */ - 201, /* (351) columnlist ::= columnlist COMMA columnname carglist */ - 201, /* (352) columnlist ::= columnname carglist */ - 193, /* (353) nm ::= ID|INDEXED|JOIN_KW */ - 193, /* (354) nm ::= STRING */ - 208, /* (355) typetoken ::= typename */ - 209, /* (356) typename ::= ID|STRING */ - 210, /* (357) signed ::= plus_num */ - 210, /* (358) signed ::= minus_num */ - 207, /* (359) carglist ::= carglist ccons */ - 207, /* (360) carglist ::= */ - 215, /* (361) ccons ::= NULL onconf */ - 215, /* (362) ccons ::= GENERATED ALWAYS AS generated */ - 215, /* (363) ccons ::= AS generated */ - 202, /* (364) conslist_opt ::= COMMA conslist */ - 228, /* (365) conslist ::= conslist tconscomma tcons */ - 228, /* (366) conslist ::= tcons */ - 229, /* (367) tconscomma ::= */ - 233, /* (368) defer_subclause_opt ::= defer_subclause */ - 235, /* (369) resolvetype ::= raisetype */ - 239, /* (370) selectnowith ::= oneselect */ - 240, /* (371) oneselect ::= values */ - 254, /* (372) sclp ::= selcollist COMMA */ - 255, /* (373) as ::= ID|STRING */ - 264, /* (374) indexed_opt ::= indexed_by */ - 272, /* (375) returning ::= */ - 217, /* (376) expr ::= term */ - 274, /* (377) likeop ::= LIKE_KW|MATCH */ - 278, /* (378) case_operand ::= expr */ - 261, /* (379) exprlist ::= nexprlist */ - 284, /* (380) nmnum ::= plus_num */ - 284, /* (381) nmnum ::= nm */ - 284, /* (382) nmnum ::= ON */ - 284, /* (383) nmnum ::= DELETE */ - 284, /* (384) nmnum ::= DEFAULT */ - 211, /* (385) plus_num ::= INTEGER|FLOAT */ - 289, /* (386) foreach_clause ::= */ - 289, /* (387) foreach_clause ::= FOR EACH ROW */ - 292, /* (388) trnm ::= nm */ - 293, /* (389) tridxby ::= */ - 294, /* (390) database_kw_opt ::= DATABASE */ - 294, /* (391) database_kw_opt ::= */ - 297, /* (392) kwcolumn_opt ::= */ - 297, /* (393) kwcolumn_opt ::= COLUMNKW */ - 299, /* (394) vtabarglist ::= vtabarg */ - 299, /* (395) vtabarglist ::= vtabarglist COMMA vtabarg */ - 300, /* (396) vtabarg ::= vtabarg vtabargtoken */ - 303, /* (397) anylist ::= */ - 303, /* (398) anylist ::= anylist LP anylist RP */ - 303, /* (399) anylist ::= anylist ANY */ - 266, /* (400) with ::= */ - 306, /* (401) windowdefn_list ::= windowdefn */ - 308, /* (402) window ::= frame_opt */ + 190, /* (0) explain ::= EXPLAIN */ + 190, /* (1) explain ::= EXPLAIN QUERY PLAN */ + 189, /* (2) cmdx ::= cmd */ + 191, /* (3) cmd ::= BEGIN transtype trans_opt */ + 192, /* (4) transtype ::= */ + 192, /* (5) transtype ::= DEFERRED */ + 192, /* (6) transtype ::= IMMEDIATE */ + 192, /* (7) transtype ::= EXCLUSIVE */ + 191, /* (8) cmd ::= COMMIT|END trans_opt */ + 191, /* (9) cmd ::= ROLLBACK trans_opt */ + 191, /* (10) cmd ::= SAVEPOINT nm */ + 191, /* (11) cmd ::= RELEASE savepoint_opt nm */ + 191, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ + 196, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ + 198, /* (14) createkw ::= CREATE */ + 200, /* (15) ifnotexists ::= */ + 200, /* (16) ifnotexists ::= IF NOT EXISTS */ + 199, /* (17) temp ::= TEMP */ + 199, /* (18) temp ::= */ + 197, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ + 197, /* (20) create_table_args ::= AS select */ + 204, /* (21) table_option_set ::= */ + 204, /* (22) table_option_set ::= table_option_set COMMA table_option */ + 206, /* (23) table_option ::= WITHOUT nm */ + 206, /* (24) table_option ::= nm */ + 207, /* (25) columnname ::= nm typetoken */ + 209, /* (26) typetoken ::= */ + 209, /* (27) typetoken ::= typename LP signed RP */ + 209, /* (28) typetoken ::= typename LP signed COMMA signed RP */ + 210, /* (29) typename ::= typename ID|STRING */ + 214, /* (30) scanpt ::= */ + 215, /* (31) scantok ::= */ + 216, /* (32) ccons ::= CONSTRAINT nm */ + 216, /* (33) ccons ::= DEFAULT scantok term */ + 216, /* (34) ccons ::= DEFAULT LP expr RP */ + 216, /* (35) ccons ::= DEFAULT PLUS scantok term */ + 216, /* (36) ccons ::= DEFAULT MINUS scantok term */ + 216, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ + 216, /* (38) ccons ::= NOT NULL onconf */ + 216, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ + 216, /* (40) ccons ::= UNIQUE onconf */ + 216, /* (41) ccons ::= CHECK LP expr RP */ + 216, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ + 216, /* (43) ccons ::= defer_subclause */ + 216, /* (44) ccons ::= COLLATE ID|STRING */ + 225, /* (45) generated ::= LP expr RP */ + 225, /* (46) generated ::= LP expr RP ID */ + 221, /* (47) autoinc ::= */ + 221, /* (48) autoinc ::= AUTOINCR */ + 223, /* (49) refargs ::= */ + 223, /* (50) refargs ::= refargs refarg */ + 226, /* (51) refarg ::= MATCH nm */ + 226, /* (52) refarg ::= ON INSERT refact */ + 226, /* (53) refarg ::= ON DELETE refact */ + 226, /* (54) refarg ::= ON UPDATE refact */ + 227, /* (55) refact ::= SET NULL */ + 227, /* (56) refact ::= SET DEFAULT */ + 227, /* (57) refact ::= CASCADE */ + 227, /* (58) refact ::= RESTRICT */ + 227, /* (59) refact ::= NO ACTION */ + 224, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ + 224, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + 228, /* (62) init_deferred_pred_opt ::= */ + 228, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ + 228, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ + 203, /* (65) conslist_opt ::= */ + 230, /* (66) tconscomma ::= COMMA */ + 231, /* (67) tcons ::= CONSTRAINT nm */ + 231, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ + 231, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ + 231, /* (70) tcons ::= CHECK LP expr RP onconf */ + 231, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + 234, /* (72) defer_subclause_opt ::= */ + 219, /* (73) onconf ::= */ + 219, /* (74) onconf ::= ON CONFLICT resolvetype */ + 235, /* (75) orconf ::= */ + 235, /* (76) orconf ::= OR resolvetype */ + 236, /* (77) resolvetype ::= IGNORE */ + 236, /* (78) resolvetype ::= REPLACE */ + 191, /* (79) cmd ::= DROP TABLE ifexists fullname */ + 238, /* (80) ifexists ::= IF EXISTS */ + 238, /* (81) ifexists ::= */ + 191, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + 191, /* (83) cmd ::= DROP VIEW ifexists fullname */ + 191, /* (84) cmd ::= select */ + 205, /* (85) select ::= WITH wqlist selectnowith */ + 205, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ + 205, /* (87) select ::= selectnowith */ + 240, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ + 243, /* (89) multiselect_op ::= UNION */ + 243, /* (90) multiselect_op ::= UNION ALL */ + 243, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ + 241, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + 241, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ + 253, /* (94) values ::= VALUES LP nexprlist RP */ + 241, /* (95) oneselect ::= mvalues */ + 255, /* (96) mvalues ::= values COMMA LP nexprlist RP */ + 255, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */ + 244, /* (98) distinct ::= DISTINCT */ + 244, /* (99) distinct ::= ALL */ + 244, /* (100) distinct ::= */ + 256, /* (101) sclp ::= */ + 245, /* (102) selcollist ::= sclp scanpt expr scanpt as */ + 245, /* (103) selcollist ::= sclp scanpt STAR */ + 245, /* (104) selcollist ::= sclp scanpt nm DOT STAR */ + 257, /* (105) as ::= AS nm */ + 257, /* (106) as ::= */ + 246, /* (107) from ::= */ + 246, /* (108) from ::= FROM seltablist */ + 259, /* (109) stl_prefix ::= seltablist joinop */ + 259, /* (110) stl_prefix ::= */ + 258, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */ + 258, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ + 258, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ + 258, /* (114) seltablist ::= stl_prefix LP select RP as on_using */ + 258, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */ + 201, /* (116) dbnm ::= */ + 201, /* (117) dbnm ::= DOT nm */ + 239, /* (118) fullname ::= nm */ + 239, /* (119) fullname ::= nm DOT nm */ + 264, /* (120) xfullname ::= nm */ + 264, /* (121) xfullname ::= nm DOT nm */ + 264, /* (122) xfullname ::= nm DOT nm AS nm */ + 264, /* (123) xfullname ::= nm AS nm */ + 260, /* (124) joinop ::= COMMA|JOIN */ + 260, /* (125) joinop ::= JOIN_KW JOIN */ + 260, /* (126) joinop ::= JOIN_KW nm JOIN */ + 260, /* (127) joinop ::= JOIN_KW nm nm JOIN */ + 261, /* (128) on_using ::= ON expr */ + 261, /* (129) on_using ::= USING LP idlist RP */ + 261, /* (130) on_using ::= */ + 266, /* (131) indexed_opt ::= */ + 262, /* (132) indexed_by ::= INDEXED BY nm */ + 262, /* (133) indexed_by ::= NOT INDEXED */ + 250, /* (134) orderby_opt ::= */ + 250, /* (135) orderby_opt ::= ORDER BY sortlist */ + 232, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */ + 232, /* (137) sortlist ::= expr sortorder nulls */ + 220, /* (138) sortorder ::= ASC */ + 220, /* (139) sortorder ::= DESC */ + 220, /* (140) sortorder ::= */ + 267, /* (141) nulls ::= NULLS FIRST */ + 267, /* (142) nulls ::= NULLS LAST */ + 267, /* (143) nulls ::= */ + 248, /* (144) groupby_opt ::= */ + 248, /* (145) groupby_opt ::= GROUP BY nexprlist */ + 249, /* (146) having_opt ::= */ + 249, /* (147) having_opt ::= HAVING expr */ + 251, /* (148) limit_opt ::= */ + 251, /* (149) limit_opt ::= LIMIT expr */ + 251, /* (150) limit_opt ::= LIMIT expr OFFSET expr */ + 251, /* (151) limit_opt ::= LIMIT expr COMMA expr */ + 191, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ + 247, /* (153) where_opt ::= */ + 247, /* (154) where_opt ::= WHERE expr */ + 269, /* (155) where_opt_ret ::= */ + 269, /* (156) where_opt_ret ::= WHERE expr */ + 269, /* (157) where_opt_ret ::= RETURNING selcollist */ + 269, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */ + 191, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ + 270, /* (160) setlist ::= setlist COMMA nm EQ expr */ + 270, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */ + 270, /* (162) setlist ::= nm EQ expr */ + 270, /* (163) setlist ::= LP idlist RP EQ expr */ + 191, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + 191, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ + 273, /* (166) upsert ::= */ + 273, /* (167) upsert ::= RETURNING selcollist */ + 273, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ + 273, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ + 273, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */ + 273, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ + 274, /* (172) returning ::= RETURNING selcollist */ + 271, /* (173) insert_cmd ::= INSERT orconf */ + 271, /* (174) insert_cmd ::= REPLACE */ + 272, /* (175) idlist_opt ::= */ + 272, /* (176) idlist_opt ::= LP idlist RP */ + 265, /* (177) idlist ::= idlist COMMA nm */ + 265, /* (178) idlist ::= nm */ + 218, /* (179) expr ::= LP expr RP */ + 218, /* (180) expr ::= ID|INDEXED|JOIN_KW */ + 218, /* (181) expr ::= nm DOT nm */ + 218, /* (182) expr ::= nm DOT nm DOT nm */ + 217, /* (183) term ::= NULL|FLOAT|BLOB */ + 217, /* (184) term ::= STRING */ + 217, /* (185) term ::= INTEGER */ + 218, /* (186) expr ::= VARIABLE */ + 218, /* (187) expr ::= expr COLLATE ID|STRING */ + 218, /* (188) expr ::= CAST LP expr AS typetoken RP */ + 218, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + 218, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ + 218, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + 218, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + 218, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ + 218, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + 217, /* (195) term ::= CTIME_KW */ + 218, /* (196) expr ::= LP nexprlist COMMA expr RP */ + 218, /* (197) expr ::= expr AND expr */ + 218, /* (198) expr ::= expr OR expr */ + 218, /* (199) expr ::= expr LT|GT|GE|LE expr */ + 218, /* (200) expr ::= expr EQ|NE expr */ + 218, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + 218, /* (202) expr ::= expr PLUS|MINUS expr */ + 218, /* (203) expr ::= expr STAR|SLASH|REM expr */ + 218, /* (204) expr ::= expr CONCAT expr */ + 276, /* (205) likeop ::= NOT LIKE_KW|MATCH */ + 218, /* (206) expr ::= expr likeop expr */ + 218, /* (207) expr ::= expr likeop expr ESCAPE expr */ + 218, /* (208) expr ::= expr ISNULL|NOTNULL */ + 218, /* (209) expr ::= expr NOT NULL */ + 218, /* (210) expr ::= expr IS expr */ + 218, /* (211) expr ::= expr IS NOT expr */ + 218, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */ + 218, /* (213) expr ::= expr IS DISTINCT FROM expr */ + 218, /* (214) expr ::= NOT expr */ + 218, /* (215) expr ::= BITNOT expr */ + 218, /* (216) expr ::= PLUS|MINUS expr */ + 218, /* (217) expr ::= expr PTR expr */ + 277, /* (218) between_op ::= BETWEEN */ + 277, /* (219) between_op ::= NOT BETWEEN */ + 218, /* (220) expr ::= expr between_op expr AND expr */ + 278, /* (221) in_op ::= IN */ + 278, /* (222) in_op ::= NOT IN */ + 218, /* (223) expr ::= expr in_op LP exprlist RP */ + 218, /* (224) expr ::= LP select RP */ + 218, /* (225) expr ::= expr in_op LP select RP */ + 218, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */ + 218, /* (227) expr ::= EXISTS LP select RP */ + 218, /* (228) expr ::= CASE case_operand case_exprlist case_else END */ + 281, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + 281, /* (230) case_exprlist ::= WHEN expr THEN expr */ + 282, /* (231) case_else ::= ELSE expr */ + 282, /* (232) case_else ::= */ + 280, /* (233) case_operand ::= */ + 263, /* (234) exprlist ::= */ + 254, /* (235) nexprlist ::= nexprlist COMMA expr */ + 254, /* (236) nexprlist ::= expr */ + 279, /* (237) paren_exprlist ::= */ + 279, /* (238) paren_exprlist ::= LP exprlist RP */ + 191, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + 283, /* (240) uniqueflag ::= UNIQUE */ + 283, /* (241) uniqueflag ::= */ + 222, /* (242) eidlist_opt ::= */ + 222, /* (243) eidlist_opt ::= LP eidlist RP */ + 233, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */ + 233, /* (245) eidlist ::= nm collate sortorder */ + 284, /* (246) collate ::= */ + 284, /* (247) collate ::= COLLATE ID|STRING */ + 191, /* (248) cmd ::= DROP INDEX ifexists fullname */ + 191, /* (249) cmd ::= VACUUM vinto */ + 191, /* (250) cmd ::= VACUUM nm vinto */ + 285, /* (251) vinto ::= INTO expr */ + 285, /* (252) vinto ::= */ + 191, /* (253) cmd ::= PRAGMA nm dbnm */ + 191, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */ + 191, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + 191, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */ + 191, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + 212, /* (258) plus_num ::= PLUS INTEGER|FLOAT */ + 213, /* (259) minus_num ::= MINUS INTEGER|FLOAT */ + 191, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + 287, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + 289, /* (262) trigger_time ::= BEFORE|AFTER */ + 289, /* (263) trigger_time ::= INSTEAD OF */ + 289, /* (264) trigger_time ::= */ + 290, /* (265) trigger_event ::= DELETE|INSERT */ + 290, /* (266) trigger_event ::= UPDATE */ + 290, /* (267) trigger_event ::= UPDATE OF idlist */ + 292, /* (268) when_clause ::= */ + 292, /* (269) when_clause ::= WHEN expr */ + 288, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + 288, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */ + 294, /* (272) trnm ::= nm DOT nm */ + 295, /* (273) tridxby ::= INDEXED BY nm */ + 295, /* (274) tridxby ::= NOT INDEXED */ + 293, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + 293, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + 293, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + 293, /* (278) trigger_cmd ::= scanpt select scanpt */ + 218, /* (279) expr ::= RAISE LP IGNORE RP */ + 218, /* (280) expr ::= RAISE LP raisetype COMMA nm RP */ + 237, /* (281) raisetype ::= ROLLBACK */ + 237, /* (282) raisetype ::= ABORT */ + 237, /* (283) raisetype ::= FAIL */ + 191, /* (284) cmd ::= DROP TRIGGER ifexists fullname */ + 191, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + 191, /* (286) cmd ::= DETACH database_kw_opt expr */ + 297, /* (287) key_opt ::= */ + 297, /* (288) key_opt ::= KEY expr */ + 191, /* (289) cmd ::= REINDEX */ + 191, /* (290) cmd ::= REINDEX nm dbnm */ + 191, /* (291) cmd ::= ANALYZE */ + 191, /* (292) cmd ::= ANALYZE nm dbnm */ + 191, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */ + 191, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + 191, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + 298, /* (296) add_column_fullname ::= fullname */ + 191, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + 191, /* (298) cmd ::= create_vtab */ + 191, /* (299) cmd ::= create_vtab LP vtabarglist RP */ + 300, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + 302, /* (301) vtabarg ::= */ + 303, /* (302) vtabargtoken ::= ANY */ + 303, /* (303) vtabargtoken ::= lp anylist RP */ + 304, /* (304) lp ::= LP */ + 268, /* (305) with ::= WITH wqlist */ + 268, /* (306) with ::= WITH RECURSIVE wqlist */ + 307, /* (307) wqas ::= AS */ + 307, /* (308) wqas ::= AS MATERIALIZED */ + 307, /* (309) wqas ::= AS NOT MATERIALIZED */ + 306, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */ + 308, /* (311) withnm ::= nm */ + 242, /* (312) wqlist ::= wqitem */ + 242, /* (313) wqlist ::= wqlist COMMA wqitem */ + 309, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + 310, /* (315) windowdefn ::= nm AS LP window RP */ + 311, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + 311, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + 311, /* (318) window ::= ORDER BY sortlist frame_opt */ + 311, /* (319) window ::= nm ORDER BY sortlist frame_opt */ + 311, /* (320) window ::= nm frame_opt */ + 312, /* (321) frame_opt ::= */ + 312, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + 312, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + 316, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */ + 318, /* (325) frame_bound_s ::= frame_bound */ + 318, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */ + 319, /* (327) frame_bound_e ::= frame_bound */ + 319, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */ + 317, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */ + 317, /* (330) frame_bound ::= CURRENT ROW */ + 320, /* (331) frame_exclude_opt ::= */ + 320, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */ + 321, /* (333) frame_exclude ::= NO OTHERS */ + 321, /* (334) frame_exclude ::= CURRENT ROW */ + 321, /* (335) frame_exclude ::= GROUP|TIES */ + 252, /* (336) window_clause ::= WINDOW windowdefn_list */ + 275, /* (337) filter_over ::= filter_clause over_clause */ + 275, /* (338) filter_over ::= over_clause */ + 275, /* (339) filter_over ::= filter_clause */ + 315, /* (340) over_clause ::= OVER LP window RP */ + 315, /* (341) over_clause ::= OVER nm */ + 314, /* (342) filter_clause ::= FILTER LP WHERE expr RP */ + 217, /* (343) term ::= QNUMBER */ + 186, /* (344) input ::= cmdlist */ + 187, /* (345) cmdlist ::= cmdlist ecmd */ + 187, /* (346) cmdlist ::= ecmd */ + 188, /* (347) ecmd ::= SEMI */ + 188, /* (348) ecmd ::= cmdx SEMI */ + 188, /* (349) ecmd ::= explain cmdx SEMI */ + 193, /* (350) trans_opt ::= */ + 193, /* (351) trans_opt ::= TRANSACTION */ + 193, /* (352) trans_opt ::= TRANSACTION nm */ + 195, /* (353) savepoint_opt ::= SAVEPOINT */ + 195, /* (354) savepoint_opt ::= */ + 191, /* (355) cmd ::= create_table create_table_args */ + 204, /* (356) table_option_set ::= table_option */ + 202, /* (357) columnlist ::= columnlist COMMA columnname carglist */ + 202, /* (358) columnlist ::= columnname carglist */ + 194, /* (359) nm ::= ID|INDEXED|JOIN_KW */ + 194, /* (360) nm ::= STRING */ + 209, /* (361) typetoken ::= typename */ + 210, /* (362) typename ::= ID|STRING */ + 211, /* (363) signed ::= plus_num */ + 211, /* (364) signed ::= minus_num */ + 208, /* (365) carglist ::= carglist ccons */ + 208, /* (366) carglist ::= */ + 216, /* (367) ccons ::= NULL onconf */ + 216, /* (368) ccons ::= GENERATED ALWAYS AS generated */ + 216, /* (369) ccons ::= AS generated */ + 203, /* (370) conslist_opt ::= COMMA conslist */ + 229, /* (371) conslist ::= conslist tconscomma tcons */ + 229, /* (372) conslist ::= tcons */ + 230, /* (373) tconscomma ::= */ + 234, /* (374) defer_subclause_opt ::= defer_subclause */ + 236, /* (375) resolvetype ::= raisetype */ + 240, /* (376) selectnowith ::= oneselect */ + 241, /* (377) oneselect ::= values */ + 256, /* (378) sclp ::= selcollist COMMA */ + 257, /* (379) as ::= ID|STRING */ + 266, /* (380) indexed_opt ::= indexed_by */ + 274, /* (381) returning ::= */ + 218, /* (382) expr ::= term */ + 276, /* (383) likeop ::= LIKE_KW|MATCH */ + 280, /* (384) case_operand ::= expr */ + 263, /* (385) exprlist ::= nexprlist */ + 286, /* (386) nmnum ::= plus_num */ + 286, /* (387) nmnum ::= nm */ + 286, /* (388) nmnum ::= ON */ + 286, /* (389) nmnum ::= DELETE */ + 286, /* (390) nmnum ::= DEFAULT */ + 212, /* (391) plus_num ::= INTEGER|FLOAT */ + 291, /* (392) foreach_clause ::= */ + 291, /* (393) foreach_clause ::= FOR EACH ROW */ + 294, /* (394) trnm ::= nm */ + 295, /* (395) tridxby ::= */ + 296, /* (396) database_kw_opt ::= DATABASE */ + 296, /* (397) database_kw_opt ::= */ + 299, /* (398) kwcolumn_opt ::= */ + 299, /* (399) kwcolumn_opt ::= COLUMNKW */ + 301, /* (400) vtabarglist ::= vtabarg */ + 301, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ + 302, /* (402) vtabarg ::= vtabarg vtabargtoken */ + 305, /* (403) anylist ::= */ + 305, /* (404) anylist ::= anylist LP anylist RP */ + 305, /* (405) anylist ::= anylist ANY */ + 268, /* (406) with ::= */ + 309, /* (407) windowdefn_list ::= windowdefn */ + 311, /* (408) window ::= frame_opt */ }; /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number @@ -172453,314 +175761,320 @@ static const signed char yyRuleInfoNRhs[] = { -9, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ -10, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ -4, /* (94) values ::= VALUES LP nexprlist RP */ - -5, /* (95) values ::= values COMMA LP nexprlist RP */ - -1, /* (96) distinct ::= DISTINCT */ - -1, /* (97) distinct ::= ALL */ - 0, /* (98) distinct ::= */ - 0, /* (99) sclp ::= */ - -5, /* (100) selcollist ::= sclp scanpt expr scanpt as */ - -3, /* (101) selcollist ::= sclp scanpt STAR */ - -5, /* (102) selcollist ::= sclp scanpt nm DOT STAR */ - -2, /* (103) as ::= AS nm */ - 0, /* (104) as ::= */ - 0, /* (105) from ::= */ - -2, /* (106) from ::= FROM seltablist */ - -2, /* (107) stl_prefix ::= seltablist joinop */ - 0, /* (108) stl_prefix ::= */ - -5, /* (109) seltablist ::= stl_prefix nm dbnm as on_using */ - -6, /* (110) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ - -8, /* (111) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ - -6, /* (112) seltablist ::= stl_prefix LP select RP as on_using */ - -6, /* (113) seltablist ::= stl_prefix LP seltablist RP as on_using */ - 0, /* (114) dbnm ::= */ - -2, /* (115) dbnm ::= DOT nm */ - -1, /* (116) fullname ::= nm */ - -3, /* (117) fullname ::= nm DOT nm */ - -1, /* (118) xfullname ::= nm */ - -3, /* (119) xfullname ::= nm DOT nm */ - -5, /* (120) xfullname ::= nm DOT nm AS nm */ - -3, /* (121) xfullname ::= nm AS nm */ - -1, /* (122) joinop ::= COMMA|JOIN */ - -2, /* (123) joinop ::= JOIN_KW JOIN */ - -3, /* (124) joinop ::= JOIN_KW nm JOIN */ - -4, /* (125) joinop ::= JOIN_KW nm nm JOIN */ - -2, /* (126) on_using ::= ON expr */ - -4, /* (127) on_using ::= USING LP idlist RP */ - 0, /* (128) on_using ::= */ - 0, /* (129) indexed_opt ::= */ - -3, /* (130) indexed_by ::= INDEXED BY nm */ - -2, /* (131) indexed_by ::= NOT INDEXED */ - 0, /* (132) orderby_opt ::= */ - -3, /* (133) orderby_opt ::= ORDER BY sortlist */ - -5, /* (134) sortlist ::= sortlist COMMA expr sortorder nulls */ - -3, /* (135) sortlist ::= expr sortorder nulls */ - -1, /* (136) sortorder ::= ASC */ - -1, /* (137) sortorder ::= DESC */ - 0, /* (138) sortorder ::= */ - -2, /* (139) nulls ::= NULLS FIRST */ - -2, /* (140) nulls ::= NULLS LAST */ - 0, /* (141) nulls ::= */ - 0, /* (142) groupby_opt ::= */ - -3, /* (143) groupby_opt ::= GROUP BY nexprlist */ - 0, /* (144) having_opt ::= */ - -2, /* (145) having_opt ::= HAVING expr */ - 0, /* (146) limit_opt ::= */ - -2, /* (147) limit_opt ::= LIMIT expr */ - -4, /* (148) limit_opt ::= LIMIT expr OFFSET expr */ - -4, /* (149) limit_opt ::= LIMIT expr COMMA expr */ - -6, /* (150) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ - 0, /* (151) where_opt ::= */ - -2, /* (152) where_opt ::= WHERE expr */ - 0, /* (153) where_opt_ret ::= */ - -2, /* (154) where_opt_ret ::= WHERE expr */ - -2, /* (155) where_opt_ret ::= RETURNING selcollist */ - -4, /* (156) where_opt_ret ::= WHERE expr RETURNING selcollist */ - -9, /* (157) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ - -5, /* (158) setlist ::= setlist COMMA nm EQ expr */ - -7, /* (159) setlist ::= setlist COMMA LP idlist RP EQ expr */ - -3, /* (160) setlist ::= nm EQ expr */ - -5, /* (161) setlist ::= LP idlist RP EQ expr */ - -7, /* (162) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ - -8, /* (163) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ - 0, /* (164) upsert ::= */ - -2, /* (165) upsert ::= RETURNING selcollist */ - -12, /* (166) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ - -9, /* (167) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ - -5, /* (168) upsert ::= ON CONFLICT DO NOTHING returning */ - -8, /* (169) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ - -2, /* (170) returning ::= RETURNING selcollist */ - -2, /* (171) insert_cmd ::= INSERT orconf */ - -1, /* (172) insert_cmd ::= REPLACE */ - 0, /* (173) idlist_opt ::= */ - -3, /* (174) idlist_opt ::= LP idlist RP */ - -3, /* (175) idlist ::= idlist COMMA nm */ - -1, /* (176) idlist ::= nm */ - -3, /* (177) expr ::= LP expr RP */ - -1, /* (178) expr ::= ID|INDEXED|JOIN_KW */ - -3, /* (179) expr ::= nm DOT nm */ - -5, /* (180) expr ::= nm DOT nm DOT nm */ - -1, /* (181) term ::= NULL|FLOAT|BLOB */ - -1, /* (182) term ::= STRING */ - -1, /* (183) term ::= INTEGER */ - -1, /* (184) expr ::= VARIABLE */ - -3, /* (185) expr ::= expr COLLATE ID|STRING */ - -6, /* (186) expr ::= CAST LP expr AS typetoken RP */ - -5, /* (187) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ - -4, /* (188) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ - -6, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ - -5, /* (190) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ - -1, /* (191) term ::= CTIME_KW */ - -5, /* (192) expr ::= LP nexprlist COMMA expr RP */ - -3, /* (193) expr ::= expr AND expr */ - -3, /* (194) expr ::= expr OR expr */ - -3, /* (195) expr ::= expr LT|GT|GE|LE expr */ - -3, /* (196) expr ::= expr EQ|NE expr */ - -3, /* (197) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ - -3, /* (198) expr ::= expr PLUS|MINUS expr */ - -3, /* (199) expr ::= expr STAR|SLASH|REM expr */ - -3, /* (200) expr ::= expr CONCAT expr */ - -2, /* (201) likeop ::= NOT LIKE_KW|MATCH */ - -3, /* (202) expr ::= expr likeop expr */ - -5, /* (203) expr ::= expr likeop expr ESCAPE expr */ - -2, /* (204) expr ::= expr ISNULL|NOTNULL */ - -3, /* (205) expr ::= expr NOT NULL */ - -3, /* (206) expr ::= expr IS expr */ - -4, /* (207) expr ::= expr IS NOT expr */ - -6, /* (208) expr ::= expr IS NOT DISTINCT FROM expr */ - -5, /* (209) expr ::= expr IS DISTINCT FROM expr */ - -2, /* (210) expr ::= NOT expr */ - -2, /* (211) expr ::= BITNOT expr */ - -2, /* (212) expr ::= PLUS|MINUS expr */ - -3, /* (213) expr ::= expr PTR expr */ - -1, /* (214) between_op ::= BETWEEN */ - -2, /* (215) between_op ::= NOT BETWEEN */ - -5, /* (216) expr ::= expr between_op expr AND expr */ - -1, /* (217) in_op ::= IN */ - -2, /* (218) in_op ::= NOT IN */ - -5, /* (219) expr ::= expr in_op LP exprlist RP */ - -3, /* (220) expr ::= LP select RP */ - -5, /* (221) expr ::= expr in_op LP select RP */ - -5, /* (222) expr ::= expr in_op nm dbnm paren_exprlist */ - -4, /* (223) expr ::= EXISTS LP select RP */ - -5, /* (224) expr ::= CASE case_operand case_exprlist case_else END */ - -5, /* (225) case_exprlist ::= case_exprlist WHEN expr THEN expr */ - -4, /* (226) case_exprlist ::= WHEN expr THEN expr */ - -2, /* (227) case_else ::= ELSE expr */ - 0, /* (228) case_else ::= */ - 0, /* (229) case_operand ::= */ - 0, /* (230) exprlist ::= */ - -3, /* (231) nexprlist ::= nexprlist COMMA expr */ - -1, /* (232) nexprlist ::= expr */ - 0, /* (233) paren_exprlist ::= */ - -3, /* (234) paren_exprlist ::= LP exprlist RP */ - -12, /* (235) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ - -1, /* (236) uniqueflag ::= UNIQUE */ - 0, /* (237) uniqueflag ::= */ - 0, /* (238) eidlist_opt ::= */ - -3, /* (239) eidlist_opt ::= LP eidlist RP */ - -5, /* (240) eidlist ::= eidlist COMMA nm collate sortorder */ - -3, /* (241) eidlist ::= nm collate sortorder */ - 0, /* (242) collate ::= */ - -2, /* (243) collate ::= COLLATE ID|STRING */ - -4, /* (244) cmd ::= DROP INDEX ifexists fullname */ - -2, /* (245) cmd ::= VACUUM vinto */ - -3, /* (246) cmd ::= VACUUM nm vinto */ - -2, /* (247) vinto ::= INTO expr */ - 0, /* (248) vinto ::= */ - -3, /* (249) cmd ::= PRAGMA nm dbnm */ - -5, /* (250) cmd ::= PRAGMA nm dbnm EQ nmnum */ - -6, /* (251) cmd ::= PRAGMA nm dbnm LP nmnum RP */ - -5, /* (252) cmd ::= PRAGMA nm dbnm EQ minus_num */ - -6, /* (253) cmd ::= PRAGMA nm dbnm LP minus_num RP */ - -2, /* (254) plus_num ::= PLUS INTEGER|FLOAT */ - -2, /* (255) minus_num ::= MINUS INTEGER|FLOAT */ - -5, /* (256) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ - -11, /* (257) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ - -1, /* (258) trigger_time ::= BEFORE|AFTER */ - -2, /* (259) trigger_time ::= INSTEAD OF */ - 0, /* (260) trigger_time ::= */ - -1, /* (261) trigger_event ::= DELETE|INSERT */ - -1, /* (262) trigger_event ::= UPDATE */ - -3, /* (263) trigger_event ::= UPDATE OF idlist */ - 0, /* (264) when_clause ::= */ - -2, /* (265) when_clause ::= WHEN expr */ - -3, /* (266) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ - -2, /* (267) trigger_cmd_list ::= trigger_cmd SEMI */ - -3, /* (268) trnm ::= nm DOT nm */ - -3, /* (269) tridxby ::= INDEXED BY nm */ - -2, /* (270) tridxby ::= NOT INDEXED */ - -9, /* (271) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ - -8, /* (272) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ - -6, /* (273) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ - -3, /* (274) trigger_cmd ::= scanpt select scanpt */ - -4, /* (275) expr ::= RAISE LP IGNORE RP */ - -6, /* (276) expr ::= RAISE LP raisetype COMMA nm RP */ - -1, /* (277) raisetype ::= ROLLBACK */ - -1, /* (278) raisetype ::= ABORT */ - -1, /* (279) raisetype ::= FAIL */ - -4, /* (280) cmd ::= DROP TRIGGER ifexists fullname */ - -6, /* (281) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ - -3, /* (282) cmd ::= DETACH database_kw_opt expr */ - 0, /* (283) key_opt ::= */ - -2, /* (284) key_opt ::= KEY expr */ - -1, /* (285) cmd ::= REINDEX */ - -3, /* (286) cmd ::= REINDEX nm dbnm */ - -1, /* (287) cmd ::= ANALYZE */ - -3, /* (288) cmd ::= ANALYZE nm dbnm */ - -6, /* (289) cmd ::= ALTER TABLE fullname RENAME TO nm */ - -7, /* (290) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ - -6, /* (291) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ - -1, /* (292) add_column_fullname ::= fullname */ - -8, /* (293) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ - -1, /* (294) cmd ::= create_vtab */ - -4, /* (295) cmd ::= create_vtab LP vtabarglist RP */ - -8, /* (296) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ - 0, /* (297) vtabarg ::= */ - -1, /* (298) vtabargtoken ::= ANY */ - -3, /* (299) vtabargtoken ::= lp anylist RP */ - -1, /* (300) lp ::= LP */ - -2, /* (301) with ::= WITH wqlist */ - -3, /* (302) with ::= WITH RECURSIVE wqlist */ - -1, /* (303) wqas ::= AS */ - -2, /* (304) wqas ::= AS MATERIALIZED */ - -3, /* (305) wqas ::= AS NOT MATERIALIZED */ - -6, /* (306) wqitem ::= nm eidlist_opt wqas LP select RP */ - -1, /* (307) wqlist ::= wqitem */ - -3, /* (308) wqlist ::= wqlist COMMA wqitem */ - -3, /* (309) windowdefn_list ::= windowdefn_list COMMA windowdefn */ - -5, /* (310) windowdefn ::= nm AS LP window RP */ - -5, /* (311) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ - -6, /* (312) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ - -4, /* (313) window ::= ORDER BY sortlist frame_opt */ - -5, /* (314) window ::= nm ORDER BY sortlist frame_opt */ - -2, /* (315) window ::= nm frame_opt */ - 0, /* (316) frame_opt ::= */ - -3, /* (317) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ - -6, /* (318) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ - -1, /* (319) range_or_rows ::= RANGE|ROWS|GROUPS */ - -1, /* (320) frame_bound_s ::= frame_bound */ - -2, /* (321) frame_bound_s ::= UNBOUNDED PRECEDING */ - -1, /* (322) frame_bound_e ::= frame_bound */ - -2, /* (323) frame_bound_e ::= UNBOUNDED FOLLOWING */ - -2, /* (324) frame_bound ::= expr PRECEDING|FOLLOWING */ - -2, /* (325) frame_bound ::= CURRENT ROW */ - 0, /* (326) frame_exclude_opt ::= */ - -2, /* (327) frame_exclude_opt ::= EXCLUDE frame_exclude */ - -2, /* (328) frame_exclude ::= NO OTHERS */ - -2, /* (329) frame_exclude ::= CURRENT ROW */ - -1, /* (330) frame_exclude ::= GROUP|TIES */ - -2, /* (331) window_clause ::= WINDOW windowdefn_list */ - -2, /* (332) filter_over ::= filter_clause over_clause */ - -1, /* (333) filter_over ::= over_clause */ - -1, /* (334) filter_over ::= filter_clause */ - -4, /* (335) over_clause ::= OVER LP window RP */ - -2, /* (336) over_clause ::= OVER nm */ - -5, /* (337) filter_clause ::= FILTER LP WHERE expr RP */ - -1, /* (338) input ::= cmdlist */ - -2, /* (339) cmdlist ::= cmdlist ecmd */ - -1, /* (340) cmdlist ::= ecmd */ - -1, /* (341) ecmd ::= SEMI */ - -2, /* (342) ecmd ::= cmdx SEMI */ - -3, /* (343) ecmd ::= explain cmdx SEMI */ - 0, /* (344) trans_opt ::= */ - -1, /* (345) trans_opt ::= TRANSACTION */ - -2, /* (346) trans_opt ::= TRANSACTION nm */ - -1, /* (347) savepoint_opt ::= SAVEPOINT */ - 0, /* (348) savepoint_opt ::= */ - -2, /* (349) cmd ::= create_table create_table_args */ - -1, /* (350) table_option_set ::= table_option */ - -4, /* (351) columnlist ::= columnlist COMMA columnname carglist */ - -2, /* (352) columnlist ::= columnname carglist */ - -1, /* (353) nm ::= ID|INDEXED|JOIN_KW */ - -1, /* (354) nm ::= STRING */ - -1, /* (355) typetoken ::= typename */ - -1, /* (356) typename ::= ID|STRING */ - -1, /* (357) signed ::= plus_num */ - -1, /* (358) signed ::= minus_num */ - -2, /* (359) carglist ::= carglist ccons */ - 0, /* (360) carglist ::= */ - -2, /* (361) ccons ::= NULL onconf */ - -4, /* (362) ccons ::= GENERATED ALWAYS AS generated */ - -2, /* (363) ccons ::= AS generated */ - -2, /* (364) conslist_opt ::= COMMA conslist */ - -3, /* (365) conslist ::= conslist tconscomma tcons */ - -1, /* (366) conslist ::= tcons */ - 0, /* (367) tconscomma ::= */ - -1, /* (368) defer_subclause_opt ::= defer_subclause */ - -1, /* (369) resolvetype ::= raisetype */ - -1, /* (370) selectnowith ::= oneselect */ - -1, /* (371) oneselect ::= values */ - -2, /* (372) sclp ::= selcollist COMMA */ - -1, /* (373) as ::= ID|STRING */ - -1, /* (374) indexed_opt ::= indexed_by */ - 0, /* (375) returning ::= */ - -1, /* (376) expr ::= term */ - -1, /* (377) likeop ::= LIKE_KW|MATCH */ - -1, /* (378) case_operand ::= expr */ - -1, /* (379) exprlist ::= nexprlist */ - -1, /* (380) nmnum ::= plus_num */ - -1, /* (381) nmnum ::= nm */ - -1, /* (382) nmnum ::= ON */ - -1, /* (383) nmnum ::= DELETE */ - -1, /* (384) nmnum ::= DEFAULT */ - -1, /* (385) plus_num ::= INTEGER|FLOAT */ - 0, /* (386) foreach_clause ::= */ - -3, /* (387) foreach_clause ::= FOR EACH ROW */ - -1, /* (388) trnm ::= nm */ - 0, /* (389) tridxby ::= */ - -1, /* (390) database_kw_opt ::= DATABASE */ - 0, /* (391) database_kw_opt ::= */ - 0, /* (392) kwcolumn_opt ::= */ - -1, /* (393) kwcolumn_opt ::= COLUMNKW */ - -1, /* (394) vtabarglist ::= vtabarg */ - -3, /* (395) vtabarglist ::= vtabarglist COMMA vtabarg */ - -2, /* (396) vtabarg ::= vtabarg vtabargtoken */ - 0, /* (397) anylist ::= */ - -4, /* (398) anylist ::= anylist LP anylist RP */ - -2, /* (399) anylist ::= anylist ANY */ - 0, /* (400) with ::= */ - -1, /* (401) windowdefn_list ::= windowdefn */ - -1, /* (402) window ::= frame_opt */ + -1, /* (95) oneselect ::= mvalues */ + -5, /* (96) mvalues ::= values COMMA LP nexprlist RP */ + -5, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */ + -1, /* (98) distinct ::= DISTINCT */ + -1, /* (99) distinct ::= ALL */ + 0, /* (100) distinct ::= */ + 0, /* (101) sclp ::= */ + -5, /* (102) selcollist ::= sclp scanpt expr scanpt as */ + -3, /* (103) selcollist ::= sclp scanpt STAR */ + -5, /* (104) selcollist ::= sclp scanpt nm DOT STAR */ + -2, /* (105) as ::= AS nm */ + 0, /* (106) as ::= */ + 0, /* (107) from ::= */ + -2, /* (108) from ::= FROM seltablist */ + -2, /* (109) stl_prefix ::= seltablist joinop */ + 0, /* (110) stl_prefix ::= */ + -5, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */ + -6, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ + -8, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ + -6, /* (114) seltablist ::= stl_prefix LP select RP as on_using */ + -6, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */ + 0, /* (116) dbnm ::= */ + -2, /* (117) dbnm ::= DOT nm */ + -1, /* (118) fullname ::= nm */ + -3, /* (119) fullname ::= nm DOT nm */ + -1, /* (120) xfullname ::= nm */ + -3, /* (121) xfullname ::= nm DOT nm */ + -5, /* (122) xfullname ::= nm DOT nm AS nm */ + -3, /* (123) xfullname ::= nm AS nm */ + -1, /* (124) joinop ::= COMMA|JOIN */ + -2, /* (125) joinop ::= JOIN_KW JOIN */ + -3, /* (126) joinop ::= JOIN_KW nm JOIN */ + -4, /* (127) joinop ::= JOIN_KW nm nm JOIN */ + -2, /* (128) on_using ::= ON expr */ + -4, /* (129) on_using ::= USING LP idlist RP */ + 0, /* (130) on_using ::= */ + 0, /* (131) indexed_opt ::= */ + -3, /* (132) indexed_by ::= INDEXED BY nm */ + -2, /* (133) indexed_by ::= NOT INDEXED */ + 0, /* (134) orderby_opt ::= */ + -3, /* (135) orderby_opt ::= ORDER BY sortlist */ + -5, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */ + -3, /* (137) sortlist ::= expr sortorder nulls */ + -1, /* (138) sortorder ::= ASC */ + -1, /* (139) sortorder ::= DESC */ + 0, /* (140) sortorder ::= */ + -2, /* (141) nulls ::= NULLS FIRST */ + -2, /* (142) nulls ::= NULLS LAST */ + 0, /* (143) nulls ::= */ + 0, /* (144) groupby_opt ::= */ + -3, /* (145) groupby_opt ::= GROUP BY nexprlist */ + 0, /* (146) having_opt ::= */ + -2, /* (147) having_opt ::= HAVING expr */ + 0, /* (148) limit_opt ::= */ + -2, /* (149) limit_opt ::= LIMIT expr */ + -4, /* (150) limit_opt ::= LIMIT expr OFFSET expr */ + -4, /* (151) limit_opt ::= LIMIT expr COMMA expr */ + -6, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ + 0, /* (153) where_opt ::= */ + -2, /* (154) where_opt ::= WHERE expr */ + 0, /* (155) where_opt_ret ::= */ + -2, /* (156) where_opt_ret ::= WHERE expr */ + -2, /* (157) where_opt_ret ::= RETURNING selcollist */ + -4, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */ + -9, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ + -5, /* (160) setlist ::= setlist COMMA nm EQ expr */ + -7, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */ + -3, /* (162) setlist ::= nm EQ expr */ + -5, /* (163) setlist ::= LP idlist RP EQ expr */ + -7, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + -8, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ + 0, /* (166) upsert ::= */ + -2, /* (167) upsert ::= RETURNING selcollist */ + -12, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ + -9, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ + -5, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */ + -8, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ + -2, /* (172) returning ::= RETURNING selcollist */ + -2, /* (173) insert_cmd ::= INSERT orconf */ + -1, /* (174) insert_cmd ::= REPLACE */ + 0, /* (175) idlist_opt ::= */ + -3, /* (176) idlist_opt ::= LP idlist RP */ + -3, /* (177) idlist ::= idlist COMMA nm */ + -1, /* (178) idlist ::= nm */ + -3, /* (179) expr ::= LP expr RP */ + -1, /* (180) expr ::= ID|INDEXED|JOIN_KW */ + -3, /* (181) expr ::= nm DOT nm */ + -5, /* (182) expr ::= nm DOT nm DOT nm */ + -1, /* (183) term ::= NULL|FLOAT|BLOB */ + -1, /* (184) term ::= STRING */ + -1, /* (185) term ::= INTEGER */ + -1, /* (186) expr ::= VARIABLE */ + -3, /* (187) expr ::= expr COLLATE ID|STRING */ + -6, /* (188) expr ::= CAST LP expr AS typetoken RP */ + -5, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + -8, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ + -4, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + -6, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + -9, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ + -5, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + -1, /* (195) term ::= CTIME_KW */ + -5, /* (196) expr ::= LP nexprlist COMMA expr RP */ + -3, /* (197) expr ::= expr AND expr */ + -3, /* (198) expr ::= expr OR expr */ + -3, /* (199) expr ::= expr LT|GT|GE|LE expr */ + -3, /* (200) expr ::= expr EQ|NE expr */ + -3, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + -3, /* (202) expr ::= expr PLUS|MINUS expr */ + -3, /* (203) expr ::= expr STAR|SLASH|REM expr */ + -3, /* (204) expr ::= expr CONCAT expr */ + -2, /* (205) likeop ::= NOT LIKE_KW|MATCH */ + -3, /* (206) expr ::= expr likeop expr */ + -5, /* (207) expr ::= expr likeop expr ESCAPE expr */ + -2, /* (208) expr ::= expr ISNULL|NOTNULL */ + -3, /* (209) expr ::= expr NOT NULL */ + -3, /* (210) expr ::= expr IS expr */ + -4, /* (211) expr ::= expr IS NOT expr */ + -6, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */ + -5, /* (213) expr ::= expr IS DISTINCT FROM expr */ + -2, /* (214) expr ::= NOT expr */ + -2, /* (215) expr ::= BITNOT expr */ + -2, /* (216) expr ::= PLUS|MINUS expr */ + -3, /* (217) expr ::= expr PTR expr */ + -1, /* (218) between_op ::= BETWEEN */ + -2, /* (219) between_op ::= NOT BETWEEN */ + -5, /* (220) expr ::= expr between_op expr AND expr */ + -1, /* (221) in_op ::= IN */ + -2, /* (222) in_op ::= NOT IN */ + -5, /* (223) expr ::= expr in_op LP exprlist RP */ + -3, /* (224) expr ::= LP select RP */ + -5, /* (225) expr ::= expr in_op LP select RP */ + -5, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */ + -4, /* (227) expr ::= EXISTS LP select RP */ + -5, /* (228) expr ::= CASE case_operand case_exprlist case_else END */ + -5, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + -4, /* (230) case_exprlist ::= WHEN expr THEN expr */ + -2, /* (231) case_else ::= ELSE expr */ + 0, /* (232) case_else ::= */ + 0, /* (233) case_operand ::= */ + 0, /* (234) exprlist ::= */ + -3, /* (235) nexprlist ::= nexprlist COMMA expr */ + -1, /* (236) nexprlist ::= expr */ + 0, /* (237) paren_exprlist ::= */ + -3, /* (238) paren_exprlist ::= LP exprlist RP */ + -12, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + -1, /* (240) uniqueflag ::= UNIQUE */ + 0, /* (241) uniqueflag ::= */ + 0, /* (242) eidlist_opt ::= */ + -3, /* (243) eidlist_opt ::= LP eidlist RP */ + -5, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */ + -3, /* (245) eidlist ::= nm collate sortorder */ + 0, /* (246) collate ::= */ + -2, /* (247) collate ::= COLLATE ID|STRING */ + -4, /* (248) cmd ::= DROP INDEX ifexists fullname */ + -2, /* (249) cmd ::= VACUUM vinto */ + -3, /* (250) cmd ::= VACUUM nm vinto */ + -2, /* (251) vinto ::= INTO expr */ + 0, /* (252) vinto ::= */ + -3, /* (253) cmd ::= PRAGMA nm dbnm */ + -5, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */ + -6, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + -5, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */ + -6, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + -2, /* (258) plus_num ::= PLUS INTEGER|FLOAT */ + -2, /* (259) minus_num ::= MINUS INTEGER|FLOAT */ + -5, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + -11, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + -1, /* (262) trigger_time ::= BEFORE|AFTER */ + -2, /* (263) trigger_time ::= INSTEAD OF */ + 0, /* (264) trigger_time ::= */ + -1, /* (265) trigger_event ::= DELETE|INSERT */ + -1, /* (266) trigger_event ::= UPDATE */ + -3, /* (267) trigger_event ::= UPDATE OF idlist */ + 0, /* (268) when_clause ::= */ + -2, /* (269) when_clause ::= WHEN expr */ + -3, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + -2, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */ + -3, /* (272) trnm ::= nm DOT nm */ + -3, /* (273) tridxby ::= INDEXED BY nm */ + -2, /* (274) tridxby ::= NOT INDEXED */ + -9, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + -8, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + -6, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + -3, /* (278) trigger_cmd ::= scanpt select scanpt */ + -4, /* (279) expr ::= RAISE LP IGNORE RP */ + -6, /* (280) expr ::= RAISE LP raisetype COMMA nm RP */ + -1, /* (281) raisetype ::= ROLLBACK */ + -1, /* (282) raisetype ::= ABORT */ + -1, /* (283) raisetype ::= FAIL */ + -4, /* (284) cmd ::= DROP TRIGGER ifexists fullname */ + -6, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + -3, /* (286) cmd ::= DETACH database_kw_opt expr */ + 0, /* (287) key_opt ::= */ + -2, /* (288) key_opt ::= KEY expr */ + -1, /* (289) cmd ::= REINDEX */ + -3, /* (290) cmd ::= REINDEX nm dbnm */ + -1, /* (291) cmd ::= ANALYZE */ + -3, /* (292) cmd ::= ANALYZE nm dbnm */ + -6, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */ + -7, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + -6, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + -1, /* (296) add_column_fullname ::= fullname */ + -8, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + -1, /* (298) cmd ::= create_vtab */ + -4, /* (299) cmd ::= create_vtab LP vtabarglist RP */ + -8, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + 0, /* (301) vtabarg ::= */ + -1, /* (302) vtabargtoken ::= ANY */ + -3, /* (303) vtabargtoken ::= lp anylist RP */ + -1, /* (304) lp ::= LP */ + -2, /* (305) with ::= WITH wqlist */ + -3, /* (306) with ::= WITH RECURSIVE wqlist */ + -1, /* (307) wqas ::= AS */ + -2, /* (308) wqas ::= AS MATERIALIZED */ + -3, /* (309) wqas ::= AS NOT MATERIALIZED */ + -6, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */ + -1, /* (311) withnm ::= nm */ + -1, /* (312) wqlist ::= wqitem */ + -3, /* (313) wqlist ::= wqlist COMMA wqitem */ + -3, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + -5, /* (315) windowdefn ::= nm AS LP window RP */ + -5, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + -6, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + -4, /* (318) window ::= ORDER BY sortlist frame_opt */ + -5, /* (319) window ::= nm ORDER BY sortlist frame_opt */ + -2, /* (320) window ::= nm frame_opt */ + 0, /* (321) frame_opt ::= */ + -3, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + -6, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + -1, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */ + -1, /* (325) frame_bound_s ::= frame_bound */ + -2, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */ + -1, /* (327) frame_bound_e ::= frame_bound */ + -2, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */ + -2, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */ + -2, /* (330) frame_bound ::= CURRENT ROW */ + 0, /* (331) frame_exclude_opt ::= */ + -2, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */ + -2, /* (333) frame_exclude ::= NO OTHERS */ + -2, /* (334) frame_exclude ::= CURRENT ROW */ + -1, /* (335) frame_exclude ::= GROUP|TIES */ + -2, /* (336) window_clause ::= WINDOW windowdefn_list */ + -2, /* (337) filter_over ::= filter_clause over_clause */ + -1, /* (338) filter_over ::= over_clause */ + -1, /* (339) filter_over ::= filter_clause */ + -4, /* (340) over_clause ::= OVER LP window RP */ + -2, /* (341) over_clause ::= OVER nm */ + -5, /* (342) filter_clause ::= FILTER LP WHERE expr RP */ + -1, /* (343) term ::= QNUMBER */ + -1, /* (344) input ::= cmdlist */ + -2, /* (345) cmdlist ::= cmdlist ecmd */ + -1, /* (346) cmdlist ::= ecmd */ + -1, /* (347) ecmd ::= SEMI */ + -2, /* (348) ecmd ::= cmdx SEMI */ + -3, /* (349) ecmd ::= explain cmdx SEMI */ + 0, /* (350) trans_opt ::= */ + -1, /* (351) trans_opt ::= TRANSACTION */ + -2, /* (352) trans_opt ::= TRANSACTION nm */ + -1, /* (353) savepoint_opt ::= SAVEPOINT */ + 0, /* (354) savepoint_opt ::= */ + -2, /* (355) cmd ::= create_table create_table_args */ + -1, /* (356) table_option_set ::= table_option */ + -4, /* (357) columnlist ::= columnlist COMMA columnname carglist */ + -2, /* (358) columnlist ::= columnname carglist */ + -1, /* (359) nm ::= ID|INDEXED|JOIN_KW */ + -1, /* (360) nm ::= STRING */ + -1, /* (361) typetoken ::= typename */ + -1, /* (362) typename ::= ID|STRING */ + -1, /* (363) signed ::= plus_num */ + -1, /* (364) signed ::= minus_num */ + -2, /* (365) carglist ::= carglist ccons */ + 0, /* (366) carglist ::= */ + -2, /* (367) ccons ::= NULL onconf */ + -4, /* (368) ccons ::= GENERATED ALWAYS AS generated */ + -2, /* (369) ccons ::= AS generated */ + -2, /* (370) conslist_opt ::= COMMA conslist */ + -3, /* (371) conslist ::= conslist tconscomma tcons */ + -1, /* (372) conslist ::= tcons */ + 0, /* (373) tconscomma ::= */ + -1, /* (374) defer_subclause_opt ::= defer_subclause */ + -1, /* (375) resolvetype ::= raisetype */ + -1, /* (376) selectnowith ::= oneselect */ + -1, /* (377) oneselect ::= values */ + -2, /* (378) sclp ::= selcollist COMMA */ + -1, /* (379) as ::= ID|STRING */ + -1, /* (380) indexed_opt ::= indexed_by */ + 0, /* (381) returning ::= */ + -1, /* (382) expr ::= term */ + -1, /* (383) likeop ::= LIKE_KW|MATCH */ + -1, /* (384) case_operand ::= expr */ + -1, /* (385) exprlist ::= nexprlist */ + -1, /* (386) nmnum ::= plus_num */ + -1, /* (387) nmnum ::= nm */ + -1, /* (388) nmnum ::= ON */ + -1, /* (389) nmnum ::= DELETE */ + -1, /* (390) nmnum ::= DEFAULT */ + -1, /* (391) plus_num ::= INTEGER|FLOAT */ + 0, /* (392) foreach_clause ::= */ + -3, /* (393) foreach_clause ::= FOR EACH ROW */ + -1, /* (394) trnm ::= nm */ + 0, /* (395) tridxby ::= */ + -1, /* (396) database_kw_opt ::= DATABASE */ + 0, /* (397) database_kw_opt ::= */ + 0, /* (398) kwcolumn_opt ::= */ + -1, /* (399) kwcolumn_opt ::= COLUMNKW */ + -1, /* (400) vtabarglist ::= vtabarg */ + -3, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ + -2, /* (402) vtabarg ::= vtabarg vtabargtoken */ + 0, /* (403) anylist ::= */ + -4, /* (404) anylist ::= anylist LP anylist RP */ + -2, /* (405) anylist ::= anylist ANY */ + 0, /* (406) with ::= */ + -1, /* (407) windowdefn_list ::= windowdefn */ + -1, /* (408) window ::= frame_opt */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -172812,16 +176126,16 @@ static YYACTIONTYPE yy_reduce( { sqlite3FinishCoding(pParse); } break; case 3: /* cmd ::= BEGIN transtype trans_opt */ -{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy394);} +{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy144);} break; case 4: /* transtype ::= */ -{yymsp[1].minor.yy394 = TK_DEFERRED;} +{yymsp[1].minor.yy144 = TK_DEFERRED;} break; case 5: /* transtype ::= DEFERRED */ case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); - case 319: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==319); -{yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/} + case 324: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==324); +{yymsp[0].minor.yy144 = yymsp[0].major; /*A-overwrites-X*/} break; case 8: /* cmd ::= COMMIT|END trans_opt */ case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); @@ -172844,7 +176158,7 @@ static YYACTIONTYPE yy_reduce( break; case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { - sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy394,0,0,yymsp[-2].minor.yy394); + sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy144,0,0,yymsp[-2].minor.yy144); } break; case 14: /* createkw ::= CREATE */ @@ -172856,40 +176170,40 @@ static YYACTIONTYPE yy_reduce( case 62: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==62); case 72: /* defer_subclause_opt ::= */ yytestcase(yyruleno==72); case 81: /* ifexists ::= */ yytestcase(yyruleno==81); - case 98: /* distinct ::= */ yytestcase(yyruleno==98); - case 242: /* collate ::= */ yytestcase(yyruleno==242); -{yymsp[1].minor.yy394 = 0;} + case 100: /* distinct ::= */ yytestcase(yyruleno==100); + case 246: /* collate ::= */ yytestcase(yyruleno==246); +{yymsp[1].minor.yy144 = 0;} break; case 16: /* ifnotexists ::= IF NOT EXISTS */ -{yymsp[-2].minor.yy394 = 1;} +{yymsp[-2].minor.yy144 = 1;} break; case 17: /* temp ::= TEMP */ -{yymsp[0].minor.yy394 = pParse->db->init.busy==0;} +{yymsp[0].minor.yy144 = pParse->db->init.busy==0;} break; case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */ { - sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy285,0); + sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy391,0); } break; case 20: /* create_table_args ::= AS select */ { - sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy47); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy47); + sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy555); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy555); } break; case 21: /* table_option_set ::= */ -{yymsp[1].minor.yy285 = 0;} +{yymsp[1].minor.yy391 = 0;} break; case 22: /* table_option_set ::= table_option_set COMMA table_option */ -{yylhsminor.yy285 = yymsp[-2].minor.yy285|yymsp[0].minor.yy285;} - yymsp[-2].minor.yy285 = yylhsminor.yy285; +{yylhsminor.yy391 = yymsp[-2].minor.yy391|yymsp[0].minor.yy391;} + yymsp[-2].minor.yy391 = yylhsminor.yy391; break; case 23: /* table_option ::= WITHOUT nm */ { if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ - yymsp[-1].minor.yy285 = TF_WithoutRowid | TF_NoVisibleRowid; + yymsp[-1].minor.yy391 = TF_WithoutRowid | TF_NoVisibleRowid; }else{ - yymsp[-1].minor.yy285 = 0; + yymsp[-1].minor.yy391 = 0; sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); } } @@ -172897,20 +176211,20 @@ static YYACTIONTYPE yy_reduce( case 24: /* table_option ::= nm */ { if( yymsp[0].minor.yy0.n==6 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"strict",6)==0 ){ - yylhsminor.yy285 = TF_Strict; + yylhsminor.yy391 = TF_Strict; }else{ - yylhsminor.yy285 = 0; + yylhsminor.yy391 = 0; sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); } } - yymsp[0].minor.yy285 = yylhsminor.yy285; + yymsp[0].minor.yy391 = yylhsminor.yy391; break; case 25: /* columnname ::= nm typetoken */ {sqlite3AddColumn(pParse,yymsp[-1].minor.yy0,yymsp[0].minor.yy0);} break; case 26: /* typetoken ::= */ case 65: /* conslist_opt ::= */ yytestcase(yyruleno==65); - case 104: /* as ::= */ yytestcase(yyruleno==104); + case 106: /* as ::= */ yytestcase(yyruleno==106); {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;} break; case 27: /* typetoken ::= typename LP signed RP */ @@ -172929,7 +176243,7 @@ static YYACTIONTYPE yy_reduce( case 30: /* scanpt ::= */ { assert( yyLookahead!=YYNOCODE ); - yymsp[1].minor.yy522 = yyLookaheadToken.z; + yymsp[1].minor.yy168 = yyLookaheadToken.z; } break; case 31: /* scantok ::= */ @@ -172943,17 +176257,17 @@ static YYACTIONTYPE yy_reduce( {pParse->constraintName = yymsp[0].minor.yy0;} break; case 33: /* ccons ::= DEFAULT scantok term */ -{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy528,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} +{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy454,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} break; case 34: /* ccons ::= DEFAULT LP expr RP */ -{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy528,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy454,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} break; case 35: /* ccons ::= DEFAULT PLUS scantok term */ -{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy528,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} +{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy454,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} break; case 36: /* ccons ::= DEFAULT MINUS scantok term */ { - Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy528, 0); + Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy454, 0); sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]); } break; @@ -172968,151 +176282,151 @@ static YYACTIONTYPE yy_reduce( } break; case 38: /* ccons ::= NOT NULL onconf */ -{sqlite3AddNotNull(pParse, yymsp[0].minor.yy394);} +{sqlite3AddNotNull(pParse, yymsp[0].minor.yy144);} break; case 39: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ -{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy394,yymsp[0].minor.yy394,yymsp[-2].minor.yy394);} +{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy144,yymsp[0].minor.yy144,yymsp[-2].minor.yy144);} break; case 40: /* ccons ::= UNIQUE onconf */ -{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy394,0,0,0,0, +{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy144,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; case 41: /* ccons ::= CHECK LP expr RP */ -{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy528,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);} +{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy454,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);} break; case 42: /* ccons ::= REFERENCES nm eidlist_opt refargs */ -{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy394);} +{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy14,yymsp[0].minor.yy144);} break; case 43: /* ccons ::= defer_subclause */ -{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy394);} +{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy144);} break; case 44: /* ccons ::= COLLATE ID|STRING */ {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} break; case 45: /* generated ::= LP expr RP */ -{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy528,0);} +{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy454,0);} break; case 46: /* generated ::= LP expr RP ID */ -{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy528,&yymsp[0].minor.yy0);} +{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy454,&yymsp[0].minor.yy0);} break; case 48: /* autoinc ::= AUTOINCR */ -{yymsp[0].minor.yy394 = 1;} +{yymsp[0].minor.yy144 = 1;} break; case 49: /* refargs ::= */ -{ yymsp[1].minor.yy394 = OE_None*0x0101; /* EV: R-19803-45884 */} +{ yymsp[1].minor.yy144 = OE_None*0x0101; /* EV: R-19803-45884 */} break; case 50: /* refargs ::= refargs refarg */ -{ yymsp[-1].minor.yy394 = (yymsp[-1].minor.yy394 & ~yymsp[0].minor.yy231.mask) | yymsp[0].minor.yy231.value; } +{ yymsp[-1].minor.yy144 = (yymsp[-1].minor.yy144 & ~yymsp[0].minor.yy383.mask) | yymsp[0].minor.yy383.value; } break; case 51: /* refarg ::= MATCH nm */ -{ yymsp[-1].minor.yy231.value = 0; yymsp[-1].minor.yy231.mask = 0x000000; } +{ yymsp[-1].minor.yy383.value = 0; yymsp[-1].minor.yy383.mask = 0x000000; } break; case 52: /* refarg ::= ON INSERT refact */ -{ yymsp[-2].minor.yy231.value = 0; yymsp[-2].minor.yy231.mask = 0x000000; } +{ yymsp[-2].minor.yy383.value = 0; yymsp[-2].minor.yy383.mask = 0x000000; } break; case 53: /* refarg ::= ON DELETE refact */ -{ yymsp[-2].minor.yy231.value = yymsp[0].minor.yy394; yymsp[-2].minor.yy231.mask = 0x0000ff; } +{ yymsp[-2].minor.yy383.value = yymsp[0].minor.yy144; yymsp[-2].minor.yy383.mask = 0x0000ff; } break; case 54: /* refarg ::= ON UPDATE refact */ -{ yymsp[-2].minor.yy231.value = yymsp[0].minor.yy394<<8; yymsp[-2].minor.yy231.mask = 0x00ff00; } +{ yymsp[-2].minor.yy383.value = yymsp[0].minor.yy144<<8; yymsp[-2].minor.yy383.mask = 0x00ff00; } break; case 55: /* refact ::= SET NULL */ -{ yymsp[-1].minor.yy394 = OE_SetNull; /* EV: R-33326-45252 */} +{ yymsp[-1].minor.yy144 = OE_SetNull; /* EV: R-33326-45252 */} break; case 56: /* refact ::= SET DEFAULT */ -{ yymsp[-1].minor.yy394 = OE_SetDflt; /* EV: R-33326-45252 */} +{ yymsp[-1].minor.yy144 = OE_SetDflt; /* EV: R-33326-45252 */} break; case 57: /* refact ::= CASCADE */ -{ yymsp[0].minor.yy394 = OE_Cascade; /* EV: R-33326-45252 */} +{ yymsp[0].minor.yy144 = OE_Cascade; /* EV: R-33326-45252 */} break; case 58: /* refact ::= RESTRICT */ -{ yymsp[0].minor.yy394 = OE_Restrict; /* EV: R-33326-45252 */} +{ yymsp[0].minor.yy144 = OE_Restrict; /* EV: R-33326-45252 */} break; case 59: /* refact ::= NO ACTION */ -{ yymsp[-1].minor.yy394 = OE_None; /* EV: R-33326-45252 */} +{ yymsp[-1].minor.yy144 = OE_None; /* EV: R-33326-45252 */} break; case 60: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ -{yymsp[-2].minor.yy394 = 0;} +{yymsp[-2].minor.yy144 = 0;} break; case 61: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ case 76: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==76); - case 171: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==171); -{yymsp[-1].minor.yy394 = yymsp[0].minor.yy394;} + case 173: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==173); +{yymsp[-1].minor.yy144 = yymsp[0].minor.yy144;} break; case 63: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ case 80: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==80); - case 215: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==215); - case 218: /* in_op ::= NOT IN */ yytestcase(yyruleno==218); - case 243: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==243); -{yymsp[-1].minor.yy394 = 1;} + case 219: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==219); + case 222: /* in_op ::= NOT IN */ yytestcase(yyruleno==222); + case 247: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==247); +{yymsp[-1].minor.yy144 = 1;} break; case 64: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ -{yymsp[-1].minor.yy394 = 0;} +{yymsp[-1].minor.yy144 = 0;} break; case 66: /* tconscomma ::= COMMA */ {pParse->constraintName.n = 0;} break; case 68: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ -{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy394,yymsp[-2].minor.yy394,0);} +{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy14,yymsp[0].minor.yy144,yymsp[-2].minor.yy144,0);} break; case 69: /* tcons ::= UNIQUE LP sortlist RP onconf */ -{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy394,0,0,0,0, +{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy14,yymsp[0].minor.yy144,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; case 70: /* tcons ::= CHECK LP expr RP onconf */ -{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy528,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);} +{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy454,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);} break; case 71: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ { - sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy394); - sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy394); + sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy14, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy14, yymsp[-1].minor.yy144); + sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy144); } break; case 73: /* onconf ::= */ case 75: /* orconf ::= */ yytestcase(yyruleno==75); -{yymsp[1].minor.yy394 = OE_Default;} +{yymsp[1].minor.yy144 = OE_Default;} break; case 74: /* onconf ::= ON CONFLICT resolvetype */ -{yymsp[-2].minor.yy394 = yymsp[0].minor.yy394;} +{yymsp[-2].minor.yy144 = yymsp[0].minor.yy144;} break; case 77: /* resolvetype ::= IGNORE */ -{yymsp[0].minor.yy394 = OE_Ignore;} +{yymsp[0].minor.yy144 = OE_Ignore;} break; case 78: /* resolvetype ::= REPLACE */ - case 172: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==172); -{yymsp[0].minor.yy394 = OE_Replace;} + case 174: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==174); +{yymsp[0].minor.yy144 = OE_Replace;} break; case 79: /* cmd ::= DROP TABLE ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy131, 0, yymsp[-1].minor.yy394); + sqlite3DropTable(pParse, yymsp[0].minor.yy203, 0, yymsp[-1].minor.yy144); } break; case 82: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ { - sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[0].minor.yy47, yymsp[-7].minor.yy394, yymsp[-5].minor.yy394); + sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy14, yymsp[0].minor.yy555, yymsp[-7].minor.yy144, yymsp[-5].minor.yy144); } break; case 83: /* cmd ::= DROP VIEW ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy131, 1, yymsp[-1].minor.yy394); + sqlite3DropTable(pParse, yymsp[0].minor.yy203, 1, yymsp[-1].minor.yy144); } break; case 84: /* cmd ::= select */ { SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0}; - sqlite3Select(pParse, yymsp[0].minor.yy47, &dest); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy47); + sqlite3Select(pParse, yymsp[0].minor.yy555, &dest); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy555); } break; case 85: /* select ::= WITH wqlist selectnowith */ -{yymsp[-2].minor.yy47 = attachWithToSelect(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy521);} +{yymsp[-2].minor.yy555 = attachWithToSelect(pParse,yymsp[0].minor.yy555,yymsp[-1].minor.yy59);} break; case 86: /* select ::= WITH RECURSIVE wqlist selectnowith */ -{yymsp[-3].minor.yy47 = attachWithToSelect(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy521);} +{yymsp[-3].minor.yy555 = attachWithToSelect(pParse,yymsp[0].minor.yy555,yymsp[-1].minor.yy59);} break; case 87: /* select ::= selectnowith */ { - Select *p = yymsp[0].minor.yy47; + Select *p = yymsp[0].minor.yy555; if( p ){ parserDoubleLinkSelect(pParse, p); } @@ -173120,8 +176434,8 @@ static YYACTIONTYPE yy_reduce( break; case 88: /* selectnowith ::= selectnowith multiselect_op oneselect */ { - Select *pRhs = yymsp[0].minor.yy47; - Select *pLhs = yymsp[-2].minor.yy47; + Select *pRhs = yymsp[0].minor.yy555; + Select *pLhs = yymsp[-2].minor.yy555; if( pRhs && pRhs->pPrior ){ SrcList *pFrom; Token x; @@ -173131,148 +176445,145 @@ static YYACTIONTYPE yy_reduce( pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); } if( pRhs ){ - pRhs->op = (u8)yymsp[-1].minor.yy394; + pRhs->op = (u8)yymsp[-1].minor.yy144; pRhs->pPrior = pLhs; if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue; pRhs->selFlags &= ~SF_MultiValue; - if( yymsp[-1].minor.yy394!=TK_ALL ) pParse->hasCompound = 1; + if( yymsp[-1].minor.yy144!=TK_ALL ) pParse->hasCompound = 1; }else{ sqlite3SelectDelete(pParse->db, pLhs); } - yymsp[-2].minor.yy47 = pRhs; + yymsp[-2].minor.yy555 = pRhs; } break; case 89: /* multiselect_op ::= UNION */ case 91: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==91); -{yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-OP*/} +{yymsp[0].minor.yy144 = yymsp[0].major; /*A-overwrites-OP*/} break; case 90: /* multiselect_op ::= UNION ALL */ -{yymsp[-1].minor.yy394 = TK_ALL;} +{yymsp[-1].minor.yy144 = TK_ALL;} break; case 92: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { - yymsp[-8].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy131,yymsp[-4].minor.yy528,yymsp[-3].minor.yy322,yymsp[-2].minor.yy528,yymsp[-1].minor.yy322,yymsp[-7].minor.yy394,yymsp[0].minor.yy528); + yymsp[-8].minor.yy555 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy14,yymsp[-5].minor.yy203,yymsp[-4].minor.yy454,yymsp[-3].minor.yy14,yymsp[-2].minor.yy454,yymsp[-1].minor.yy14,yymsp[-7].minor.yy144,yymsp[0].minor.yy454); } break; case 93: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ { - yymsp[-9].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy322,yymsp[-6].minor.yy131,yymsp[-5].minor.yy528,yymsp[-4].minor.yy322,yymsp[-3].minor.yy528,yymsp[-1].minor.yy322,yymsp[-8].minor.yy394,yymsp[0].minor.yy528); - if( yymsp[-9].minor.yy47 ){ - yymsp[-9].minor.yy47->pWinDefn = yymsp[-2].minor.yy41; + yymsp[-9].minor.yy555 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy14,yymsp[-6].minor.yy203,yymsp[-5].minor.yy454,yymsp[-4].minor.yy14,yymsp[-3].minor.yy454,yymsp[-1].minor.yy14,yymsp[-8].minor.yy144,yymsp[0].minor.yy454); + if( yymsp[-9].minor.yy555 ){ + yymsp[-9].minor.yy555->pWinDefn = yymsp[-2].minor.yy211; }else{ - sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy41); + sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy211); } } break; case 94: /* values ::= VALUES LP nexprlist RP */ { - yymsp[-3].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values,0); + yymsp[-3].minor.yy555 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy14,0,0,0,0,0,SF_Values,0); } break; - case 95: /* values ::= values COMMA LP nexprlist RP */ + case 95: /* oneselect ::= mvalues */ { - Select *pRight, *pLeft = yymsp[-4].minor.yy47; - pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values|SF_MultiValue,0); - if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; - if( pRight ){ - pRight->op = TK_ALL; - pRight->pPrior = pLeft; - yymsp[-4].minor.yy47 = pRight; - }else{ - yymsp[-4].minor.yy47 = pLeft; - } + sqlite3MultiValuesEnd(pParse, yymsp[0].minor.yy555); +} + break; + case 96: /* mvalues ::= values COMMA LP nexprlist RP */ + case 97: /* mvalues ::= mvalues COMMA LP nexprlist RP */ yytestcase(yyruleno==97); +{ + yymsp[-4].minor.yy555 = sqlite3MultiValues(pParse, yymsp[-4].minor.yy555, yymsp[-1].minor.yy14); } break; - case 96: /* distinct ::= DISTINCT */ -{yymsp[0].minor.yy394 = SF_Distinct;} + case 98: /* distinct ::= DISTINCT */ +{yymsp[0].minor.yy144 = SF_Distinct;} break; - case 97: /* distinct ::= ALL */ -{yymsp[0].minor.yy394 = SF_All;} + case 99: /* distinct ::= ALL */ +{yymsp[0].minor.yy144 = SF_All;} break; - case 99: /* sclp ::= */ - case 132: /* orderby_opt ::= */ yytestcase(yyruleno==132); - case 142: /* groupby_opt ::= */ yytestcase(yyruleno==142); - case 230: /* exprlist ::= */ yytestcase(yyruleno==230); - case 233: /* paren_exprlist ::= */ yytestcase(yyruleno==233); - case 238: /* eidlist_opt ::= */ yytestcase(yyruleno==238); -{yymsp[1].minor.yy322 = 0;} + case 101: /* sclp ::= */ + case 134: /* orderby_opt ::= */ yytestcase(yyruleno==134); + case 144: /* groupby_opt ::= */ yytestcase(yyruleno==144); + case 234: /* exprlist ::= */ yytestcase(yyruleno==234); + case 237: /* paren_exprlist ::= */ yytestcase(yyruleno==237); + case 242: /* eidlist_opt ::= */ yytestcase(yyruleno==242); +{yymsp[1].minor.yy14 = 0;} break; - case 100: /* selcollist ::= sclp scanpt expr scanpt as */ + case 102: /* selcollist ::= sclp scanpt expr scanpt as */ { - yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[-2].minor.yy528); - if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[0].minor.yy0, 1); - sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy322,yymsp[-3].minor.yy522,yymsp[-1].minor.yy522); + yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy14, yymsp[-2].minor.yy454); + if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy14, &yymsp[0].minor.yy0, 1); + sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy14,yymsp[-3].minor.yy168,yymsp[-1].minor.yy168); } break; - case 101: /* selcollist ::= sclp scanpt STAR */ + case 103: /* selcollist ::= sclp scanpt STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); sqlite3ExprSetErrorOffset(p, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); - yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, p); + yymsp[-2].minor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy14, p); } break; - case 102: /* selcollist ::= sclp scanpt nm DOT STAR */ + case 104: /* selcollist ::= sclp scanpt nm DOT STAR */ { Expr *pRight, *pLeft, *pDot; pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); sqlite3ExprSetErrorOffset(pRight, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0); pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); - yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, pDot); + yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, pDot); } break; - case 103: /* as ::= AS nm */ - case 115: /* dbnm ::= DOT nm */ yytestcase(yyruleno==115); - case 254: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==254); - case 255: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==255); + case 105: /* as ::= AS nm */ + case 117: /* dbnm ::= DOT nm */ yytestcase(yyruleno==117); + case 258: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==258); + case 259: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==259); {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} break; - case 105: /* from ::= */ - case 108: /* stl_prefix ::= */ yytestcase(yyruleno==108); -{yymsp[1].minor.yy131 = 0;} + case 107: /* from ::= */ + case 110: /* stl_prefix ::= */ yytestcase(yyruleno==110); +{yymsp[1].minor.yy203 = 0;} break; - case 106: /* from ::= FROM seltablist */ + case 108: /* from ::= FROM seltablist */ { - yymsp[-1].minor.yy131 = yymsp[0].minor.yy131; - sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy131); + yymsp[-1].minor.yy203 = yymsp[0].minor.yy203; + sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy203); } break; - case 107: /* stl_prefix ::= seltablist joinop */ + case 109: /* stl_prefix ::= seltablist joinop */ { - if( ALWAYS(yymsp[-1].minor.yy131 && yymsp[-1].minor.yy131->nSrc>0) ) yymsp[-1].minor.yy131->a[yymsp[-1].minor.yy131->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy394; + if( ALWAYS(yymsp[-1].minor.yy203 && yymsp[-1].minor.yy203->nSrc>0) ) yymsp[-1].minor.yy203->a[yymsp[-1].minor.yy203->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy144; } break; - case 109: /* seltablist ::= stl_prefix nm dbnm as on_using */ + case 111: /* seltablist ::= stl_prefix nm dbnm as on_using */ { - yymsp[-4].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy131,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); + yymsp[-4].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy203,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269); } break; - case 110: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ + case 112: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ { - yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy561); - sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy131, &yymsp[-1].minor.yy0); + yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy269); + sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy203, &yymsp[-1].minor.yy0); } break; - case 111: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ + case 113: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ { - yymsp[-7].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy131,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); - sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy131, yymsp[-3].minor.yy322); + yymsp[-7].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy203,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269); + sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy203, yymsp[-3].minor.yy14); } break; - case 112: /* seltablist ::= stl_prefix LP select RP as on_using */ + case 114: /* seltablist ::= stl_prefix LP select RP as on_using */ { - yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy47,&yymsp[0].minor.yy561); + yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy555,&yymsp[0].minor.yy269); } break; - case 113: /* seltablist ::= stl_prefix LP seltablist RP as on_using */ + case 115: /* seltablist ::= stl_prefix LP seltablist RP as on_using */ { - if( yymsp[-5].minor.yy131==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy561.pOn==0 && yymsp[0].minor.yy561.pUsing==0 ){ - yymsp[-5].minor.yy131 = yymsp[-3].minor.yy131; - }else if( ALWAYS(yymsp[-3].minor.yy131!=0) && yymsp[-3].minor.yy131->nSrc==1 ){ - yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); - if( yymsp[-5].minor.yy131 ){ - SrcItem *pNew = &yymsp[-5].minor.yy131->a[yymsp[-5].minor.yy131->nSrc-1]; - SrcItem *pOld = yymsp[-3].minor.yy131->a; + if( yymsp[-5].minor.yy203==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy269.pOn==0 && yymsp[0].minor.yy269.pUsing==0 ){ + yymsp[-5].minor.yy203 = yymsp[-3].minor.yy203; + }else if( ALWAYS(yymsp[-3].minor.yy203!=0) && yymsp[-3].minor.yy203->nSrc==1 ){ + yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy269); + if( yymsp[-5].minor.yy203 ){ + SrcItem *pNew = &yymsp[-5].minor.yy203->a[yymsp[-5].minor.yy203->nSrc-1]; + SrcItem *pOld = yymsp[-3].minor.yy203->a; pNew->zName = pOld->zName; pNew->zDatabase = pOld->zDatabase; pNew->pSelect = pOld->pSelect; @@ -173288,153 +176599,153 @@ static YYACTIONTYPE yy_reduce( pOld->zName = pOld->zDatabase = 0; pOld->pSelect = 0; } - sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy131); + sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy203); }else{ Select *pSubquery; - sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy131); - pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy131,0,0,0,0,SF_NestedFrom,0); - yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy561); + sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy203); + pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy203,0,0,0,0,SF_NestedFrom,0); + yymsp[-5].minor.yy203 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy203,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy269); } } break; - case 114: /* dbnm ::= */ - case 129: /* indexed_opt ::= */ yytestcase(yyruleno==129); + case 116: /* dbnm ::= */ + case 131: /* indexed_opt ::= */ yytestcase(yyruleno==131); {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} break; - case 116: /* fullname ::= nm */ + case 118: /* fullname ::= nm */ { - yylhsminor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); - if( IN_RENAME_OBJECT && yylhsminor.yy131 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy131->a[0].zName, &yymsp[0].minor.yy0); + yylhsminor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); + if( IN_RENAME_OBJECT && yylhsminor.yy203 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy203->a[0].zName, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy131 = yylhsminor.yy131; + yymsp[0].minor.yy203 = yylhsminor.yy203; break; - case 117: /* fullname ::= nm DOT nm */ + case 119: /* fullname ::= nm DOT nm */ { - yylhsminor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); - if( IN_RENAME_OBJECT && yylhsminor.yy131 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy131->a[0].zName, &yymsp[0].minor.yy0); + yylhsminor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); + if( IN_RENAME_OBJECT && yylhsminor.yy203 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy203->a[0].zName, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy131 = yylhsminor.yy131; + yymsp[-2].minor.yy203 = yylhsminor.yy203; break; - case 118: /* xfullname ::= nm */ -{yymsp[0].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} + case 120: /* xfullname ::= nm */ +{yymsp[0].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} break; - case 119: /* xfullname ::= nm DOT nm */ -{yymsp[-2].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 121: /* xfullname ::= nm DOT nm */ +{yymsp[-2].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 120: /* xfullname ::= nm DOT nm AS nm */ + case 122: /* xfullname ::= nm DOT nm AS nm */ { - yymsp[-4].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ - if( yymsp[-4].minor.yy131 ) yymsp[-4].minor.yy131->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); + yymsp[-4].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ + if( yymsp[-4].minor.yy203 ) yymsp[-4].minor.yy203->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); } break; - case 121: /* xfullname ::= nm AS nm */ + case 123: /* xfullname ::= nm AS nm */ { - yymsp[-2].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ - if( yymsp[-2].minor.yy131 ) yymsp[-2].minor.yy131->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); + yymsp[-2].minor.yy203 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ + if( yymsp[-2].minor.yy203 ) yymsp[-2].minor.yy203->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); } break; - case 122: /* joinop ::= COMMA|JOIN */ -{ yymsp[0].minor.yy394 = JT_INNER; } + case 124: /* joinop ::= COMMA|JOIN */ +{ yymsp[0].minor.yy144 = JT_INNER; } break; - case 123: /* joinop ::= JOIN_KW JOIN */ -{yymsp[-1].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} + case 125: /* joinop ::= JOIN_KW JOIN */ +{yymsp[-1].minor.yy144 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} break; - case 124: /* joinop ::= JOIN_KW nm JOIN */ -{yymsp[-2].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} + case 126: /* joinop ::= JOIN_KW nm JOIN */ +{yymsp[-2].minor.yy144 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} break; - case 125: /* joinop ::= JOIN_KW nm nm JOIN */ -{yymsp[-3].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} + case 127: /* joinop ::= JOIN_KW nm nm JOIN */ +{yymsp[-3].minor.yy144 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} break; - case 126: /* on_using ::= ON expr */ -{yymsp[-1].minor.yy561.pOn = yymsp[0].minor.yy528; yymsp[-1].minor.yy561.pUsing = 0;} + case 128: /* on_using ::= ON expr */ +{yymsp[-1].minor.yy269.pOn = yymsp[0].minor.yy454; yymsp[-1].minor.yy269.pUsing = 0;} break; - case 127: /* on_using ::= USING LP idlist RP */ -{yymsp[-3].minor.yy561.pOn = 0; yymsp[-3].minor.yy561.pUsing = yymsp[-1].minor.yy254;} + case 129: /* on_using ::= USING LP idlist RP */ +{yymsp[-3].minor.yy269.pOn = 0; yymsp[-3].minor.yy269.pUsing = yymsp[-1].minor.yy132;} break; - case 128: /* on_using ::= */ -{yymsp[1].minor.yy561.pOn = 0; yymsp[1].minor.yy561.pUsing = 0;} + case 130: /* on_using ::= */ +{yymsp[1].minor.yy269.pOn = 0; yymsp[1].minor.yy269.pUsing = 0;} break; - case 130: /* indexed_by ::= INDEXED BY nm */ + case 132: /* indexed_by ::= INDEXED BY nm */ {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} break; - case 131: /* indexed_by ::= NOT INDEXED */ + case 133: /* indexed_by ::= NOT INDEXED */ {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} break; - case 133: /* orderby_opt ::= ORDER BY sortlist */ - case 143: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==143); -{yymsp[-2].minor.yy322 = yymsp[0].minor.yy322;} + case 135: /* orderby_opt ::= ORDER BY sortlist */ + case 145: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==145); +{yymsp[-2].minor.yy14 = yymsp[0].minor.yy14;} break; - case 134: /* sortlist ::= sortlist COMMA expr sortorder nulls */ + case 136: /* sortlist ::= sortlist COMMA expr sortorder nulls */ { - yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322,yymsp[-2].minor.yy528); - sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy322,yymsp[-1].minor.yy394,yymsp[0].minor.yy394); + yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14,yymsp[-2].minor.yy454); + sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy14,yymsp[-1].minor.yy144,yymsp[0].minor.yy144); } break; - case 135: /* sortlist ::= expr sortorder nulls */ + case 137: /* sortlist ::= expr sortorder nulls */ { - yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy528); /*A-overwrites-Y*/ - sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy322,yymsp[-1].minor.yy394,yymsp[0].minor.yy394); + yymsp[-2].minor.yy14 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy454); /*A-overwrites-Y*/ + sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy14,yymsp[-1].minor.yy144,yymsp[0].minor.yy144); } break; - case 136: /* sortorder ::= ASC */ -{yymsp[0].minor.yy394 = SQLITE_SO_ASC;} + case 138: /* sortorder ::= ASC */ +{yymsp[0].minor.yy144 = SQLITE_SO_ASC;} break; - case 137: /* sortorder ::= DESC */ -{yymsp[0].minor.yy394 = SQLITE_SO_DESC;} + case 139: /* sortorder ::= DESC */ +{yymsp[0].minor.yy144 = SQLITE_SO_DESC;} break; - case 138: /* sortorder ::= */ - case 141: /* nulls ::= */ yytestcase(yyruleno==141); -{yymsp[1].minor.yy394 = SQLITE_SO_UNDEFINED;} + case 140: /* sortorder ::= */ + case 143: /* nulls ::= */ yytestcase(yyruleno==143); +{yymsp[1].minor.yy144 = SQLITE_SO_UNDEFINED;} break; - case 139: /* nulls ::= NULLS FIRST */ -{yymsp[-1].minor.yy394 = SQLITE_SO_ASC;} + case 141: /* nulls ::= NULLS FIRST */ +{yymsp[-1].minor.yy144 = SQLITE_SO_ASC;} break; - case 140: /* nulls ::= NULLS LAST */ -{yymsp[-1].minor.yy394 = SQLITE_SO_DESC;} + case 142: /* nulls ::= NULLS LAST */ +{yymsp[-1].minor.yy144 = SQLITE_SO_DESC;} break; - case 144: /* having_opt ::= */ - case 146: /* limit_opt ::= */ yytestcase(yyruleno==146); - case 151: /* where_opt ::= */ yytestcase(yyruleno==151); - case 153: /* where_opt_ret ::= */ yytestcase(yyruleno==153); - case 228: /* case_else ::= */ yytestcase(yyruleno==228); - case 229: /* case_operand ::= */ yytestcase(yyruleno==229); - case 248: /* vinto ::= */ yytestcase(yyruleno==248); -{yymsp[1].minor.yy528 = 0;} + case 146: /* having_opt ::= */ + case 148: /* limit_opt ::= */ yytestcase(yyruleno==148); + case 153: /* where_opt ::= */ yytestcase(yyruleno==153); + case 155: /* where_opt_ret ::= */ yytestcase(yyruleno==155); + case 232: /* case_else ::= */ yytestcase(yyruleno==232); + case 233: /* case_operand ::= */ yytestcase(yyruleno==233); + case 252: /* vinto ::= */ yytestcase(yyruleno==252); +{yymsp[1].minor.yy454 = 0;} break; - case 145: /* having_opt ::= HAVING expr */ - case 152: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==152); - case 154: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==154); - case 227: /* case_else ::= ELSE expr */ yytestcase(yyruleno==227); - case 247: /* vinto ::= INTO expr */ yytestcase(yyruleno==247); -{yymsp[-1].minor.yy528 = yymsp[0].minor.yy528;} + case 147: /* having_opt ::= HAVING expr */ + case 154: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==154); + case 156: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==156); + case 231: /* case_else ::= ELSE expr */ yytestcase(yyruleno==231); + case 251: /* vinto ::= INTO expr */ yytestcase(yyruleno==251); +{yymsp[-1].minor.yy454 = yymsp[0].minor.yy454;} break; - case 147: /* limit_opt ::= LIMIT expr */ -{yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy528,0);} + case 149: /* limit_opt ::= LIMIT expr */ +{yymsp[-1].minor.yy454 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy454,0);} break; - case 148: /* limit_opt ::= LIMIT expr OFFSET expr */ -{yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} + case 150: /* limit_opt ::= LIMIT expr OFFSET expr */ +{yymsp[-3].minor.yy454 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);} break; - case 149: /* limit_opt ::= LIMIT expr COMMA expr */ -{yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy528,yymsp[-2].minor.yy528);} + case 151: /* limit_opt ::= LIMIT expr COMMA expr */ +{yymsp[-3].minor.yy454 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy454,yymsp[-2].minor.yy454);} break; - case 150: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ + case 152: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ { - sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy131, &yymsp[-1].minor.yy0); - sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy131,yymsp[0].minor.yy528,0,0); + sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy203, &yymsp[-1].minor.yy0); + sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy203,yymsp[0].minor.yy454,0,0); } break; - case 155: /* where_opt_ret ::= RETURNING selcollist */ -{sqlite3AddReturning(pParse,yymsp[0].minor.yy322); yymsp[-1].minor.yy528 = 0;} + case 157: /* where_opt_ret ::= RETURNING selcollist */ +{sqlite3AddReturning(pParse,yymsp[0].minor.yy14); yymsp[-1].minor.yy454 = 0;} break; - case 156: /* where_opt_ret ::= WHERE expr RETURNING selcollist */ -{sqlite3AddReturning(pParse,yymsp[0].minor.yy322); yymsp[-3].minor.yy528 = yymsp[-2].minor.yy528;} + case 158: /* where_opt_ret ::= WHERE expr RETURNING selcollist */ +{sqlite3AddReturning(pParse,yymsp[0].minor.yy14); yymsp[-3].minor.yy454 = yymsp[-2].minor.yy454;} break; - case 157: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ + case 159: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ { - sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy131, &yymsp[-4].minor.yy0); - sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy322,"set list"); - if( yymsp[-1].minor.yy131 ){ - SrcList *pFromClause = yymsp[-1].minor.yy131; + sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy203, &yymsp[-4].minor.yy0); + sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy14,"set list"); + if( yymsp[-1].minor.yy203 ){ + SrcList *pFromClause = yymsp[-1].minor.yy203; if( pFromClause->nSrc>1 ){ Select *pSubquery; Token as; @@ -173443,92 +176754,92 @@ static YYACTIONTYPE yy_reduce( as.z = 0; pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); } - yymsp[-5].minor.yy131 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy131, pFromClause); + yymsp[-5].minor.yy203 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy203, pFromClause); } - sqlite3Update(pParse,yymsp[-5].minor.yy131,yymsp[-2].minor.yy322,yymsp[0].minor.yy528,yymsp[-6].minor.yy394,0,0,0); + sqlite3Update(pParse,yymsp[-5].minor.yy203,yymsp[-2].minor.yy14,yymsp[0].minor.yy454,yymsp[-6].minor.yy144,0,0,0); } break; - case 158: /* setlist ::= setlist COMMA nm EQ expr */ + case 160: /* setlist ::= setlist COMMA nm EQ expr */ { - yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy528); - sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, 1); + yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy14, yymsp[0].minor.yy454); + sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy14, &yymsp[-2].minor.yy0, 1); } break; - case 159: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ + case 161: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ { - yymsp[-6].minor.yy322 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy322, yymsp[-3].minor.yy254, yymsp[0].minor.yy528); + yymsp[-6].minor.yy14 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy14, yymsp[-3].minor.yy132, yymsp[0].minor.yy454); } break; - case 160: /* setlist ::= nm EQ expr */ + case 162: /* setlist ::= nm EQ expr */ { - yylhsminor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy528); - sqlite3ExprListSetName(pParse, yylhsminor.yy322, &yymsp[-2].minor.yy0, 1); + yylhsminor.yy14 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy454); + sqlite3ExprListSetName(pParse, yylhsminor.yy14, &yymsp[-2].minor.yy0, 1); } - yymsp[-2].minor.yy322 = yylhsminor.yy322; + yymsp[-2].minor.yy14 = yylhsminor.yy14; break; - case 161: /* setlist ::= LP idlist RP EQ expr */ + case 163: /* setlist ::= LP idlist RP EQ expr */ { - yymsp[-4].minor.yy322 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy254, yymsp[0].minor.yy528); + yymsp[-4].minor.yy14 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy132, yymsp[0].minor.yy454); } break; - case 162: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + case 164: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ { - sqlite3Insert(pParse, yymsp[-3].minor.yy131, yymsp[-1].minor.yy47, yymsp[-2].minor.yy254, yymsp[-5].minor.yy394, yymsp[0].minor.yy444); + sqlite3Insert(pParse, yymsp[-3].minor.yy203, yymsp[-1].minor.yy555, yymsp[-2].minor.yy132, yymsp[-5].minor.yy144, yymsp[0].minor.yy122); } break; - case 163: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ + case 165: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ { - sqlite3Insert(pParse, yymsp[-4].minor.yy131, 0, yymsp[-3].minor.yy254, yymsp[-6].minor.yy394, 0); + sqlite3Insert(pParse, yymsp[-4].minor.yy203, 0, yymsp[-3].minor.yy132, yymsp[-6].minor.yy144, 0); } break; - case 164: /* upsert ::= */ -{ yymsp[1].minor.yy444 = 0; } + case 166: /* upsert ::= */ +{ yymsp[1].minor.yy122 = 0; } break; - case 165: /* upsert ::= RETURNING selcollist */ -{ yymsp[-1].minor.yy444 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy322); } + case 167: /* upsert ::= RETURNING selcollist */ +{ yymsp[-1].minor.yy122 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy14); } break; - case 166: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ -{ yymsp[-11].minor.yy444 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy322,yymsp[-6].minor.yy528,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528,yymsp[0].minor.yy444);} + case 168: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ +{ yymsp[-11].minor.yy122 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy14,yymsp[-6].minor.yy454,yymsp[-2].minor.yy14,yymsp[-1].minor.yy454,yymsp[0].minor.yy122);} break; - case 167: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ -{ yymsp[-8].minor.yy444 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy322,yymsp[-3].minor.yy528,0,0,yymsp[0].minor.yy444); } + case 169: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ +{ yymsp[-8].minor.yy122 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy14,yymsp[-3].minor.yy454,0,0,yymsp[0].minor.yy122); } break; - case 168: /* upsert ::= ON CONFLICT DO NOTHING returning */ -{ yymsp[-4].minor.yy444 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); } + case 170: /* upsert ::= ON CONFLICT DO NOTHING returning */ +{ yymsp[-4].minor.yy122 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); } break; - case 169: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ -{ yymsp[-7].minor.yy444 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528,0);} + case 171: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ +{ yymsp[-7].minor.yy122 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy14,yymsp[-1].minor.yy454,0);} break; - case 170: /* returning ::= RETURNING selcollist */ -{sqlite3AddReturning(pParse,yymsp[0].minor.yy322);} + case 172: /* returning ::= RETURNING selcollist */ +{sqlite3AddReturning(pParse,yymsp[0].minor.yy14);} break; - case 173: /* idlist_opt ::= */ -{yymsp[1].minor.yy254 = 0;} + case 175: /* idlist_opt ::= */ +{yymsp[1].minor.yy132 = 0;} break; - case 174: /* idlist_opt ::= LP idlist RP */ -{yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;} + case 176: /* idlist_opt ::= LP idlist RP */ +{yymsp[-2].minor.yy132 = yymsp[-1].minor.yy132;} break; - case 175: /* idlist ::= idlist COMMA nm */ -{yymsp[-2].minor.yy254 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);} + case 177: /* idlist ::= idlist COMMA nm */ +{yymsp[-2].minor.yy132 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy132,&yymsp[0].minor.yy0);} break; - case 176: /* idlist ::= nm */ -{yymsp[0].minor.yy254 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} + case 178: /* idlist ::= nm */ +{yymsp[0].minor.yy132 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} break; - case 177: /* expr ::= LP expr RP */ -{yymsp[-2].minor.yy528 = yymsp[-1].minor.yy528;} + case 179: /* expr ::= LP expr RP */ +{yymsp[-2].minor.yy454 = yymsp[-1].minor.yy454;} break; - case 178: /* expr ::= ID|INDEXED|JOIN_KW */ -{yymsp[0].minor.yy528=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 180: /* expr ::= ID|INDEXED|JOIN_KW */ +{yymsp[0].minor.yy454=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 179: /* expr ::= nm DOT nm */ + case 181: /* expr ::= nm DOT nm */ { Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); - yylhsminor.yy528 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); + yylhsminor.yy454 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); } - yymsp[-2].minor.yy528 = yylhsminor.yy528; + yymsp[-2].minor.yy454 = yylhsminor.yy454; break; - case 180: /* expr ::= nm DOT nm DOT nm */ + case 182: /* expr ::= nm DOT nm DOT nm */ { Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0); Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); @@ -173537,27 +176848,27 @@ static YYACTIONTYPE yy_reduce( if( IN_RENAME_OBJECT ){ sqlite3RenameTokenRemap(pParse, 0, temp1); } - yylhsminor.yy528 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); + yylhsminor.yy454 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); } - yymsp[-4].minor.yy528 = yylhsminor.yy528; + yymsp[-4].minor.yy454 = yylhsminor.yy454; break; - case 181: /* term ::= NULL|FLOAT|BLOB */ - case 182: /* term ::= STRING */ yytestcase(yyruleno==182); -{yymsp[0].minor.yy528=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 183: /* term ::= NULL|FLOAT|BLOB */ + case 184: /* term ::= STRING */ yytestcase(yyruleno==184); +{yymsp[0].minor.yy454=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 183: /* term ::= INTEGER */ + case 185: /* term ::= INTEGER */ { - yylhsminor.yy528 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); - if( yylhsminor.yy528 ) yylhsminor.yy528->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail); + yylhsminor.yy454 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); + if( yylhsminor.yy454 ) yylhsminor.yy454->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail); } - yymsp[0].minor.yy528 = yylhsminor.yy528; + yymsp[0].minor.yy454 = yylhsminor.yy454; break; - case 184: /* expr ::= VARIABLE */ + case 186: /* expr ::= VARIABLE */ { if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ u32 n = yymsp[0].minor.yy0.n; - yymsp[0].minor.yy528 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); - sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy528, n); + yymsp[0].minor.yy454 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); + sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy454, n); }else{ /* When doing a nested parse, one can include terms in an expression ** that look like this: #1 #2 ... These terms refer to registers @@ -173566,179 +176877,203 @@ static YYACTIONTYPE yy_reduce( assert( t.n>=2 ); if( pParse->nested==0 ){ sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t); - yymsp[0].minor.yy528 = 0; + yymsp[0].minor.yy454 = 0; }else{ - yymsp[0].minor.yy528 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); - if( yymsp[0].minor.yy528 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy528->iTable); + yymsp[0].minor.yy454 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); + if( yymsp[0].minor.yy454 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy454->iTable); } } } break; - case 185: /* expr ::= expr COLLATE ID|STRING */ + case 187: /* expr ::= expr COLLATE ID|STRING */ { - yymsp[-2].minor.yy528 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy528, &yymsp[0].minor.yy0, 1); + yymsp[-2].minor.yy454 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy454, &yymsp[0].minor.yy0, 1); } break; - case 186: /* expr ::= CAST LP expr AS typetoken RP */ + case 188: /* expr ::= CAST LP expr AS typetoken RP */ { - yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); - sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy528, yymsp[-3].minor.yy528, 0); + yymsp[-5].minor.yy454 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); + sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy454, yymsp[-3].minor.yy454, 0); } break; - case 187: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + case 189: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ { - yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy394); + yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy14, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy144); } - yymsp[-4].minor.yy528 = yylhsminor.yy528; + yymsp[-4].minor.yy454 = yylhsminor.yy454; break; - case 188: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + case 190: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ { - yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); + yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy14, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy144); + sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy454, yymsp[-1].minor.yy14); } - yymsp[-3].minor.yy528 = yylhsminor.yy528; + yymsp[-7].minor.yy454 = yylhsminor.yy454; break; - case 189: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + case 191: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ { - yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy322, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy394); - sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41); + yylhsminor.yy454 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); } - yymsp[-5].minor.yy528 = yylhsminor.yy528; + yymsp[-3].minor.yy454 = yylhsminor.yy454; break; - case 190: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + case 192: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ { - yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); - sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41); + yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy14, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy144); + sqlite3WindowAttach(pParse, yylhsminor.yy454, yymsp[0].minor.yy211); } - yymsp[-4].minor.yy528 = yylhsminor.yy528; + yymsp[-5].minor.yy454 = yylhsminor.yy454; break; - case 191: /* term ::= CTIME_KW */ + case 193: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ { - yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); + yylhsminor.yy454 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy14, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy144); + sqlite3WindowAttach(pParse, yylhsminor.yy454, yymsp[0].minor.yy211); + sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy454, yymsp[-2].minor.yy14); } - yymsp[0].minor.yy528 = yylhsminor.yy528; + yymsp[-8].minor.yy454 = yylhsminor.yy454; break; - case 192: /* expr ::= LP nexprlist COMMA expr RP */ + case 194: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ { - ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528); - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); - if( yymsp[-4].minor.yy528 ){ - yymsp[-4].minor.yy528->x.pList = pList; + yylhsminor.yy454 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); + sqlite3WindowAttach(pParse, yylhsminor.yy454, yymsp[0].minor.yy211); +} + yymsp[-4].minor.yy454 = yylhsminor.yy454; + break; + case 195: /* term ::= CTIME_KW */ +{ + yylhsminor.yy454 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); +} + yymsp[0].minor.yy454 = yylhsminor.yy454; + break; + case 196: /* expr ::= LP nexprlist COMMA expr RP */ +{ + ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy14, yymsp[-1].minor.yy454); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( yymsp[-4].minor.yy454 ){ + yymsp[-4].minor.yy454->x.pList = pList; if( ALWAYS(pList->nExpr) ){ - yymsp[-4].minor.yy528->flags |= pList->a[0].pExpr->flags & EP_Propagate; + yymsp[-4].minor.yy454->flags |= pList->a[0].pExpr->flags & EP_Propagate; } }else{ sqlite3ExprListDelete(pParse->db, pList); } } break; - case 193: /* expr ::= expr AND expr */ -{yymsp[-2].minor.yy528=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} + case 197: /* expr ::= expr AND expr */ +{yymsp[-2].minor.yy454=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);} break; - case 194: /* expr ::= expr OR expr */ - case 195: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==195); - case 196: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==196); - case 197: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==197); - case 198: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==198); - case 199: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==199); - case 200: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==200); -{yymsp[-2].minor.yy528=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} + case 198: /* expr ::= expr OR expr */ + case 199: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==199); + case 200: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==200); + case 201: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==201); + case 202: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==202); + case 203: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==203); + case 204: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==204); +{yymsp[-2].minor.yy454=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy454,yymsp[0].minor.yy454);} break; - case 201: /* likeop ::= NOT LIKE_KW|MATCH */ + case 205: /* likeop ::= NOT LIKE_KW|MATCH */ {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} break; - case 202: /* expr ::= expr likeop expr */ + case 206: /* expr ::= expr likeop expr */ { ExprList *pList; int bNot = yymsp[-1].minor.yy0.n & 0x80000000; yymsp[-1].minor.yy0.n &= 0x7fffffff; - pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy528); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy528); - yymsp[-2].minor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); - if( bNot ) yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy528, 0); - if( yymsp[-2].minor.yy528 ) yymsp[-2].minor.yy528->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy454); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy454); + yymsp[-2].minor.yy454 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); + if( bNot ) yymsp[-2].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy454, 0); + if( yymsp[-2].minor.yy454 ) yymsp[-2].minor.yy454->flags |= EP_InfixFunc; } break; - case 203: /* expr ::= expr likeop expr ESCAPE expr */ + case 207: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; int bNot = yymsp[-3].minor.yy0.n & 0x80000000; yymsp[-3].minor.yy0.n &= 0x7fffffff; - pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy528); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528); - yymsp[-4].minor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0); - if( bNot ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); - if( yymsp[-4].minor.yy528 ) yymsp[-4].minor.yy528->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy454); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy454); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy454); + yymsp[-4].minor.yy454 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0); + if( bNot ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0); + if( yymsp[-4].minor.yy454 ) yymsp[-4].minor.yy454->flags |= EP_InfixFunc; } break; - case 204: /* expr ::= expr ISNULL|NOTNULL */ -{yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy528,0);} + case 208: /* expr ::= expr ISNULL|NOTNULL */ +{yymsp[-1].minor.yy454 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy454,0);} break; - case 205: /* expr ::= expr NOT NULL */ -{yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy528,0);} + case 209: /* expr ::= expr NOT NULL */ +{yymsp[-2].minor.yy454 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy454,0);} break; - case 206: /* expr ::= expr IS expr */ + case 210: /* expr ::= expr IS expr */ { - yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy528,yymsp[0].minor.yy528); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-2].minor.yy528, TK_ISNULL); + yymsp[-2].minor.yy454 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy454,yymsp[0].minor.yy454); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-2].minor.yy454, TK_ISNULL); } break; - case 207: /* expr ::= expr IS NOT expr */ + case 211: /* expr ::= expr IS NOT expr */ { - yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy528,yymsp[0].minor.yy528); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-3].minor.yy528, TK_NOTNULL); + yymsp[-3].minor.yy454 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy454,yymsp[0].minor.yy454); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-3].minor.yy454, TK_NOTNULL); } break; - case 208: /* expr ::= expr IS NOT DISTINCT FROM expr */ + case 212: /* expr ::= expr IS NOT DISTINCT FROM expr */ { - yymsp[-5].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy528,yymsp[0].minor.yy528); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-5].minor.yy528, TK_ISNULL); + yymsp[-5].minor.yy454 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy454,yymsp[0].minor.yy454); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-5].minor.yy454, TK_ISNULL); } break; - case 209: /* expr ::= expr IS DISTINCT FROM expr */ + case 213: /* expr ::= expr IS DISTINCT FROM expr */ { - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy528,yymsp[0].minor.yy528); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-4].minor.yy528, TK_NOTNULL); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy454,yymsp[0].minor.yy454); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy454, yymsp[-4].minor.yy454, TK_NOTNULL); } break; - case 210: /* expr ::= NOT expr */ - case 211: /* expr ::= BITNOT expr */ yytestcase(yyruleno==211); -{yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy528, 0);/*A-overwrites-B*/} + case 214: /* expr ::= NOT expr */ + case 215: /* expr ::= BITNOT expr */ yytestcase(yyruleno==215); +{yymsp[-1].minor.yy454 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy454, 0);/*A-overwrites-B*/} break; - case 212: /* expr ::= PLUS|MINUS expr */ + case 216: /* expr ::= PLUS|MINUS expr */ { - yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy528, 0); - /*A-overwrites-B*/ + Expr *p = yymsp[0].minor.yy454; + u8 op = yymsp[-1].major + (TK_UPLUS-TK_PLUS); + assert( TK_UPLUS>TK_PLUS ); + assert( TK_UMINUS == TK_MINUS + (TK_UPLUS - TK_PLUS) ); + if( p && p->op==TK_UPLUS ){ + p->op = op; + yymsp[-1].minor.yy454 = p; + }else{ + yymsp[-1].minor.yy454 = sqlite3PExpr(pParse, op, p, 0); + /*A-overwrites-B*/ + } } break; - case 213: /* expr ::= expr PTR expr */ + case 217: /* expr ::= expr PTR expr */ { - ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy528); - pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy528); - yylhsminor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); + ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy454); + pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy454); + yylhsminor.yy454 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); } - yymsp[-2].minor.yy528 = yylhsminor.yy528; + yymsp[-2].minor.yy454 = yylhsminor.yy454; break; - case 214: /* between_op ::= BETWEEN */ - case 217: /* in_op ::= IN */ yytestcase(yyruleno==217); -{yymsp[0].minor.yy394 = 0;} + case 218: /* between_op ::= BETWEEN */ + case 221: /* in_op ::= IN */ yytestcase(yyruleno==221); +{yymsp[0].minor.yy144 = 0;} break; - case 216: /* expr ::= expr between_op expr AND expr */ + case 220: /* expr ::= expr between_op expr AND expr */ { - ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528); - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy528, 0); - if( yymsp[-4].minor.yy528 ){ - yymsp[-4].minor.yy528->x.pList = pList; + ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy454); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy454); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy454, 0); + if( yymsp[-4].minor.yy454 ){ + yymsp[-4].minor.yy454->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } - if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); + if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0); } break; - case 219: /* expr ::= expr in_op LP exprlist RP */ + case 223: /* expr ::= expr in_op LP exprlist RP */ { - if( yymsp[-1].minor.yy322==0 ){ + if( yymsp[-1].minor.yy14==0 ){ /* Expressions of the form ** ** expr1 IN () @@ -173747,208 +177082,208 @@ static YYACTIONTYPE yy_reduce( ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ - sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy528); - yymsp[-4].minor.yy528 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy394 ? "true" : "false"); - if( yymsp[-4].minor.yy528 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy528); - }else{ - Expr *pRHS = yymsp[-1].minor.yy322->a[0].pExpr; - if( yymsp[-1].minor.yy322->nExpr==1 && sqlite3ExprIsConstant(pRHS) && yymsp[-4].minor.yy528->op!=TK_VECTOR ){ - yymsp[-1].minor.yy322->a[0].pExpr = 0; - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); + sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy454); + yymsp[-4].minor.yy454 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy144 ? "true" : "false"); + if( yymsp[-4].minor.yy454 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy454); + }else{ + Expr *pRHS = yymsp[-1].minor.yy14->a[0].pExpr; + if( yymsp[-1].minor.yy14->nExpr==1 && sqlite3ExprIsConstant(pParse,pRHS) && yymsp[-4].minor.yy454->op!=TK_VECTOR ){ + yymsp[-1].minor.yy14->a[0].pExpr = 0; + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14); pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0); - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy528, pRHS); - }else if( yymsp[-1].minor.yy322->nExpr==1 && pRHS->op==TK_SELECT ){ - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pRHS->x.pSelect); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy454, pRHS); + }else if( yymsp[-1].minor.yy14->nExpr==1 && pRHS->op==TK_SELECT ){ + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, pRHS->x.pSelect); pRHS->x.pSelect = 0; - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); - }else{ - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); - if( yymsp[-4].minor.yy528==0 ){ - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); - }else if( yymsp[-4].minor.yy528->pLeft->op==TK_VECTOR ){ - int nExpr = yymsp[-4].minor.yy528->pLeft->x.pList->nExpr; - Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy322); + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14); + }else{ + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0); + if( yymsp[-4].minor.yy454==0 ){ + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy14); + }else if( yymsp[-4].minor.yy454->pLeft->op==TK_VECTOR ){ + int nExpr = yymsp[-4].minor.yy454->pLeft->x.pList->nExpr; + Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy14); if( pSelectRHS ){ parserDoubleLinkSelect(pParse, pSelectRHS); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pSelectRHS); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, pSelectRHS); } }else{ - yymsp[-4].minor.yy528->x.pList = yymsp[-1].minor.yy322; - sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy528); + yymsp[-4].minor.yy454->x.pList = yymsp[-1].minor.yy14; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy454); } } - if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); + if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0); } } break; - case 220: /* expr ::= LP select RP */ + case 224: /* expr ::= LP select RP */ { - yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); - sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy528, yymsp[-1].minor.yy47); + yymsp[-2].minor.yy454 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy454, yymsp[-1].minor.yy555); } break; - case 221: /* expr ::= expr in_op LP select RP */ + case 225: /* expr ::= expr in_op LP select RP */ { - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, yymsp[-1].minor.yy47); - if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, yymsp[-1].minor.yy555); + if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0); } break; - case 222: /* expr ::= expr in_op nm dbnm paren_exprlist */ + case 226: /* expr ::= expr in_op nm dbnm paren_exprlist */ { SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); - if( yymsp[0].minor.yy322 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy322); - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pSelect); - if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); + if( yymsp[0].minor.yy14 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy14); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy454, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy454, pSelect); + if( yymsp[-3].minor.yy144 ) yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy454, 0); } break; - case 223: /* expr ::= EXISTS LP select RP */ + case 227: /* expr ::= EXISTS LP select RP */ { Expr *p; - p = yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); - sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy47); + p = yymsp[-3].minor.yy454 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); + sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy555); } break; - case 224: /* expr ::= CASE case_operand case_exprlist case_else END */ + case 228: /* expr ::= CASE case_operand case_exprlist case_else END */ { - yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy528, 0); - if( yymsp[-4].minor.yy528 ){ - yymsp[-4].minor.yy528->x.pList = yymsp[-1].minor.yy528 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528) : yymsp[-2].minor.yy322; - sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy528); + yymsp[-4].minor.yy454 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy454, 0); + if( yymsp[-4].minor.yy454 ){ + yymsp[-4].minor.yy454->x.pList = yymsp[-1].minor.yy454 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy14,yymsp[-1].minor.yy454) : yymsp[-2].minor.yy14; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy454); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322); - sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy528); + sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy14); + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy454); } } break; - case 225: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ + case 229: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { - yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy528); - yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[0].minor.yy528); + yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, yymsp[-2].minor.yy454); + yymsp[-4].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy14, yymsp[0].minor.yy454); } break; - case 226: /* case_exprlist ::= WHEN expr THEN expr */ + case 230: /* case_exprlist ::= WHEN expr THEN expr */ { - yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); - yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, yymsp[0].minor.yy528); + yymsp[-3].minor.yy14 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy454); + yymsp[-3].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy14, yymsp[0].minor.yy454); } break; - case 231: /* nexprlist ::= nexprlist COMMA expr */ -{yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy528);} + case 235: /* nexprlist ::= nexprlist COMMA expr */ +{yymsp[-2].minor.yy14 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy14,yymsp[0].minor.yy454);} break; - case 232: /* nexprlist ::= expr */ -{yymsp[0].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy528); /*A-overwrites-Y*/} + case 236: /* nexprlist ::= expr */ +{yymsp[0].minor.yy14 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy454); /*A-overwrites-Y*/} break; - case 234: /* paren_exprlist ::= LP exprlist RP */ - case 239: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==239); -{yymsp[-2].minor.yy322 = yymsp[-1].minor.yy322;} + case 238: /* paren_exprlist ::= LP exprlist RP */ + case 243: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==243); +{yymsp[-2].minor.yy14 = yymsp[-1].minor.yy14;} break; - case 235: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + case 239: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, - sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy322, yymsp[-10].minor.yy394, - &yymsp[-11].minor.yy0, yymsp[0].minor.yy528, SQLITE_SO_ASC, yymsp[-8].minor.yy394, SQLITE_IDXTYPE_APPDEF); + sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy14, yymsp[-10].minor.yy144, + &yymsp[-11].minor.yy0, yymsp[0].minor.yy454, SQLITE_SO_ASC, yymsp[-8].minor.yy144, SQLITE_IDXTYPE_APPDEF); if( IN_RENAME_OBJECT && pParse->pNewIndex ){ sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0); } } break; - case 236: /* uniqueflag ::= UNIQUE */ - case 278: /* raisetype ::= ABORT */ yytestcase(yyruleno==278); -{yymsp[0].minor.yy394 = OE_Abort;} + case 240: /* uniqueflag ::= UNIQUE */ + case 282: /* raisetype ::= ABORT */ yytestcase(yyruleno==282); +{yymsp[0].minor.yy144 = OE_Abort;} break; - case 237: /* uniqueflag ::= */ -{yymsp[1].minor.yy394 = OE_None;} + case 241: /* uniqueflag ::= */ +{yymsp[1].minor.yy144 = OE_None;} break; - case 240: /* eidlist ::= eidlist COMMA nm collate sortorder */ + case 244: /* eidlist ::= eidlist COMMA nm collate sortorder */ { - yymsp[-4].minor.yy322 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); + yymsp[-4].minor.yy14 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy14, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy144, yymsp[0].minor.yy144); } break; - case 241: /* eidlist ::= nm collate sortorder */ + case 245: /* eidlist ::= nm collate sortorder */ { - yymsp[-2].minor.yy322 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); /*A-overwrites-Y*/ + yymsp[-2].minor.yy14 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy144, yymsp[0].minor.yy144); /*A-overwrites-Y*/ } break; - case 244: /* cmd ::= DROP INDEX ifexists fullname */ -{sqlite3DropIndex(pParse, yymsp[0].minor.yy131, yymsp[-1].minor.yy394);} + case 248: /* cmd ::= DROP INDEX ifexists fullname */ +{sqlite3DropIndex(pParse, yymsp[0].minor.yy203, yymsp[-1].minor.yy144);} break; - case 245: /* cmd ::= VACUUM vinto */ -{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy528);} + case 249: /* cmd ::= VACUUM vinto */ +{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy454);} break; - case 246: /* cmd ::= VACUUM nm vinto */ -{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy528);} + case 250: /* cmd ::= VACUUM nm vinto */ +{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy454);} break; - case 249: /* cmd ::= PRAGMA nm dbnm */ + case 253: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; - case 250: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ + case 254: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; - case 251: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ + case 255: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} break; - case 252: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ + case 256: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} break; - case 253: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ + case 257: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; - case 256: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + case 260: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { Token all; all.z = yymsp[-3].minor.yy0.z; all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; - sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy33, &all); + sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy427, &all); } break; - case 257: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + case 261: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { - sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy394, yymsp[-4].minor.yy180.a, yymsp[-4].minor.yy180.b, yymsp[-2].minor.yy131, yymsp[0].minor.yy528, yymsp[-10].minor.yy394, yymsp[-8].minor.yy394); + sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy144, yymsp[-4].minor.yy286.a, yymsp[-4].minor.yy286.b, yymsp[-2].minor.yy203, yymsp[0].minor.yy454, yymsp[-10].minor.yy144, yymsp[-8].minor.yy144); yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ } break; - case 258: /* trigger_time ::= BEFORE|AFTER */ -{ yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/ } + case 262: /* trigger_time ::= BEFORE|AFTER */ +{ yymsp[0].minor.yy144 = yymsp[0].major; /*A-overwrites-X*/ } break; - case 259: /* trigger_time ::= INSTEAD OF */ -{ yymsp[-1].minor.yy394 = TK_INSTEAD;} + case 263: /* trigger_time ::= INSTEAD OF */ +{ yymsp[-1].minor.yy144 = TK_INSTEAD;} break; - case 260: /* trigger_time ::= */ -{ yymsp[1].minor.yy394 = TK_BEFORE; } + case 264: /* trigger_time ::= */ +{ yymsp[1].minor.yy144 = TK_BEFORE; } break; - case 261: /* trigger_event ::= DELETE|INSERT */ - case 262: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==262); -{yymsp[0].minor.yy180.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy180.b = 0;} + case 265: /* trigger_event ::= DELETE|INSERT */ + case 266: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==266); +{yymsp[0].minor.yy286.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy286.b = 0;} break; - case 263: /* trigger_event ::= UPDATE OF idlist */ -{yymsp[-2].minor.yy180.a = TK_UPDATE; yymsp[-2].minor.yy180.b = yymsp[0].minor.yy254;} + case 267: /* trigger_event ::= UPDATE OF idlist */ +{yymsp[-2].minor.yy286.a = TK_UPDATE; yymsp[-2].minor.yy286.b = yymsp[0].minor.yy132;} break; - case 264: /* when_clause ::= */ - case 283: /* key_opt ::= */ yytestcase(yyruleno==283); -{ yymsp[1].minor.yy528 = 0; } + case 268: /* when_clause ::= */ + case 287: /* key_opt ::= */ yytestcase(yyruleno==287); +{ yymsp[1].minor.yy454 = 0; } break; - case 265: /* when_clause ::= WHEN expr */ - case 284: /* key_opt ::= KEY expr */ yytestcase(yyruleno==284); -{ yymsp[-1].minor.yy528 = yymsp[0].minor.yy528; } + case 269: /* when_clause ::= WHEN expr */ + case 288: /* key_opt ::= KEY expr */ yytestcase(yyruleno==288); +{ yymsp[-1].minor.yy454 = yymsp[0].minor.yy454; } break; - case 266: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + case 270: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { - assert( yymsp[-2].minor.yy33!=0 ); - yymsp[-2].minor.yy33->pLast->pNext = yymsp[-1].minor.yy33; - yymsp[-2].minor.yy33->pLast = yymsp[-1].minor.yy33; + assert( yymsp[-2].minor.yy427!=0 ); + yymsp[-2].minor.yy427->pLast->pNext = yymsp[-1].minor.yy427; + yymsp[-2].minor.yy427->pLast = yymsp[-1].minor.yy427; } break; - case 267: /* trigger_cmd_list ::= trigger_cmd SEMI */ + case 271: /* trigger_cmd_list ::= trigger_cmd SEMI */ { - assert( yymsp[-1].minor.yy33!=0 ); - yymsp[-1].minor.yy33->pLast = yymsp[-1].minor.yy33; + assert( yymsp[-1].minor.yy427!=0 ); + yymsp[-1].minor.yy427->pLast = yymsp[-1].minor.yy427; } break; - case 268: /* trnm ::= nm DOT nm */ + case 272: /* trnm ::= nm DOT nm */ { yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, @@ -173956,367 +177291,377 @@ static YYACTIONTYPE yy_reduce( "statements within triggers"); } break; - case 269: /* tridxby ::= INDEXED BY nm */ + case 273: /* tridxby ::= INDEXED BY nm */ { sqlite3ErrorMsg(pParse, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 270: /* tridxby ::= NOT INDEXED */ + case 274: /* tridxby ::= NOT INDEXED */ { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 271: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ -{yylhsminor.yy33 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy131, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528, yymsp[-7].minor.yy394, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy522);} - yymsp[-8].minor.yy33 = yylhsminor.yy33; + case 275: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ +{yylhsminor.yy427 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy203, yymsp[-3].minor.yy14, yymsp[-1].minor.yy454, yymsp[-7].minor.yy144, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy168);} + yymsp[-8].minor.yy427 = yylhsminor.yy427; break; - case 272: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + case 276: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ { - yylhsminor.yy33 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy254,yymsp[-2].minor.yy47,yymsp[-6].minor.yy394,yymsp[-1].minor.yy444,yymsp[-7].minor.yy522,yymsp[0].minor.yy522);/*yylhsminor.yy33-overwrites-yymsp[-6].minor.yy394*/ + yylhsminor.yy427 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy132,yymsp[-2].minor.yy555,yymsp[-6].minor.yy144,yymsp[-1].minor.yy122,yymsp[-7].minor.yy168,yymsp[0].minor.yy168);/*yylhsminor.yy427-overwrites-yymsp[-6].minor.yy144*/ } - yymsp[-7].minor.yy33 = yylhsminor.yy33; + yymsp[-7].minor.yy427 = yylhsminor.yy427; break; - case 273: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ -{yylhsminor.yy33 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy528, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy522);} - yymsp[-5].minor.yy33 = yylhsminor.yy33; + case 277: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ +{yylhsminor.yy427 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy454, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy168);} + yymsp[-5].minor.yy427 = yylhsminor.yy427; break; - case 274: /* trigger_cmd ::= scanpt select scanpt */ -{yylhsminor.yy33 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy47, yymsp[-2].minor.yy522, yymsp[0].minor.yy522); /*yylhsminor.yy33-overwrites-yymsp[-1].minor.yy47*/} - yymsp[-2].minor.yy33 = yylhsminor.yy33; + case 278: /* trigger_cmd ::= scanpt select scanpt */ +{yylhsminor.yy427 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy555, yymsp[-2].minor.yy168, yymsp[0].minor.yy168); /*yylhsminor.yy427-overwrites-yymsp[-1].minor.yy555*/} + yymsp[-2].minor.yy427 = yylhsminor.yy427; break; - case 275: /* expr ::= RAISE LP IGNORE RP */ + case 279: /* expr ::= RAISE LP IGNORE RP */ { - yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); - if( yymsp[-3].minor.yy528 ){ - yymsp[-3].minor.yy528->affExpr = OE_Ignore; + yymsp[-3].minor.yy454 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); + if( yymsp[-3].minor.yy454 ){ + yymsp[-3].minor.yy454->affExpr = OE_Ignore; } } break; - case 276: /* expr ::= RAISE LP raisetype COMMA nm RP */ + case 280: /* expr ::= RAISE LP raisetype COMMA nm RP */ { - yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); - if( yymsp[-5].minor.yy528 ) { - yymsp[-5].minor.yy528->affExpr = (char)yymsp[-3].minor.yy394; + yymsp[-5].minor.yy454 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); + if( yymsp[-5].minor.yy454 ) { + yymsp[-5].minor.yy454->affExpr = (char)yymsp[-3].minor.yy144; } } break; - case 277: /* raisetype ::= ROLLBACK */ -{yymsp[0].minor.yy394 = OE_Rollback;} + case 281: /* raisetype ::= ROLLBACK */ +{yymsp[0].minor.yy144 = OE_Rollback;} break; - case 279: /* raisetype ::= FAIL */ -{yymsp[0].minor.yy394 = OE_Fail;} + case 283: /* raisetype ::= FAIL */ +{yymsp[0].minor.yy144 = OE_Fail;} break; - case 280: /* cmd ::= DROP TRIGGER ifexists fullname */ + case 284: /* cmd ::= DROP TRIGGER ifexists fullname */ { - sqlite3DropTrigger(pParse,yymsp[0].minor.yy131,yymsp[-1].minor.yy394); + sqlite3DropTrigger(pParse,yymsp[0].minor.yy203,yymsp[-1].minor.yy144); } break; - case 281: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + case 285: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { - sqlite3Attach(pParse, yymsp[-3].minor.yy528, yymsp[-1].minor.yy528, yymsp[0].minor.yy528); + sqlite3Attach(pParse, yymsp[-3].minor.yy454, yymsp[-1].minor.yy454, yymsp[0].minor.yy454); } break; - case 282: /* cmd ::= DETACH database_kw_opt expr */ + case 286: /* cmd ::= DETACH database_kw_opt expr */ { - sqlite3Detach(pParse, yymsp[0].minor.yy528); + sqlite3Detach(pParse, yymsp[0].minor.yy454); } break; - case 285: /* cmd ::= REINDEX */ + case 289: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; - case 286: /* cmd ::= REINDEX nm dbnm */ + case 290: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 287: /* cmd ::= ANALYZE */ + case 291: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; - case 288: /* cmd ::= ANALYZE nm dbnm */ + case 292: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 289: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ + case 293: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { - sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy131,&yymsp[0].minor.yy0); + sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy203,&yymsp[0].minor.yy0); } break; - case 290: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + case 294: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); } break; - case 291: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + case 295: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ { - sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy131, &yymsp[0].minor.yy0); + sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy203, &yymsp[0].minor.yy0); } break; - case 292: /* add_column_fullname ::= fullname */ + case 296: /* add_column_fullname ::= fullname */ { disableLookaside(pParse); - sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy131); + sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy203); } break; - case 293: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + case 297: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ { - sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy131, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); + sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy203, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 294: /* cmd ::= create_vtab */ + case 298: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; - case 295: /* cmd ::= create_vtab LP vtabarglist RP */ + case 299: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; - case 296: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + case 300: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { - sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy394); + sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy144); } break; - case 297: /* vtabarg ::= */ + case 301: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; - case 298: /* vtabargtoken ::= ANY */ - case 299: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==299); - case 300: /* lp ::= LP */ yytestcase(yyruleno==300); + case 302: /* vtabargtoken ::= ANY */ + case 303: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==303); + case 304: /* lp ::= LP */ yytestcase(yyruleno==304); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; - case 301: /* with ::= WITH wqlist */ - case 302: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==302); -{ sqlite3WithPush(pParse, yymsp[0].minor.yy521, 1); } + case 305: /* with ::= WITH wqlist */ + case 306: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==306); +{ sqlite3WithPush(pParse, yymsp[0].minor.yy59, 1); } break; - case 303: /* wqas ::= AS */ -{yymsp[0].minor.yy516 = M10d_Any;} + case 307: /* wqas ::= AS */ +{yymsp[0].minor.yy462 = M10d_Any;} break; - case 304: /* wqas ::= AS MATERIALIZED */ -{yymsp[-1].minor.yy516 = M10d_Yes;} + case 308: /* wqas ::= AS MATERIALIZED */ +{yymsp[-1].minor.yy462 = M10d_Yes;} break; - case 305: /* wqas ::= AS NOT MATERIALIZED */ -{yymsp[-2].minor.yy516 = M10d_No;} + case 309: /* wqas ::= AS NOT MATERIALIZED */ +{yymsp[-2].minor.yy462 = M10d_No;} break; - case 306: /* wqitem ::= nm eidlist_opt wqas LP select RP */ + case 310: /* wqitem ::= withnm eidlist_opt wqas LP select RP */ { - yymsp[-5].minor.yy385 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy47, yymsp[-3].minor.yy516); /*A-overwrites-X*/ + yymsp[-5].minor.yy67 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy14, yymsp[-1].minor.yy555, yymsp[-3].minor.yy462); /*A-overwrites-X*/ } break; - case 307: /* wqlist ::= wqitem */ + case 311: /* withnm ::= nm */ +{pParse->bHasWith = 1;} + break; + case 312: /* wqlist ::= wqitem */ { - yymsp[0].minor.yy521 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy385); /*A-overwrites-X*/ + yymsp[0].minor.yy59 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy67); /*A-overwrites-X*/ } break; - case 308: /* wqlist ::= wqlist COMMA wqitem */ + case 313: /* wqlist ::= wqlist COMMA wqitem */ { - yymsp[-2].minor.yy521 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy521, yymsp[0].minor.yy385); + yymsp[-2].minor.yy59 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy59, yymsp[0].minor.yy67); } break; - case 309: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ + case 314: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ { - assert( yymsp[0].minor.yy41!=0 ); - sqlite3WindowChain(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy41); - yymsp[0].minor.yy41->pNextWin = yymsp[-2].minor.yy41; - yylhsminor.yy41 = yymsp[0].minor.yy41; + assert( yymsp[0].minor.yy211!=0 ); + sqlite3WindowChain(pParse, yymsp[0].minor.yy211, yymsp[-2].minor.yy211); + yymsp[0].minor.yy211->pNextWin = yymsp[-2].minor.yy211; + yylhsminor.yy211 = yymsp[0].minor.yy211; } - yymsp[-2].minor.yy41 = yylhsminor.yy41; + yymsp[-2].minor.yy211 = yylhsminor.yy211; break; - case 310: /* windowdefn ::= nm AS LP window RP */ + case 315: /* windowdefn ::= nm AS LP window RP */ { - if( ALWAYS(yymsp[-1].minor.yy41) ){ - yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n); + if( ALWAYS(yymsp[-1].minor.yy211) ){ + yymsp[-1].minor.yy211->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n); } - yylhsminor.yy41 = yymsp[-1].minor.yy41; + yylhsminor.yy211 = yymsp[-1].minor.yy211; } - yymsp[-4].minor.yy41 = yylhsminor.yy41; + yymsp[-4].minor.yy211 = yylhsminor.yy211; break; - case 311: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + case 316: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ { - yymsp[-4].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, 0); + yymsp[-4].minor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, yymsp[-2].minor.yy14, yymsp[-1].minor.yy14, 0); } break; - case 312: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + case 317: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ { - yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, &yymsp[-5].minor.yy0); + yylhsminor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, yymsp[-2].minor.yy14, yymsp[-1].minor.yy14, &yymsp[-5].minor.yy0); } - yymsp[-5].minor.yy41 = yylhsminor.yy41; + yymsp[-5].minor.yy211 = yylhsminor.yy211; break; - case 313: /* window ::= ORDER BY sortlist frame_opt */ + case 318: /* window ::= ORDER BY sortlist frame_opt */ { - yymsp[-3].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, 0); + yymsp[-3].minor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, 0, yymsp[-1].minor.yy14, 0); } break; - case 314: /* window ::= nm ORDER BY sortlist frame_opt */ + case 319: /* window ::= nm ORDER BY sortlist frame_opt */ { - yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0); + yylhsminor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, 0, yymsp[-1].minor.yy14, &yymsp[-4].minor.yy0); } - yymsp[-4].minor.yy41 = yylhsminor.yy41; + yymsp[-4].minor.yy211 = yylhsminor.yy211; break; - case 315: /* window ::= nm frame_opt */ + case 320: /* window ::= nm frame_opt */ { - yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, 0, &yymsp[-1].minor.yy0); + yylhsminor.yy211 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy211, 0, 0, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy41 = yylhsminor.yy41; + yymsp[-1].minor.yy211 = yylhsminor.yy211; break; - case 316: /* frame_opt ::= */ + case 321: /* frame_opt ::= */ { - yymsp[1].minor.yy41 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); + yymsp[1].minor.yy211 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); } break; - case 317: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + case 322: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ { - yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy394, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy516); + yylhsminor.yy211 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy144, yymsp[-1].minor.yy509.eType, yymsp[-1].minor.yy509.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy462); } - yymsp[-2].minor.yy41 = yylhsminor.yy41; + yymsp[-2].minor.yy211 = yylhsminor.yy211; break; - case 318: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + case 323: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ { - yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy394, yymsp[-3].minor.yy595.eType, yymsp[-3].minor.yy595.pExpr, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, yymsp[0].minor.yy516); + yylhsminor.yy211 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy144, yymsp[-3].minor.yy509.eType, yymsp[-3].minor.yy509.pExpr, yymsp[-1].minor.yy509.eType, yymsp[-1].minor.yy509.pExpr, yymsp[0].minor.yy462); } - yymsp[-5].minor.yy41 = yylhsminor.yy41; + yymsp[-5].minor.yy211 = yylhsminor.yy211; break; - case 320: /* frame_bound_s ::= frame_bound */ - case 322: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==322); -{yylhsminor.yy595 = yymsp[0].minor.yy595;} - yymsp[0].minor.yy595 = yylhsminor.yy595; + case 325: /* frame_bound_s ::= frame_bound */ + case 327: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==327); +{yylhsminor.yy509 = yymsp[0].minor.yy509;} + yymsp[0].minor.yy509 = yylhsminor.yy509; break; - case 321: /* frame_bound_s ::= UNBOUNDED PRECEDING */ - case 323: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==323); - case 325: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==325); -{yylhsminor.yy595.eType = yymsp[-1].major; yylhsminor.yy595.pExpr = 0;} - yymsp[-1].minor.yy595 = yylhsminor.yy595; + case 326: /* frame_bound_s ::= UNBOUNDED PRECEDING */ + case 328: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==328); + case 330: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==330); +{yylhsminor.yy509.eType = yymsp[-1].major; yylhsminor.yy509.pExpr = 0;} + yymsp[-1].minor.yy509 = yylhsminor.yy509; break; - case 324: /* frame_bound ::= expr PRECEDING|FOLLOWING */ -{yylhsminor.yy595.eType = yymsp[0].major; yylhsminor.yy595.pExpr = yymsp[-1].minor.yy528;} - yymsp[-1].minor.yy595 = yylhsminor.yy595; + case 329: /* frame_bound ::= expr PRECEDING|FOLLOWING */ +{yylhsminor.yy509.eType = yymsp[0].major; yylhsminor.yy509.pExpr = yymsp[-1].minor.yy454;} + yymsp[-1].minor.yy509 = yylhsminor.yy509; break; - case 326: /* frame_exclude_opt ::= */ -{yymsp[1].minor.yy516 = 0;} + case 331: /* frame_exclude_opt ::= */ +{yymsp[1].minor.yy462 = 0;} break; - case 327: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ -{yymsp[-1].minor.yy516 = yymsp[0].minor.yy516;} + case 332: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ +{yymsp[-1].minor.yy462 = yymsp[0].minor.yy462;} break; - case 328: /* frame_exclude ::= NO OTHERS */ - case 329: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==329); -{yymsp[-1].minor.yy516 = yymsp[-1].major; /*A-overwrites-X*/} + case 333: /* frame_exclude ::= NO OTHERS */ + case 334: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==334); +{yymsp[-1].minor.yy462 = yymsp[-1].major; /*A-overwrites-X*/} break; - case 330: /* frame_exclude ::= GROUP|TIES */ -{yymsp[0].minor.yy516 = yymsp[0].major; /*A-overwrites-X*/} + case 335: /* frame_exclude ::= GROUP|TIES */ +{yymsp[0].minor.yy462 = yymsp[0].major; /*A-overwrites-X*/} break; - case 331: /* window_clause ::= WINDOW windowdefn_list */ -{ yymsp[-1].minor.yy41 = yymsp[0].minor.yy41; } + case 336: /* window_clause ::= WINDOW windowdefn_list */ +{ yymsp[-1].minor.yy211 = yymsp[0].minor.yy211; } break; - case 332: /* filter_over ::= filter_clause over_clause */ + case 337: /* filter_over ::= filter_clause over_clause */ { - if( yymsp[0].minor.yy41 ){ - yymsp[0].minor.yy41->pFilter = yymsp[-1].minor.yy528; + if( yymsp[0].minor.yy211 ){ + yymsp[0].minor.yy211->pFilter = yymsp[-1].minor.yy454; }else{ - sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy528); + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy454); } - yylhsminor.yy41 = yymsp[0].minor.yy41; + yylhsminor.yy211 = yymsp[0].minor.yy211; } - yymsp[-1].minor.yy41 = yylhsminor.yy41; + yymsp[-1].minor.yy211 = yylhsminor.yy211; break; - case 333: /* filter_over ::= over_clause */ + case 338: /* filter_over ::= over_clause */ { - yylhsminor.yy41 = yymsp[0].minor.yy41; + yylhsminor.yy211 = yymsp[0].minor.yy211; } - yymsp[0].minor.yy41 = yylhsminor.yy41; + yymsp[0].minor.yy211 = yylhsminor.yy211; break; - case 334: /* filter_over ::= filter_clause */ + case 339: /* filter_over ::= filter_clause */ { - yylhsminor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); - if( yylhsminor.yy41 ){ - yylhsminor.yy41->eFrmType = TK_FILTER; - yylhsminor.yy41->pFilter = yymsp[0].minor.yy528; + yylhsminor.yy211 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( yylhsminor.yy211 ){ + yylhsminor.yy211->eFrmType = TK_FILTER; + yylhsminor.yy211->pFilter = yymsp[0].minor.yy454; }else{ - sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy528); + sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy454); } } - yymsp[0].minor.yy41 = yylhsminor.yy41; + yymsp[0].minor.yy211 = yylhsminor.yy211; break; - case 335: /* over_clause ::= OVER LP window RP */ + case 340: /* over_clause ::= OVER LP window RP */ { - yymsp[-3].minor.yy41 = yymsp[-1].minor.yy41; - assert( yymsp[-3].minor.yy41!=0 ); + yymsp[-3].minor.yy211 = yymsp[-1].minor.yy211; + assert( yymsp[-3].minor.yy211!=0 ); } break; - case 336: /* over_clause ::= OVER nm */ + case 341: /* over_clause ::= OVER nm */ { - yymsp[-1].minor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); - if( yymsp[-1].minor.yy41 ){ - yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n); + yymsp[-1].minor.yy211 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( yymsp[-1].minor.yy211 ){ + yymsp[-1].minor.yy211->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n); } } break; - case 337: /* filter_clause ::= FILTER LP WHERE expr RP */ -{ yymsp[-4].minor.yy528 = yymsp[-1].minor.yy528; } + case 342: /* filter_clause ::= FILTER LP WHERE expr RP */ +{ yymsp[-4].minor.yy454 = yymsp[-1].minor.yy454; } + break; + case 343: /* term ::= QNUMBER */ +{ + yylhsminor.yy454=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); + sqlite3DequoteNumber(pParse, yylhsminor.yy454); +} + yymsp[0].minor.yy454 = yylhsminor.yy454; break; default: - /* (338) input ::= cmdlist */ yytestcase(yyruleno==338); - /* (339) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==339); - /* (340) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=340); - /* (341) ecmd ::= SEMI */ yytestcase(yyruleno==341); - /* (342) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==342); - /* (343) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=343); - /* (344) trans_opt ::= */ yytestcase(yyruleno==344); - /* (345) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==345); - /* (346) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==346); - /* (347) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==347); - /* (348) savepoint_opt ::= */ yytestcase(yyruleno==348); - /* (349) cmd ::= create_table create_table_args */ yytestcase(yyruleno==349); - /* (350) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=350); - /* (351) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==351); - /* (352) columnlist ::= columnname carglist */ yytestcase(yyruleno==352); - /* (353) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==353); - /* (354) nm ::= STRING */ yytestcase(yyruleno==354); - /* (355) typetoken ::= typename */ yytestcase(yyruleno==355); - /* (356) typename ::= ID|STRING */ yytestcase(yyruleno==356); - /* (357) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=357); - /* (358) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=358); - /* (359) carglist ::= carglist ccons */ yytestcase(yyruleno==359); - /* (360) carglist ::= */ yytestcase(yyruleno==360); - /* (361) ccons ::= NULL onconf */ yytestcase(yyruleno==361); - /* (362) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==362); - /* (363) ccons ::= AS generated */ yytestcase(yyruleno==363); - /* (364) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==364); - /* (365) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==365); - /* (366) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=366); - /* (367) tconscomma ::= */ yytestcase(yyruleno==367); - /* (368) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=368); - /* (369) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=369); - /* (370) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=370); - /* (371) oneselect ::= values */ yytestcase(yyruleno==371); - /* (372) sclp ::= selcollist COMMA */ yytestcase(yyruleno==372); - /* (373) as ::= ID|STRING */ yytestcase(yyruleno==373); - /* (374) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=374); - /* (375) returning ::= */ yytestcase(yyruleno==375); - /* (376) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=376); - /* (377) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==377); - /* (378) case_operand ::= expr */ yytestcase(yyruleno==378); - /* (379) exprlist ::= nexprlist */ yytestcase(yyruleno==379); - /* (380) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=380); - /* (381) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=381); - /* (382) nmnum ::= ON */ yytestcase(yyruleno==382); - /* (383) nmnum ::= DELETE */ yytestcase(yyruleno==383); - /* (384) nmnum ::= DEFAULT */ yytestcase(yyruleno==384); - /* (385) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==385); - /* (386) foreach_clause ::= */ yytestcase(yyruleno==386); - /* (387) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==387); - /* (388) trnm ::= nm */ yytestcase(yyruleno==388); - /* (389) tridxby ::= */ yytestcase(yyruleno==389); - /* (390) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==390); - /* (391) database_kw_opt ::= */ yytestcase(yyruleno==391); - /* (392) kwcolumn_opt ::= */ yytestcase(yyruleno==392); - /* (393) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==393); - /* (394) vtabarglist ::= vtabarg */ yytestcase(yyruleno==394); - /* (395) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==395); - /* (396) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==396); - /* (397) anylist ::= */ yytestcase(yyruleno==397); - /* (398) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==398); - /* (399) anylist ::= anylist ANY */ yytestcase(yyruleno==399); - /* (400) with ::= */ yytestcase(yyruleno==400); - /* (401) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=401); - /* (402) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=402); + /* (344) input ::= cmdlist */ yytestcase(yyruleno==344); + /* (345) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==345); + /* (346) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=346); + /* (347) ecmd ::= SEMI */ yytestcase(yyruleno==347); + /* (348) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==348); + /* (349) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=349); + /* (350) trans_opt ::= */ yytestcase(yyruleno==350); + /* (351) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==351); + /* (352) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==352); + /* (353) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==353); + /* (354) savepoint_opt ::= */ yytestcase(yyruleno==354); + /* (355) cmd ::= create_table create_table_args */ yytestcase(yyruleno==355); + /* (356) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=356); + /* (357) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==357); + /* (358) columnlist ::= columnname carglist */ yytestcase(yyruleno==358); + /* (359) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==359); + /* (360) nm ::= STRING */ yytestcase(yyruleno==360); + /* (361) typetoken ::= typename */ yytestcase(yyruleno==361); + /* (362) typename ::= ID|STRING */ yytestcase(yyruleno==362); + /* (363) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=363); + /* (364) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=364); + /* (365) carglist ::= carglist ccons */ yytestcase(yyruleno==365); + /* (366) carglist ::= */ yytestcase(yyruleno==366); + /* (367) ccons ::= NULL onconf */ yytestcase(yyruleno==367); + /* (368) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==368); + /* (369) ccons ::= AS generated */ yytestcase(yyruleno==369); + /* (370) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==370); + /* (371) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==371); + /* (372) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=372); + /* (373) tconscomma ::= */ yytestcase(yyruleno==373); + /* (374) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=374); + /* (375) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=375); + /* (376) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=376); + /* (377) oneselect ::= values */ yytestcase(yyruleno==377); + /* (378) sclp ::= selcollist COMMA */ yytestcase(yyruleno==378); + /* (379) as ::= ID|STRING */ yytestcase(yyruleno==379); + /* (380) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=380); + /* (381) returning ::= */ yytestcase(yyruleno==381); + /* (382) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=382); + /* (383) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==383); + /* (384) case_operand ::= expr */ yytestcase(yyruleno==384); + /* (385) exprlist ::= nexprlist */ yytestcase(yyruleno==385); + /* (386) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=386); + /* (387) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=387); + /* (388) nmnum ::= ON */ yytestcase(yyruleno==388); + /* (389) nmnum ::= DELETE */ yytestcase(yyruleno==389); + /* (390) nmnum ::= DEFAULT */ yytestcase(yyruleno==390); + /* (391) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==391); + /* (392) foreach_clause ::= */ yytestcase(yyruleno==392); + /* (393) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==393); + /* (394) trnm ::= nm */ yytestcase(yyruleno==394); + /* (395) tridxby ::= */ yytestcase(yyruleno==395); + /* (396) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==396); + /* (397) database_kw_opt ::= */ yytestcase(yyruleno==397); + /* (398) kwcolumn_opt ::= */ yytestcase(yyruleno==398); + /* (399) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==399); + /* (400) vtabarglist ::= vtabarg */ yytestcase(yyruleno==400); + /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==401); + /* (402) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==402); + /* (403) anylist ::= */ yytestcase(yyruleno==403); + /* (404) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==404); + /* (405) anylist ::= anylist ANY */ yytestcase(yyruleno==405); + /* (406) with ::= */ yytestcase(yyruleno==406); + /* (407) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=407); + /* (408) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=408); break; /********** End reduce actions ************************************************/ }; @@ -174503,19 +177848,12 @@ SQLITE_PRIVATE void sqlite3Parser( (int)(yypParser->yytos - yypParser->yystack)); } #endif -#if YYSTACKDEPTH>0 if( yypParser->yytos>=yypParser->yystackEnd ){ - yyStackOverflow(yypParser); - break; - } -#else - if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ if( yyGrowStack(yypParser) ){ yyStackOverflow(yypParser); break; } } -#endif } yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor sqlite3ParserCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ @@ -175586,27 +178924,58 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ *tokenType = TK_INTEGER; #ifndef SQLITE_OMIT_HEX_INTEGER if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){ - for(i=3; sqlite3Isxdigit(z[i]); i++){} - return i; - } + for(i=3; 1; i++){ + if( sqlite3Isxdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + }else #endif - for(i=0; sqlite3Isdigit(z[i]); i++){} + { + for(i=0; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } #ifndef SQLITE_OMIT_FLOATING_POINT - if( z[i]=='.' ){ - i++; - while( sqlite3Isdigit(z[i]) ){ i++; } - *tokenType = TK_FLOAT; - } - if( (z[i]=='e' || z[i]=='E') && - ( sqlite3Isdigit(z[i+1]) - || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) - ) - ){ - i += 2; - while( sqlite3Isdigit(z[i]) ){ i++; } - *tokenType = TK_FLOAT; - } + if( z[i]=='.' ){ + if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT; + for(i++; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + } + if( (z[i]=='e' || z[i]=='E') && + ( sqlite3Isdigit(z[i+1]) + || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) + ) + ){ + if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT; + for(i+=2; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + } #endif + } while( IdChar(z[i]) ){ *tokenType = TK_ILLEGAL; i++; @@ -175771,10 +179140,13 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){ if( tokenType>=TK_WINDOW ){ assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW + || tokenType==TK_QNUMBER ); #else if( tokenType>=TK_SPACE ){ - assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL ); + assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL + || tokenType==TK_QNUMBER + ); #endif /* SQLITE_OMIT_WINDOWFUNC */ if( AtomicLoad(&db->u1.isInterrupted) ){ pParse->rc = SQLITE_INTERRUPT; @@ -175807,7 +179179,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){ assert( n==6 ); tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); #endif /* SQLITE_OMIT_WINDOWFUNC */ - }else{ + }else if( tokenType!=TK_QNUMBER ){ Token x; x.z = zSql; x.n = n; @@ -176440,7 +179812,9 @@ SQLITE_PRIVATE int sqlite3Fts5Init(sqlite3*); #ifdef SQLITE_ENABLE_STMTVTAB SQLITE_PRIVATE int sqlite3StmtVtabInit(sqlite3*); #endif - +#ifdef SQLITE_EXTRA_AUTOEXT +int SQLITE_EXTRA_AUTOEXT(sqlite3*); +#endif /* ** An array of pointers to extension initializer functions for ** built-in extensions. @@ -176474,6 +179848,9 @@ static int (*const sqlite3BuiltinExtensions[])(sqlite3*) = { #ifdef SQLITE_ENABLE_BYTECODE_VTAB sqlite3VdbeBytecodeVtabInit, #endif +#ifdef SQLITE_EXTRA_AUTOEXT + SQLITE_EXTRA_AUTOEXT, +#endif }; #ifndef SQLITE_AMALGAMATION @@ -176547,6 +179924,32 @@ SQLITE_API char *sqlite3_temp_directory = 0; */ SQLITE_API char *sqlite3_data_directory = 0; +/* +** Determine whether or not high-precision (long double) floating point +** math works correctly on CPU currently running. +*/ +static SQLITE_NOINLINE int hasHighPrecisionDouble(int rc){ + if( sizeof(LONGDOUBLE_TYPE)<=8 ){ + /* If the size of "long double" is not more than 8, then + ** high-precision math is not possible. */ + return 0; + }else{ + /* Just because sizeof(long double)>8 does not mean that the underlying + ** hardware actually supports high-precision floating point. For example, + ** clearing the 0x100 bit in the floating-point control word on Intel + ** processors will make long double work like double, even though long + ** double takes up more space. The only way to determine if long double + ** actually works is to run an experiment. */ + LONGDOUBLE_TYPE a, b, c; + rc++; + a = 1.0+rc*0.1; + b = 1.0e+18+rc*25.0; + c = a+b; + return b!=c; + } +} + + /* ** Initialize SQLite. ** @@ -176742,6 +180145,12 @@ SQLITE_API int sqlite3_initialize(void){ } #endif + /* Experimentally determine if high-precision floating point is + ** available. */ +#ifndef SQLITE_OMIT_WSD + sqlite3Config.bUseLongDouble = hasHighPrecisionDouble(rc); +#endif + return rc; } @@ -177121,6 +180530,18 @@ SQLITE_API int sqlite3_config(int op, ...){ } #endif /* SQLITE_OMIT_DESERIALIZE */ + case SQLITE_CONFIG_ROWID_IN_VIEW: { + int *pVal = va_arg(ap,int*); +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( 0==*pVal ) sqlite3GlobalConfig.mNoVisibleRowid = TF_NoVisibleRowid; + if( 1==*pVal ) sqlite3GlobalConfig.mNoVisibleRowid = 0; + *pVal = (sqlite3GlobalConfig.mNoVisibleRowid==0); +#else + *pVal = 0; +#endif + break; + } + default: { rc = SQLITE_ERROR; break; @@ -177312,6 +180733,10 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3 *db){ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ va_list ap; int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); va_start(ap, op); switch( op ){ @@ -177641,6 +181066,14 @@ static int sqlite3Close(sqlite3 *db, int forceZombie){ } #endif + while( db->pDbData ){ + DbClientData *p = db->pDbData; + db->pDbData = p->pNext; + assert( p->pData!=0 ); + if( p->xDestructor ) p->xDestructor(p->pData); + sqlite3_free(p); + } + /* Convert the connection into a zombie and then close it. */ db->eOpenState = SQLITE_STATE_ZOMBIE; @@ -178258,7 +181691,7 @@ SQLITE_PRIVATE int sqlite3CreateFunc( assert( SQLITE_FUNC_CONSTANT==SQLITE_DETERMINISTIC ); assert( SQLITE_FUNC_DIRECT==SQLITE_DIRECTONLY ); extraFlags = enc & (SQLITE_DETERMINISTIC|SQLITE_DIRECTONLY| - SQLITE_SUBTYPE|SQLITE_INNOCUOUS); + SQLITE_SUBTYPE|SQLITE_INNOCUOUS|SQLITE_RESULT_SUBTYPE); enc &= (SQLITE_FUNC_ENCMASK|SQLITE_ANY); /* The SQLITE_INNOCUOUS flag is the same bit as SQLITE_FUNC_UNSAFE. But @@ -178715,6 +182148,12 @@ SQLITE_API void *sqlite3_preupdate_hook( void *pArg /* First callback argument */ ){ void *pRet; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( db==0 ){ + return 0; + } +#endif sqlite3_mutex_enter(db->mutex); pRet = db->pPreUpdateArg; db->xPreUpdateCallback = xCallback; @@ -178861,7 +182300,7 @@ SQLITE_API int sqlite3_wal_checkpoint_v2( if( eModeSQLITE_CHECKPOINT_TRUNCATE ){ /* EVIDENCE-OF: R-03996-12088 The M parameter must be a valid checkpoint ** mode: */ - return SQLITE_MISUSE; + return SQLITE_MISUSE_BKPT; } sqlite3_mutex_enter(db->mutex); @@ -180098,6 +183537,69 @@ SQLITE_API int sqlite3_collation_needed16( } #endif /* SQLITE_OMIT_UTF16 */ +/* +** Find existing client data. +*/ +SQLITE_API void *sqlite3_get_clientdata(sqlite3 *db, const char *zName){ + DbClientData *p; + sqlite3_mutex_enter(db->mutex); + for(p=db->pDbData; p; p=p->pNext){ + if( strcmp(p->zName, zName)==0 ){ + void *pResult = p->pData; + sqlite3_mutex_leave(db->mutex); + return pResult; + } + } + sqlite3_mutex_leave(db->mutex); + return 0; +} + +/* +** Add new client data to a database connection. +*/ +SQLITE_API int sqlite3_set_clientdata( + sqlite3 *db, /* Attach client data to this connection */ + const char *zName, /* Name of the client data */ + void *pData, /* The client data itself */ + void (*xDestructor)(void*) /* Destructor */ +){ + DbClientData *p, **pp; + sqlite3_mutex_enter(db->mutex); + pp = &db->pDbData; + for(p=db->pDbData; p && strcmp(p->zName,zName); p=p->pNext){ + pp = &p->pNext; + } + if( p ){ + assert( p->pData!=0 ); + if( p->xDestructor ) p->xDestructor(p->pData); + if( pData==0 ){ + *pp = p->pNext; + sqlite3_free(p); + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; + } + }else if( pData==0 ){ + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; + }else{ + size_t n = strlen(zName); + p = sqlite3_malloc64( sizeof(DbClientData)+n+1 ); + if( p==0 ){ + if( xDestructor ) xDestructor(pData); + sqlite3_mutex_leave(db->mutex); + return SQLITE_NOMEM; + } + memcpy(p->zName, zName, n+1); + p->pNext = db->pDbData; + db->pDbData = p; + } + p->pData = pData; + p->xDestructor = xDestructor; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + + #ifndef SQLITE_OMIT_DEPRECATED /* ** This function is now an anachronism. It used to be used to recover from a @@ -180447,6 +183949,28 @@ SQLITE_API int sqlite3_test_control(int op, ...){ } #endif + /* sqlite3_test_control(SQLITE_TESTCTRL_FK_NO_ACTION, sqlite3 *db, int b); + ** + ** If b is true, then activate the SQLITE_FkNoAction setting. If b is + ** false then clearn that setting. If the SQLITE_FkNoAction setting is + ** abled, all foreign key ON DELETE and ON UPDATE actions behave as if + ** they were NO ACTION, regardless of how they are defined. + ** + ** NB: One must usually run "PRAGMA writable_schema=RESET" after + ** using this test-control, before it will take full effect. failing + ** to reset the schema can result in some unexpected behavior. + */ + case SQLITE_TESTCTRL_FK_NO_ACTION: { + sqlite3 *db = va_arg(ap, sqlite3*); + int b = va_arg(ap, int); + if( b ){ + db->flags |= SQLITE_FkNoAction; + }else{ + db->flags &= ~SQLITE_FkNoAction; + } + break; + } + /* ** sqlite3_test_control(BITVEC_TEST, size, program) ** @@ -180871,11 +184395,11 @@ SQLITE_API int sqlite3_test_control(int op, ...){ ** X<0 Make no changes to the bUseLongDouble. Just report value. ** X==0 Disable bUseLongDouble ** X==1 Enable bUseLongDouble - ** X==2 Set bUseLongDouble to its default value for this platform + ** X>=2 Set bUseLongDouble to its default value for this platform */ case SQLITE_TESTCTRL_USELONGDOUBLE: { int b = va_arg(ap, int); - if( b==2 ) b = sizeof(LONGDOUBLE_TYPE)>8; + if( b>=2 ) b = hasHighPrecisionDouble(b); if( b>=0 ) sqlite3Config.bUseLongDouble = b>0; rc = sqlite3Config.bUseLongDouble!=0; break; @@ -180912,6 +184436,28 @@ SQLITE_API int sqlite3_test_control(int op, ...){ break; } #endif + + /* sqlite3_test_control(SQLITE_TESTCTRL_JSON_SELFCHECK, &onOff); + ** + ** Activate or deactivate validation of JSONB that is generated from + ** text. Off by default, as the validation is slow. Validation is + ** only available if compiled using SQLITE_DEBUG. + ** + ** If onOff is initially 1, then turn it on. If onOff is initially + ** off, turn it off. If onOff is initially -1, then change onOff + ** to be the current setting. + */ + case SQLITE_TESTCTRL_JSON_SELFCHECK: { +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) + int *pOnOff = va_arg(ap, int*); + if( *pOnOff<0 ){ + *pOnOff = sqlite3Config.bJsonSelfcheck; + }else{ + sqlite3Config.bJsonSelfcheck = (u8)((*pOnOff)&0xff); + } +#endif + break; + } } va_end(ap); #endif /* SQLITE_UNTESTABLE */ @@ -181289,7 +184835,7 @@ SQLITE_API int sqlite3_compileoption_used(const char *zOptName){ int nOpt; const char **azCompileOpt; -#if SQLITE_ENABLE_API_ARMOR +#ifdef SQLITE_ENABLE_API_ARMOR if( zOptName==0 ){ (void)SQLITE_MISUSE_BKPT; return 0; @@ -181484,6 +185030,9 @@ SQLITE_API int sqlite3_unlock_notify( ){ int rc = SQLITE_OK; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif sqlite3_mutex_enter(db->mutex); enterMutex(); @@ -182505,6 +186054,7 @@ struct Fts3Table { int nPgsz; /* Page size for host database */ char *zSegmentsTbl; /* Name of %_segments table */ sqlite3_blob *pSegments; /* Blob handle open on %_segments table */ + int iSavepoint; /* ** The following array of hash tables is used to buffer pending index @@ -182892,6 +186442,8 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int); SQLITE_PRIVATE int sqlite3Fts3ExprIterate(Fts3Expr*, int (*x)(Fts3Expr*,int,void*), void*); +SQLITE_PRIVATE int sqlite3Fts3IntegrityCheck(Fts3Table *p, int *pbOk); + #endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */ #endif /* _FTSINT_H */ @@ -183248,6 +186800,7 @@ static void fts3DeclareVtab(int *pRc, Fts3Table *p){ zLanguageid = (p->zLanguageid ? p->zLanguageid : "__langid"); sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + sqlite3_vtab_config(p->db, SQLITE_VTAB_INNOCUOUS); /* Create a list of user columns for the virtual table */ zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]); @@ -186497,6 +190050,8 @@ static int fts3RenameMethod( rc = sqlite3Fts3PendingTermsFlush(p); } + p->bIgnoreSavepoint = 1; + if( p->zContentTbl==0 ){ fts3DbExec(&rc, db, "ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';", @@ -186524,6 +190079,8 @@ static int fts3RenameMethod( "ALTER TABLE %Q.'%q_segdir' RENAME TO '%q_segdir';", p->zDb, p->zName, zName ); + + p->bIgnoreSavepoint = 0; return rc; } @@ -186534,12 +190091,28 @@ static int fts3RenameMethod( */ static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ int rc = SQLITE_OK; - UNUSED_PARAMETER(iSavepoint); - assert( ((Fts3Table *)pVtab)->inTransaction ); - assert( ((Fts3Table *)pVtab)->mxSavepoint <= iSavepoint ); - TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint ); - if( ((Fts3Table *)pVtab)->bIgnoreSavepoint==0 ){ - rc = fts3SyncMethod(pVtab); + Fts3Table *pTab = (Fts3Table*)pVtab; + assert( pTab->inTransaction ); + assert( pTab->mxSavepoint<=iSavepoint ); + TESTONLY( pTab->mxSavepoint = iSavepoint ); + + if( pTab->bIgnoreSavepoint==0 ){ + if( fts3HashCount(&pTab->aIndex[0].hPending)>0 ){ + char *zSql = sqlite3_mprintf("INSERT INTO %Q.%Q(%Q) VALUES('flush')", + pTab->zDb, pTab->zName, pTab->zName + ); + if( zSql ){ + pTab->bIgnoreSavepoint = 1; + rc = sqlite3_exec(pTab->db, zSql, 0, 0, 0); + pTab->bIgnoreSavepoint = 0; + sqlite3_free(zSql); + }else{ + rc = SQLITE_NOMEM; + } + } + if( rc==SQLITE_OK ){ + pTab->iSavepoint = iSavepoint+1; + } } return rc; } @@ -186550,12 +190123,11 @@ static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ ** This is a no-op. */ static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ - TESTONLY( Fts3Table *p = (Fts3Table*)pVtab ); - UNUSED_PARAMETER(iSavepoint); - UNUSED_PARAMETER(pVtab); - assert( p->inTransaction ); - assert( p->mxSavepoint >= iSavepoint ); - TESTONLY( p->mxSavepoint = iSavepoint-1 ); + Fts3Table *pTab = (Fts3Table*)pVtab; + assert( pTab->inTransaction ); + assert( pTab->mxSavepoint >= iSavepoint ); + TESTONLY( pTab->mxSavepoint = iSavepoint-1 ); + pTab->iSavepoint = iSavepoint; return SQLITE_OK; } @@ -186565,11 +190137,13 @@ static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ ** Discard the contents of the pending terms table. */ static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){ - Fts3Table *p = (Fts3Table*)pVtab; + Fts3Table *pTab = (Fts3Table*)pVtab; UNUSED_PARAMETER(iSavepoint); - assert( p->inTransaction ); - TESTONLY( p->mxSavepoint = iSavepoint ); - sqlite3Fts3PendingTermsClear(p); + assert( pTab->inTransaction ); + TESTONLY( pTab->mxSavepoint = iSavepoint ); + if( (iSavepoint+1)<=pTab->iSavepoint ){ + sqlite3Fts3PendingTermsClear(pTab); + } return SQLITE_OK; } @@ -186588,8 +190162,42 @@ static int fts3ShadowName(const char *zName){ return 0; } +/* +** Implementation of the xIntegrity() method on the FTS3/FTS4 virtual +** table. +*/ +static int fts3IntegrityMethod( + sqlite3_vtab *pVtab, /* The virtual table to be checked */ + const char *zSchema, /* Name of schema in which pVtab lives */ + const char *zTabname, /* Name of the pVTab table */ + int isQuick, /* True if this is a quick_check */ + char **pzErr /* Write error message here */ +){ + Fts3Table *p = (Fts3Table*)pVtab; + int rc = SQLITE_OK; + int bOk = 0; + + UNUSED_PARAMETER(isQuick); + rc = sqlite3Fts3IntegrityCheck(p, &bOk); + assert( rc!=SQLITE_CORRUPT_VTAB ); + if( rc==SQLITE_ERROR || (rc&0xFF)==SQLITE_CORRUPT ){ + *pzErr = sqlite3_mprintf("unable to validate the inverted index for" + " FTS%d table %s.%s: %s", + p->bFts4 ? 4 : 3, zSchema, zTabname, sqlite3_errstr(rc)); + if( *pzErr ) rc = SQLITE_OK; + }else if( rc==SQLITE_OK && bOk==0 ){ + *pzErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s", + p->bFts4 ? 4 : 3, zSchema, zTabname); + if( *pzErr==0 ) rc = SQLITE_NOMEM; + } + sqlite3Fts3SegmentsClose(p); + return rc; +} + + + static const sqlite3_module fts3Module = { - /* iVersion */ 3, + /* iVersion */ 4, /* xCreate */ fts3CreateMethod, /* xConnect */ fts3ConnectMethod, /* xBestIndex */ fts3BestIndexMethod, @@ -186613,6 +190221,7 @@ static const sqlite3_module fts3Module = { /* xRelease */ fts3ReleaseMethod, /* xRollbackTo */ fts3RollbackToMethod, /* xShadowName */ fts3ShadowName, + /* xIntegrity */ fts3IntegrityMethod, }; /* @@ -189288,7 +192897,8 @@ SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; int rc; /* Return code */ @@ -192854,7 +196464,8 @@ SQLITE_PRIVATE int sqlite3Fts3InitTok(sqlite3 *db, Fts3Hash *pHash, void(*xDestr 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; int rc; /* Return code */ @@ -196195,7 +199806,6 @@ SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){ rc = fts3SegmentMerge(p, p->iPrevLangid, i, FTS3_SEGCURSOR_PENDING); if( rc==SQLITE_DONE ) rc = SQLITE_OK; } - sqlite3Fts3PendingTermsClear(p); /* Determine the auto-incr-merge setting if unknown. If enabled, ** estimate the number of leaf blocks of content to be written @@ -196217,6 +199827,10 @@ SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){ rc = sqlite3_reset(pStmt); } } + + if( rc==SQLITE_OK ){ + sqlite3Fts3PendingTermsClear(p); + } return rc; } @@ -196848,6 +200462,8 @@ static int fts3AppendToNode( blobGrowBuffer(pPrev, nTerm, &rc); if( rc!=SQLITE_OK ) return rc; + assert( pPrev!=0 ); + assert( pPrev->a!=0 ); nPrefix = fts3PrefixCompress(pPrev->a, pPrev->n, zTerm, nTerm); nSuffix = nTerm - nPrefix; @@ -196904,9 +200520,13 @@ static int fts3IncrmergeAppend( nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist; /* If the current block is not empty, and if adding this term/doclist - ** to the current block would make it larger than Fts3Table.nNodeSize - ** bytes, write this block out to the database. */ - if( pLeaf->block.n>0 && (pLeaf->block.n + nSpace)>p->nNodeSize ){ + ** to the current block would make it larger than Fts3Table.nNodeSize bytes, + ** and if there is still room for another leaf page, write this block out to + ** the database. */ + if( pLeaf->block.n>0 + && (pLeaf->block.n + nSpace)>p->nNodeSize + && pLeaf->iBlock < (pWriter->iStart + pWriter->nLeafEst) + ){ rc = fts3WriteSegment(p, pLeaf->iBlock, pLeaf->block.a, pLeaf->block.n); pWriter->nWork++; @@ -197238,7 +200858,7 @@ static int fts3IncrmergeLoad( rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock,0); blobGrowBuffer(&pNode->block, MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc - ); + ); if( rc==SQLITE_OK ){ memcpy(pNode->block.a, aBlock, nBlock); pNode->block.n = nBlock; @@ -198155,7 +201775,7 @@ static u64 fts3ChecksumIndex( ** If an error occurs (e.g. an OOM or IO error), return an SQLite error ** code. The final value of *pbOk is undefined in this case. */ -static int fts3IntegrityCheck(Fts3Table *p, int *pbOk){ +SQLITE_PRIVATE int sqlite3Fts3IntegrityCheck(Fts3Table *p, int *pbOk){ int rc = SQLITE_OK; /* Return code */ u64 cksum1 = 0; /* Checksum based on FTS index contents */ u64 cksum2 = 0; /* Checksum based on %_content contents */ @@ -198233,7 +201853,12 @@ static int fts3IntegrityCheck(Fts3Table *p, int *pbOk){ sqlite3_finalize(pStmt); } - *pbOk = (cksum1==cksum2); + if( rc==SQLITE_CORRUPT_VTAB ){ + rc = SQLITE_OK; + *pbOk = 0; + }else{ + *pbOk = (rc==SQLITE_OK && cksum1==cksum2); + } return rc; } @@ -198273,7 +201898,7 @@ static int fts3DoIntegrityCheck( ){ int rc; int bOk = 0; - rc = fts3IntegrityCheck(p, &bOk); + rc = sqlite3Fts3IntegrityCheck(p, &bOk); if( rc==SQLITE_OK && bOk==0 ) rc = FTS_CORRUPT_VTAB; return rc; } @@ -198303,8 +201928,11 @@ static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){ rc = fts3DoIncrmerge(p, &zVal[6]); }else if( nVal>10 && 0==sqlite3_strnicmp(zVal, "automerge=", 10) ){ rc = fts3DoAutoincrmerge(p, &zVal[10]); + }else if( nVal==5 && 0==sqlite3_strnicmp(zVal, "flush", 5) ){ + rc = sqlite3Fts3PendingTermsFlush(p); + } #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) - }else{ + else{ int v; if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){ v = atoi(&zVal[9]); @@ -198322,8 +201950,8 @@ static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){ if( v>=4 && v<=FTS3_MERGE_COUNT && (v&1)==0 ) p->nMergeCount = v; rc = SQLITE_OK; } -#endif } +#endif return rc; } @@ -199136,7 +202764,7 @@ static void fts3SnippetDetails( } mCover |= mPhrase; - for(j=0; jnToken; j++){ + for(j=0; jnToken && jnSnippet; j++){ mHighlight |= (mPos>>j); } @@ -201244,24 +204872,145 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int eRemoveDiacritic){ ** ****************************************************************************** ** -** This SQLite JSON functions. +** SQLite JSON functions. ** ** This file began as an extension in ext/misc/json1.c in 2015. That ** extension proved so useful that it has now been moved into the core. ** -** For the time being, all JSON is stored as pure text. (We might add -** a JSONB type in the future which stores a binary encoding of JSON in -** a BLOB, but there is no support for JSONB in the current implementation. -** This implementation parses JSON text at 250 MB/s, so it is hard to see -** how JSONB might improve on that.) +** The original design stored all JSON as pure text, canonical RFC-8259. +** Support for JSON-5 extensions was added with version 3.42.0 (2023-05-16). +** All generated JSON text still conforms strictly to RFC-8259, but text +** with JSON-5 extensions is accepted as input. +** +** Beginning with version 3.45.0 (circa 2024-01-01), these routines also +** accept BLOB values that have JSON encoded using a binary representation +** called "JSONB". The name JSONB comes from PostgreSQL, however the on-disk +** format SQLite JSONB is completely different and incompatible with +** PostgreSQL JSONB. +** +** Decoding and interpreting JSONB is still O(N) where N is the size of +** the input, the same as text JSON. However, the constant of proportionality +** for JSONB is much smaller due to faster parsing. The size of each +** element in JSONB is encoded in its header, so there is no need to search +** for delimiters using persnickety syntax rules. JSONB seems to be about +** 3x faster than text JSON as a result. JSONB is also tends to be slightly +** smaller than text JSON, by 5% or 10%, but there are corner cases where +** JSONB can be slightly larger. So you are not far mistaken to say that +** a JSONB blob is the same size as the equivalent RFC-8259 text. +** +** +** THE JSONB ENCODING: +** +** Every JSON element is encoded in JSONB as a header and a payload. +** The header is between 1 and 9 bytes in size. The payload is zero +** or more bytes. +** +** The lower 4 bits of the first byte of the header determines the +** element type: +** +** 0: NULL +** 1: TRUE +** 2: FALSE +** 3: INT -- RFC-8259 integer literal +** 4: INT5 -- JSON5 integer literal +** 5: FLOAT -- RFC-8259 floating point literal +** 6: FLOAT5 -- JSON5 floating point literal +** 7: TEXT -- Text literal acceptable to both SQL and JSON +** 8: TEXTJ -- Text containing RFC-8259 escapes +** 9: TEXT5 -- Text containing JSON5 and/or RFC-8259 escapes +** 10: TEXTRAW -- Text containing unescaped syntax characters +** 11: ARRAY +** 12: OBJECT +** +** The other three possible values (13-15) are reserved for future +** enhancements. +** +** The upper 4 bits of the first byte determine the size of the header +** and sometimes also the size of the payload. If X is the first byte +** of the element and if X>>4 is between 0 and 11, then the payload +** will be that many bytes in size and the header is exactly one byte +** in size. Other four values for X>>4 (12-15) indicate that the header +** is more than one byte in size and that the payload size is determined +** by the remainder of the header, interpreted as a unsigned big-endian +** integer. +** +** Value of X>>4 Size integer Total header size +** ------------- -------------------- ----------------- +** 12 1 byte (0-255) 2 +** 13 2 byte (0-65535) 3 +** 14 4 byte (0-4294967295) 5 +** 15 8 byte (0-1.8e19) 9 +** +** The payload size need not be expressed in its minimal form. For example, +** if the payload size is 10, the size can be expressed in any of 5 different +** ways: (1) (X>>4)==10, (2) (X>>4)==12 following by on 0x0a byte, +** (3) (X>>4)==13 followed by 0x00 and 0x0a, (4) (X>>4)==14 followed by +** 0x00 0x00 0x00 0x0a, or (5) (X>>4)==15 followed by 7 bytes of 0x00 and +** a single byte of 0x0a. The shorter forms are preferred, of course, but +** sometimes when generating JSONB, the payload size is not known in advance +** and it is convenient to reserve sufficient header space to cover the +** largest possible payload size and then come back later and patch up +** the size when it becomes known, resulting in a non-minimal encoding. +** +** The value (X>>4)==15 is not actually used in the current implementation +** (as SQLite is currently unable handle BLOBs larger than about 2GB) +** but is included in the design to allow for future enhancements. +** +** The payload follows the header. NULL, TRUE, and FALSE have no payload and +** their payload size must always be zero. The payload for INT, INT5, +** FLOAT, FLOAT5, TEXT, TEXTJ, TEXT5, and TEXTROW is text. Note that the +** "..." or '...' delimiters are omitted from the various text encodings. +** The payload for ARRAY and OBJECT is a list of additional elements that +** are the content for the array or object. The payload for an OBJECT +** must be an even number of elements. The first element of each pair is +** the label and must be of type TEXT, TEXTJ, TEXT5, or TEXTRAW. +** +** A valid JSONB blob consists of a single element, as described above. +** Usually this will be an ARRAY or OBJECT element which has many more +** elements as its content. But the overall blob is just a single element. +** +** Input validation for JSONB blobs simply checks that the element type +** code is between 0 and 12 and that the total size of the element +** (header plus payload) is the same as the size of the BLOB. If those +** checks are true, the BLOB is assumed to be JSONB and processing continues. +** Errors are only raised if some other miscoding is discovered during +** processing. +** +** Additional information can be found in the doc/jsonb.md file of the +** canonical SQLite source tree. */ #ifndef SQLITE_OMIT_JSON /* #include "sqliteInt.h" */ +/* JSONB element types +*/ +#define JSONB_NULL 0 /* "null" */ +#define JSONB_TRUE 1 /* "true" */ +#define JSONB_FALSE 2 /* "false" */ +#define JSONB_INT 3 /* integer acceptable to JSON and SQL */ +#define JSONB_INT5 4 /* integer in 0x000 notation */ +#define JSONB_FLOAT 5 /* float acceptable to JSON and SQL */ +#define JSONB_FLOAT5 6 /* float with JSON5 extensions */ +#define JSONB_TEXT 7 /* Text compatible with both JSON and SQL */ +#define JSONB_TEXTJ 8 /* Text with JSON escapes */ +#define JSONB_TEXT5 9 /* Text with JSON-5 escape */ +#define JSONB_TEXTRAW 10 /* SQL text that needs escaping for JSON */ +#define JSONB_ARRAY 11 /* An array */ +#define JSONB_OBJECT 12 /* An object */ + +/* Human-readable names for the JSONB values. The index for each +** string must correspond to the JSONB_* integer above. +*/ +static const char * const jsonbType[] = { + "null", "true", "false", "integer", "integer", + "real", "real", "text", "text", "text", + "text", "array", "object", "", "", "", "" +}; + /* ** Growing our own isspace() routine this way is twice as fast as ** the library isspace() function, resulting in a 7% overall performance -** increase for the parser. (Ubuntu14.10 gcc 4.8.4 x64 with -Os). +** increase for the text-JSON parser. (Ubuntu14.10 gcc 4.8.4 x64 with -Os). */ static const char jsonIsSpace[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, @@ -201282,11 +205031,19 @@ static const char jsonIsSpace[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -#define fast_isspace(x) (jsonIsSpace[(unsigned char)x]) +#define jsonIsspace(x) (jsonIsSpace[(unsigned char)x]) + +/* +** The set of all space characters recognized by jsonIsspace(). +** Useful as the second argument to strspn(). +*/ +static const char jsonSpaces[] = "\011\012\015\040"; /* -** Characters that are special to JSON. Control charaters, -** '"' and '\\'. +** Characters that are special to JSON. Control characters, +** '"' and '\\' and '\''. Actually, '\'' is not special to +** canonical JSON, but it is special in JSON-5, so we include +** it in the set of special characters. */ static const char jsonIsOk[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -201308,22 +205065,49 @@ static const char jsonIsOk[256] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - -#if !defined(SQLITE_DEBUG) && !defined(SQLITE_COVERAGE_TEST) -# define VVA(X) -#else -# define VVA(X) X -#endif - /* Objects */ +typedef struct JsonCache JsonCache; typedef struct JsonString JsonString; -typedef struct JsonNode JsonNode; typedef struct JsonParse JsonParse; -typedef struct JsonCleanup JsonCleanup; + +/* +** Magic number used for the JSON parse cache in sqlite3_get_auxdata() +*/ +#define JSON_CACHE_ID (-429938) /* Cache entry */ +#define JSON_CACHE_SIZE 4 /* Max number of cache entries */ + +/* +** jsonUnescapeOneChar() returns this invalid code point if it encounters +** a syntax error. +*/ +#define JSON_INVALID_CHAR 0x99999 + +/* A cache mapping JSON text into JSONB blobs. +** +** Each cache entry is a JsonParse object with the following restrictions: +** +** * The bReadOnly flag must be set +** +** * The aBlob[] array must be owned by the JsonParse object. In other +** words, nBlobAlloc must be non-zero. +** +** * eEdit and delta must be zero. +** +** * zJson must be an RCStr. In other words bJsonIsRCStr must be true. +*/ +struct JsonCache { + sqlite3 *db; /* Database connection */ + int nUsed; /* Number of active entries in the cache */ + JsonParse *a[JSON_CACHE_SIZE]; /* One line for each cache entry */ +}; /* An instance of this object represents a JSON string ** under construction. Really, this is a generic string accumulator ** that can be and is used to create strings other than JSON. +** +** If the generated string is longer than will fit into the zSpace[] buffer, +** then it will be an RCStr string. This aids with caching of large +** JSON strings. */ struct JsonString { sqlite3_context *pCtx; /* Function context - put error messages here */ @@ -201331,121 +205115,75 @@ struct JsonString { u64 nAlloc; /* Bytes of storage available in zBuf[] */ u64 nUsed; /* Bytes of zBuf[] currently used */ u8 bStatic; /* True if zBuf is static space */ - u8 bErr; /* True if an error has been encountered */ + u8 eErr; /* True if an error has been encountered */ char zSpace[100]; /* Initial static space */ }; -/* A deferred cleanup task. A list of JsonCleanup objects might be -** run when the JsonParse object is destroyed. -*/ -struct JsonCleanup { - JsonCleanup *pJCNext; /* Next in a list */ - void (*xOp)(void*); /* Routine to run */ - void *pArg; /* Argument to xOp() */ -}; +/* Allowed values for JsonString.eErr */ +#define JSTRING_OOM 0x01 /* Out of memory */ +#define JSTRING_MALFORMED 0x02 /* Malformed JSONB */ +#define JSTRING_ERR 0x04 /* Error already sent to sqlite3_result */ -/* JSON type values +/* The "subtype" set for text JSON values passed through using +** sqlite3_result_subtype() and sqlite3_value_subtype(). */ -#define JSON_SUBST 0 /* Special edit node. Uses u.iPrev */ -#define JSON_NULL 1 -#define JSON_TRUE 2 -#define JSON_FALSE 3 -#define JSON_INT 4 -#define JSON_REAL 5 -#define JSON_STRING 6 -#define JSON_ARRAY 7 -#define JSON_OBJECT 8 - -/* The "subtype" set for JSON values */ #define JSON_SUBTYPE 74 /* Ascii for "J" */ /* -** Names of the various JSON types: -*/ -static const char * const jsonType[] = { - "subst", - "null", "true", "false", "integer", "real", "text", "array", "object" -}; - -/* Bit values for the JsonNode.jnFlag field -*/ -#define JNODE_RAW 0x01 /* Content is raw, not JSON encoded */ -#define JNODE_ESCAPE 0x02 /* Content is text with \ escapes */ -#define JNODE_REMOVE 0x04 /* Do not output */ -#define JNODE_REPLACE 0x08 /* Target of a JSON_SUBST node */ -#define JNODE_APPEND 0x10 /* More ARRAY/OBJECT entries at u.iAppend */ -#define JNODE_LABEL 0x20 /* Is a label of an object */ -#define JNODE_JSON5 0x40 /* Node contains JSON5 enhancements */ - - -/* A single node of parsed JSON. An array of these nodes describes -** a parse of JSON + edits. -** -** Use the json_parse() SQL function (available when compiled with -** -DSQLITE_DEBUG) to see a dump of complete JsonParse objects, including -** a complete listing and decoding of the array of JsonNodes. +** Bit values for the flags passed into various SQL function implementations +** via the sqlite3_user_data() value. */ -struct JsonNode { - u8 eType; /* One of the JSON_ type values */ - u8 jnFlags; /* JNODE flags */ - u8 eU; /* Which union element to use */ - u32 n; /* Bytes of content for INT, REAL or STRING - ** Number of sub-nodes for ARRAY and OBJECT - ** Node that SUBST applies to */ - union { - const char *zJContent; /* 1: Content for INT, REAL, and STRING */ - u32 iAppend; /* 2: More terms for ARRAY and OBJECT */ - u32 iKey; /* 3: Key for ARRAY objects in json_tree() */ - u32 iPrev; /* 4: Previous SUBST node, or 0 */ - } u; -}; +#define JSON_JSON 0x01 /* Result is always JSON */ +#define JSON_SQL 0x02 /* Result is always SQL */ +#define JSON_ABPATH 0x03 /* Allow abbreviated JSON path specs */ +#define JSON_ISSET 0x04 /* json_set(), not json_insert() */ +#define JSON_BLOB 0x08 /* Use the BLOB output format */ -/* A parsed and possibly edited JSON string. Lifecycle: +/* A parsed JSON value. Lifecycle: ** -** 1. JSON comes in and is parsed into an array aNode[]. The original -** JSON text is stored in zJson. +** 1. JSON comes in and is parsed into a JSONB value in aBlob. The +** original text is stored in zJson. This step is skipped if the +** input is JSONB instead of text JSON. ** -** 2. Zero or more changes are made (via json_remove() or json_replace() -** or similar) to the aNode[] array. +** 2. The aBlob[] array is searched using the JSON path notation, if needed. ** -** 3. A new, edited and mimified JSON string is generated from aNode -** and stored in zAlt. The JsonParse object always owns zAlt. +** 3. Zero or more changes are made to aBlob[] (via json_remove() or +** json_replace() or json_patch() or similar). ** -** Step 1 always happens. Step 2 and 3 may or may not happen, depending -** on the operation. -** -** aNode[].u.zJContent entries typically point into zJson. Hence zJson -** must remain valid for the lifespan of the parse. For edits, -** aNode[].u.zJContent might point to malloced space other than zJson. -** Entries in pClup are responsible for freeing that extra malloced space. -** -** When walking the parse tree in aNode[], edits are ignored if useMod is -** false. +** 4. New JSON text is generated from the aBlob[] for output. This step +** is skipped if the function is one of the jsonb_* functions that +** returns JSONB instead of text JSON. */ struct JsonParse { - u32 nNode; /* Number of slots of aNode[] used */ - u32 nAlloc; /* Number of slots of aNode[] allocated */ - JsonNode *aNode; /* Array of nodes containing the parse */ - char *zJson; /* Original JSON string (before edits) */ - char *zAlt; /* Revised and/or mimified JSON */ - u32 *aUp; /* Index of parent of each node */ - JsonCleanup *pClup;/* Cleanup operations prior to freeing this object */ + u8 *aBlob; /* JSONB representation of JSON value */ + u32 nBlob; /* Bytes of aBlob[] actually used */ + u32 nBlobAlloc; /* Bytes allocated to aBlob[]. 0 if aBlob is external */ + char *zJson; /* Json text used for parsing */ + sqlite3 *db; /* The database connection to which this object belongs */ + int nJson; /* Length of the zJson string in bytes */ + u32 nJPRef; /* Number of references to this object */ + u32 iErr; /* Error location in zJson[] */ u16 iDepth; /* Nesting depth */ u8 nErr; /* Number of errors seen */ u8 oom; /* Set to true if out of memory */ u8 bJsonIsRCStr; /* True if zJson is an RCStr */ u8 hasNonstd; /* True if input uses non-standard features like JSON5 */ - u8 useMod; /* Actually use the edits contain inside aNode */ - u8 hasMod; /* aNode contains edits from the original zJson */ - u32 nJPRef; /* Number of references to this object */ - int nJson; /* Length of the zJson string in bytes */ - int nAlt; /* Length of alternative JSON string zAlt, in bytes */ - u32 iErr; /* Error location in zJson[] */ - u32 iSubst; /* Last JSON_SUBST entry in aNode[] */ - u32 iHold; /* Age of this entry in the cache for LRU replacement */ + u8 bReadOnly; /* Do not modify. */ + /* Search and edit information. See jsonLookupStep() */ + u8 eEdit; /* Edit operation to apply */ + int delta; /* Size change due to the edit */ + u32 nIns; /* Number of bytes to insert */ + u32 iLabel; /* Location of label if search landed on an object value */ + u8 *aIns; /* Content to be inserted */ }; +/* Allowed values for JsonParse.eEdit */ +#define JEDIT_DEL 1 /* Delete if exists */ +#define JEDIT_REPL 2 /* Overwrite if exists */ +#define JEDIT_INS 3 /* Insert if not exists */ +#define JEDIT_SET 4 /* Insert or overwrite */ + /* ** Maximum nesting depth of JSON for this implementation. ** @@ -201453,15 +205191,151 @@ struct JsonParse { ** descent parser. A depth of 1000 is far deeper than any sane JSON ** should go. Historical note: This limit was 2000 prior to version 3.42.0 */ -#define JSON_MAX_DEPTH 1000 +#ifndef SQLITE_JSON_MAX_DEPTH +# define JSON_MAX_DEPTH 1000 +#else +# define JSON_MAX_DEPTH SQLITE_JSON_MAX_DEPTH +#endif + +/* +** Allowed values for the flgs argument to jsonParseFuncArg(); +*/ +#define JSON_EDITABLE 0x01 /* Generate a writable JsonParse object */ +#define JSON_KEEPERROR 0x02 /* Return non-NULL even if there is an error */ + +/************************************************************************** +** Forward references +**************************************************************************/ +static void jsonReturnStringAsBlob(JsonString*); +static int jsonFuncArgMightBeBinary(sqlite3_value *pJson); +static u32 jsonTranslateBlobToText(const JsonParse*,u32,JsonString*); +static void jsonReturnParse(sqlite3_context*,JsonParse*); +static JsonParse *jsonParseFuncArg(sqlite3_context*,sqlite3_value*,u32); +static void jsonParseFree(JsonParse*); +static u32 jsonbPayloadSize(const JsonParse*, u32, u32*); +static u32 jsonUnescapeOneChar(const char*, u32, u32*); + +/************************************************************************** +** Utility routines for dealing with JsonCache objects +**************************************************************************/ + +/* +** Free a JsonCache object. +*/ +static void jsonCacheDelete(JsonCache *p){ + int i; + for(i=0; inUsed; i++){ + jsonParseFree(p->a[i]); + } + sqlite3DbFree(p->db, p); +} +static void jsonCacheDeleteGeneric(void *p){ + jsonCacheDelete((JsonCache*)p); +} + +/* +** Insert a new entry into the cache. If the cache is full, expel +** the least recently used entry. Return SQLITE_OK on success or a +** result code otherwise. +** +** Cache entries are stored in age order, oldest first. +*/ +static int jsonCacheInsert( + sqlite3_context *ctx, /* The SQL statement context holding the cache */ + JsonParse *pParse /* The parse object to be added to the cache */ +){ + JsonCache *p; + + assert( pParse->zJson!=0 ); + assert( pParse->bJsonIsRCStr ); + assert( pParse->delta==0 ); + p = sqlite3_get_auxdata(ctx, JSON_CACHE_ID); + if( p==0 ){ + sqlite3 *db = sqlite3_context_db_handle(ctx); + p = sqlite3DbMallocZero(db, sizeof(*p)); + if( p==0 ) return SQLITE_NOMEM; + p->db = db; + sqlite3_set_auxdata(ctx, JSON_CACHE_ID, p, jsonCacheDeleteGeneric); + p = sqlite3_get_auxdata(ctx, JSON_CACHE_ID); + if( p==0 ) return SQLITE_NOMEM; + } + if( p->nUsed >= JSON_CACHE_SIZE ){ + jsonParseFree(p->a[0]); + memmove(p->a, &p->a[1], (JSON_CACHE_SIZE-1)*sizeof(p->a[0])); + p->nUsed = JSON_CACHE_SIZE-1; + } + assert( pParse->nBlobAlloc>0 ); + pParse->eEdit = 0; + pParse->nJPRef++; + pParse->bReadOnly = 1; + p->a[p->nUsed] = pParse; + p->nUsed++; + return SQLITE_OK; +} + +/* +** Search for a cached translation the json text supplied by pArg. Return +** the JsonParse object if found. Return NULL if not found. +** +** When a match if found, the matching entry is moved to become the +** most-recently used entry if it isn't so already. +** +** The JsonParse object returned still belongs to the Cache and might +** be deleted at any moment. If the caller whants the JsonParse to +** linger, it needs to increment the nPJRef reference counter. +*/ +static JsonParse *jsonCacheSearch( + sqlite3_context *ctx, /* The SQL statement context holding the cache */ + sqlite3_value *pArg /* Function argument containing SQL text */ +){ + JsonCache *p; + int i; + const char *zJson; + int nJson; + + if( sqlite3_value_type(pArg)!=SQLITE_TEXT ){ + return 0; + } + zJson = (const char*)sqlite3_value_text(pArg); + if( zJson==0 ) return 0; + nJson = sqlite3_value_bytes(pArg); + + p = sqlite3_get_auxdata(ctx, JSON_CACHE_ID); + if( p==0 ){ + return 0; + } + for(i=0; inUsed; i++){ + if( p->a[i]->zJson==zJson ) break; + } + if( i>=p->nUsed ){ + for(i=0; inUsed; i++){ + if( p->a[i]->nJson!=nJson ) continue; + if( memcmp(p->a[i]->zJson, zJson, nJson)==0 ) break; + } + } + if( inUsed ){ + if( inUsed-1 ){ + /* Make the matching entry the most recently used entry */ + JsonParse *tmp = p->a[i]; + memmove(&p->a[i], &p->a[i+1], (p->nUsed-i-1)*sizeof(tmp)); + p->a[p->nUsed-1] = tmp; + i = p->nUsed - 1; + } + assert( p->a[i]->delta==0 ); + return p->a[i]; + }else{ + return 0; + } +} /************************************************************************** ** Utility routines for dealing with JsonString objects **************************************************************************/ -/* Set the JsonString object to an empty string +/* Turn uninitialized bulk memory into a valid JsonString object +** holding a zero-length string. */ -static void jsonZero(JsonString *p){ +static void jsonStringZero(JsonString *p){ p->zBuf = p->zSpace; p->nAlloc = sizeof(p->zSpace); p->nUsed = 0; @@ -201470,39 +205344,39 @@ static void jsonZero(JsonString *p){ /* Initialize the JsonString object */ -static void jsonInit(JsonString *p, sqlite3_context *pCtx){ +static void jsonStringInit(JsonString *p, sqlite3_context *pCtx){ p->pCtx = pCtx; - p->bErr = 0; - jsonZero(p); + p->eErr = 0; + jsonStringZero(p); } /* Free all allocated memory and reset the JsonString object back to its ** initial state. */ -static void jsonReset(JsonString *p){ +static void jsonStringReset(JsonString *p){ if( !p->bStatic ) sqlite3RCStrUnref(p->zBuf); - jsonZero(p); + jsonStringZero(p); } /* Report an out-of-memory (OOM) condition */ -static void jsonOom(JsonString *p){ - p->bErr = 1; - sqlite3_result_error_nomem(p->pCtx); - jsonReset(p); +static void jsonStringOom(JsonString *p){ + p->eErr |= JSTRING_OOM; + if( p->pCtx ) sqlite3_result_error_nomem(p->pCtx); + jsonStringReset(p); } /* Enlarge pJson->zBuf so that it can hold at least N more bytes. ** Return zero on success. Return non-zero on an OOM error */ -static int jsonGrow(JsonString *p, u32 N){ +static int jsonStringGrow(JsonString *p, u32 N){ u64 nTotal = NnAlloc ? p->nAlloc*2 : p->nAlloc+N+10; char *zNew; if( p->bStatic ){ - if( p->bErr ) return 1; + if( p->eErr ) return 1; zNew = sqlite3RCStrNew(nTotal); if( zNew==0 ){ - jsonOom(p); + jsonStringOom(p); return SQLITE_NOMEM; } memcpy(zNew, p->zBuf, (size_t)p->nUsed); @@ -201511,8 +205385,8 @@ static int jsonGrow(JsonString *p, u32 N){ }else{ p->zBuf = sqlite3RCStrResize(p->zBuf, nTotal); if( p->zBuf==0 ){ - p->bErr = 1; - jsonZero(p); + p->eErr |= JSTRING_OOM; + jsonStringZero(p); return SQLITE_NOMEM; } } @@ -201522,20 +205396,20 @@ static int jsonGrow(JsonString *p, u32 N){ /* Append N bytes from zIn onto the end of the JsonString string. */ -static SQLITE_NOINLINE void jsonAppendExpand( +static SQLITE_NOINLINE void jsonStringExpandAndAppend( JsonString *p, const char *zIn, u32 N ){ assert( N>0 ); - if( jsonGrow(p,N) ) return; + if( jsonStringGrow(p,N) ) return; memcpy(p->zBuf+p->nUsed, zIn, N); p->nUsed += N; } static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){ if( N==0 ) return; if( N+p->nUsed >= p->nAlloc ){ - jsonAppendExpand(p,zIn,N); + jsonStringExpandAndAppend(p,zIn,N); }else{ memcpy(p->zBuf+p->nUsed, zIn, N); p->nUsed += N; @@ -201544,19 +205418,18 @@ static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){ static void jsonAppendRawNZ(JsonString *p, const char *zIn, u32 N){ assert( N>0 ); if( N+p->nUsed >= p->nAlloc ){ - jsonAppendExpand(p,zIn,N); + jsonStringExpandAndAppend(p,zIn,N); }else{ memcpy(p->zBuf+p->nUsed, zIn, N); p->nUsed += N; } } - /* Append formatted text (not to exceed N bytes) to the JsonString. */ static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){ va_list ap; - if( (p->nUsed + N >= p->nAlloc) && jsonGrow(p, N) ) return; + if( (p->nUsed + N >= p->nAlloc) && jsonStringGrow(p, N) ) return; va_start(ap, zFormat); sqlite3_vsnprintf(N, p->zBuf+p->nUsed, zFormat, ap); va_end(ap); @@ -201566,7 +205439,7 @@ static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){ /* Append a single character */ static SQLITE_NOINLINE void jsonAppendCharExpand(JsonString *p, char c){ - if( jsonGrow(p,1) ) return; + if( jsonStringGrow(p,1) ) return; p->zBuf[p->nUsed++] = c; } static void jsonAppendChar(JsonString *p, char c){ @@ -201577,24 +205450,27 @@ static void jsonAppendChar(JsonString *p, char c){ } } -/* Try to force the string to be a zero-terminated RCStr string. +/* Remove a single character from the end of the string +*/ +static void jsonStringTrimOneChar(JsonString *p){ + if( p->eErr==0 ){ + assert( p->nUsed>0 ); + p->nUsed--; + } +} + + +/* Make sure there is a zero terminator on p->zBuf[] ** ** Return true on success. Return false if an OOM prevents this ** from happening. */ -static int jsonForceRCStr(JsonString *p){ +static int jsonStringTerminate(JsonString *p){ jsonAppendChar(p, 0); - if( p->bErr ) return 0; - p->nUsed--; - if( p->bStatic==0 ) return 1; - p->nAlloc = 0; - p->nUsed++; - jsonGrow(p, p->nUsed); - p->nUsed--; - return p->bStatic==0; + jsonStringTrimOneChar(p); + return p->eErr==0; } - /* Append a comma separator to the output buffer, if the previous ** character is not '[' or '{'. */ @@ -201606,184 +205482,120 @@ static void jsonAppendSeparator(JsonString *p){ jsonAppendChar(p, ','); } -/* Append the N-byte string in zIn to the end of the JsonString string -** under construction. Enclose the string in "..." and escape -** any double-quotes or backslash characters contained within the -** string. +/* c is a control character. Append the canonical JSON representation +** of that control character to p. +** +** This routine assumes that the output buffer has already been enlarged +** sufficiently to hold the worst-case encoding plus a nul terminator. */ -static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ - u32 i; - if( zIn==0 || ((N+p->nUsed+2 >= p->nAlloc) && jsonGrow(p,N+2)!=0) ) return; - p->zBuf[p->nUsed++] = '"'; - for(i=0; izBuf[p->nUsed++] = c; - }else if( c=='"' || c=='\\' ){ - json_simple_escape: - if( (p->nUsed+N+3-i > p->nAlloc) && jsonGrow(p,N+3-i)!=0 ) return; - p->zBuf[p->nUsed++] = '\\'; - p->zBuf[p->nUsed++] = c; - }else if( c=='\'' ){ - p->zBuf[p->nUsed++] = c; - }else{ - static const char aSpecial[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - assert( sizeof(aSpecial)==32 ); - assert( aSpecial['\b']=='b' ); - assert( aSpecial['\f']=='f' ); - assert( aSpecial['\n']=='n' ); - assert( aSpecial['\r']=='r' ); - assert( aSpecial['\t']=='t' ); - assert( c>=0 && cnUsed+N+7+i > p->nAlloc) && jsonGrow(p,N+7-i)!=0 ) return; - p->zBuf[p->nUsed++] = '\\'; - p->zBuf[p->nUsed++] = 'u'; - p->zBuf[p->nUsed++] = '0'; - p->zBuf[p->nUsed++] = '0'; - p->zBuf[p->nUsed++] = "0123456789abcdef"[c>>4]; - p->zBuf[p->nUsed++] = "0123456789abcdef"[c&0xf]; - } +static void jsonAppendControlChar(JsonString *p, u8 c){ + static const char aSpecial[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + assert( sizeof(aSpecial)==32 ); + assert( aSpecial['\b']=='b' ); + assert( aSpecial['\f']=='f' ); + assert( aSpecial['\n']=='n' ); + assert( aSpecial['\r']=='r' ); + assert( aSpecial['\t']=='t' ); + assert( c>=0 && cnUsed+7 <= p->nAlloc ); + if( aSpecial[c] ){ + p->zBuf[p->nUsed] = '\\'; + p->zBuf[p->nUsed+1] = aSpecial[c]; + p->nUsed += 2; + }else{ + p->zBuf[p->nUsed] = '\\'; + p->zBuf[p->nUsed+1] = 'u'; + p->zBuf[p->nUsed+2] = '0'; + p->zBuf[p->nUsed+3] = '0'; + p->zBuf[p->nUsed+4] = "0123456789abcdef"[c>>4]; + p->zBuf[p->nUsed+5] = "0123456789abcdef"[c&0xf]; + p->nUsed += 6; } - p->zBuf[p->nUsed++] = '"'; - assert( p->nUsednAlloc ); } -/* -** The zIn[0..N] string is a JSON5 string literal. Append to p a translation -** of the string literal that standard JSON and that omits all JSON5 -** features. +/* Append the N-byte string in zIn to the end of the JsonString string +** under construction. Enclose the string in double-quotes ("...") and +** escape any double-quotes or backslash characters contained within the +** string. +** +** This routine is a high-runner. There is a measurable performance +** increase associated with unwinding the jsonIsOk[] loop. */ -static void jsonAppendNormalizedString(JsonString *p, const char *zIn, u32 N){ - u32 i; - jsonAppendChar(p, '"'); - zIn++; - N -= 2; - while( N>0 ){ - for(i=0; i0 ){ - jsonAppendRawNZ(p, zIn, i); - zIn += i; - N -= i; - if( N==0 ) break; - } - assert( zIn[0]=='\\' ); - switch( (u8)zIn[1] ){ - case '\'': - jsonAppendChar(p, '\''); - break; - case 'v': - jsonAppendRawNZ(p, "\\u0009", 6); - break; - case 'x': - jsonAppendRawNZ(p, "\\u00", 4); - jsonAppendRawNZ(p, &zIn[2], 2); - zIn += 2; - N -= 2; - break; - case '0': - jsonAppendRawNZ(p, "\\u0000", 6); +static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ + u32 k; + u8 c; + const u8 *z = (const u8*)zIn; + if( z==0 ) return; + if( (N+p->nUsed+2 >= p->nAlloc) && jsonStringGrow(p,N+2)!=0 ) return; + p->zBuf[p->nUsed++] = '"'; + while( 1 /*exit-by-break*/ ){ + k = 0; + /* The following while() is the 4-way unwound equivalent of + ** + ** while( k=N ){ + while( k=4 ); - assert( 0x80==(u8)zIn[2] ); - assert( 0xa8==(u8)zIn[3] || 0xa9==(u8)zIn[3] ); - zIn += 2; - N -= 2; + } + if( !jsonIsOk[z[k+2]] ){ + k += 2; break; - default: - jsonAppendRawNZ(p, zIn, 2); + } + if( !jsonIsOk[z[k+3]] ){ + k += 3; break; + }else{ + k += 4; + } } - zIn += 2; - N -= 2; - } - jsonAppendChar(p, '"'); -} - -/* -** The zIn[0..N] string is a JSON5 integer literal. Append to p a translation -** of the string literal that standard JSON and that omits all JSON5 -** features. -*/ -static void jsonAppendNormalizedInt(JsonString *p, const char *zIn, u32 N){ - if( zIn[0]=='+' ){ - zIn++; - N--; - }else if( zIn[0]=='-' ){ - jsonAppendChar(p, '-'); - zIn++; - N--; - } - if( zIn[0]=='0' && (zIn[1]=='x' || zIn[1]=='X') ){ - sqlite3_int64 i = 0; - int rc = sqlite3DecOrHexToI64(zIn, &i); - if( rc<=1 ){ - jsonPrintf(100,p,"%lld",i); + if( k>=N ){ + if( k>0 ){ + memcpy(&p->zBuf[p->nUsed], z, k); + p->nUsed += k; + } + break; + } + if( k>0 ){ + memcpy(&p->zBuf[p->nUsed], z, k); + p->nUsed += k; + z += k; + N -= k; + } + c = z[0]; + if( c=='"' || c=='\\' ){ + if( (p->nUsed+N+3 > p->nAlloc) && jsonStringGrow(p,N+3)!=0 ) return; + p->zBuf[p->nUsed++] = '\\'; + p->zBuf[p->nUsed++] = c; + }else if( c=='\'' ){ + p->zBuf[p->nUsed++] = c; }else{ - assert( rc==2 ); - jsonAppendRawNZ(p, "9.0e999", 7); + if( (p->nUsed+N+7 > p->nAlloc) && jsonStringGrow(p,N+7)!=0 ) return; + jsonAppendControlChar(p, c); } - return; - } - assert( N>0 ); - jsonAppendRawNZ(p, zIn, N); -} - -/* -** The zIn[0..N] string is a JSON5 real literal. Append to p a translation -** of the string literal that standard JSON and that omits all JSON5 -** features. -*/ -static void jsonAppendNormalizedReal(JsonString *p, const char *zIn, u32 N){ - u32 i; - if( zIn[0]=='+' ){ - zIn++; - N--; - }else if( zIn[0]=='-' ){ - jsonAppendChar(p, '-'); - zIn++; + z++; N--; } - if( zIn[0]=='.' ){ - jsonAppendChar(p, '0'); - } - for(i=0; i0 ){ - jsonAppendRawNZ(p, zIn, N); - } + p->zBuf[p->nUsed++] = '"'; + assert( p->nUsednAlloc ); } - - /* -** Append a function parameter value to the JSON string under -** construction. +** Append an sqlite3_value (such as a function parameter) to the JSON +** string under construction in p. */ -static void jsonAppendValue( +static void jsonAppendSqlValue( JsonString *p, /* Append to this JSON string */ sqlite3_value *pValue /* Value to append */ ){ @@ -201813,290 +205625,127 @@ static void jsonAppendValue( break; } default: { - if( p->bErr==0 ){ + if( jsonFuncArgMightBeBinary(pValue) ){ + JsonParse px; + memset(&px, 0, sizeof(px)); + px.aBlob = (u8*)sqlite3_value_blob(pValue); + px.nBlob = sqlite3_value_bytes(pValue); + jsonTranslateBlobToText(&px, 0, p); + }else if( p->eErr==0 ){ sqlite3_result_error(p->pCtx, "JSON cannot hold BLOB values", -1); - p->bErr = 2; - jsonReset(p); + p->eErr = JSTRING_ERR; + jsonStringReset(p); } break; } } } - -/* Make the JSON in p the result of the SQL function. +/* Make the text in p (which is probably a generated JSON text string) +** the result of the SQL function. +** +** The JsonString is reset. ** -** The JSON string is reset. +** If pParse and ctx are both non-NULL, then the SQL string in p is +** loaded into the zJson field of the pParse object as a RCStr and the +** pParse is added to the cache. */ -static void jsonResult(JsonString *p){ - if( p->bErr==0 ){ - if( p->bStatic ){ +static void jsonReturnString( + JsonString *p, /* String to return */ + JsonParse *pParse, /* JSONB source or NULL */ + sqlite3_context *ctx /* Where to cache */ +){ + assert( (pParse!=0)==(ctx!=0) ); + assert( ctx==0 || ctx==p->pCtx ); + if( p->eErr==0 ){ + int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(p->pCtx)); + if( flags & JSON_BLOB ){ + jsonReturnStringAsBlob(p); + }else if( p->bStatic ){ sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, SQLITE_TRANSIENT, SQLITE_UTF8); - }else if( jsonForceRCStr(p) ){ - sqlite3RCStrRef(p->zBuf); - sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, - (void(*)(void*))sqlite3RCStrUnref, + }else if( jsonStringTerminate(p) ){ + if( pParse && pParse->bJsonIsRCStr==0 && pParse->nBlobAlloc>0 ){ + int rc; + pParse->zJson = sqlite3RCStrRef(p->zBuf); + pParse->nJson = p->nUsed; + pParse->bJsonIsRCStr = 1; + rc = jsonCacheInsert(ctx, pParse); + if( rc==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(ctx); + jsonStringReset(p); + return; + } + } + sqlite3_result_text64(p->pCtx, sqlite3RCStrRef(p->zBuf), p->nUsed, + sqlite3RCStrUnref, SQLITE_UTF8); + }else{ + sqlite3_result_error_nomem(p->pCtx); } - } - if( p->bErr==1 ){ + }else if( p->eErr & JSTRING_OOM ){ sqlite3_result_error_nomem(p->pCtx); + }else if( p->eErr & JSTRING_MALFORMED ){ + sqlite3_result_error(p->pCtx, "malformed JSON", -1); } - jsonReset(p); + jsonStringReset(p); } /************************************************************************** -** Utility routines for dealing with JsonNode and JsonParse objects +** Utility routines for dealing with JsonParse objects **************************************************************************/ -/* -** Return the number of consecutive JsonNode slots need to represent -** the parsed JSON at pNode. The minimum answer is 1. For ARRAY and -** OBJECT types, the number might be larger. -** -** Appended elements are not counted. The value returned is the number -** by which the JsonNode counter should increment in order to go to the -** next peer value. -*/ -static u32 jsonNodeSize(JsonNode *pNode){ - return pNode->eType>=JSON_ARRAY ? pNode->n+1 : 1; -} - /* ** Reclaim all memory allocated by a JsonParse object. But do not ** delete the JsonParse object itself. */ static void jsonParseReset(JsonParse *pParse){ - while( pParse->pClup ){ - JsonCleanup *pTask = pParse->pClup; - pParse->pClup = pTask->pJCNext; - pTask->xOp(pTask->pArg); - sqlite3_free(pTask); - } assert( pParse->nJPRef<=1 ); - if( pParse->aNode ){ - sqlite3_free(pParse->aNode); - pParse->aNode = 0; - } - pParse->nNode = 0; - pParse->nAlloc = 0; - if( pParse->aUp ){ - sqlite3_free(pParse->aUp); - pParse->aUp = 0; - } if( pParse->bJsonIsRCStr ){ sqlite3RCStrUnref(pParse->zJson); pParse->zJson = 0; + pParse->nJson = 0; pParse->bJsonIsRCStr = 0; } - if( pParse->zAlt ){ - sqlite3RCStrUnref(pParse->zAlt); - pParse->zAlt = 0; + if( pParse->nBlobAlloc ){ + sqlite3DbFree(pParse->db, pParse->aBlob); + pParse->aBlob = 0; + pParse->nBlob = 0; + pParse->nBlobAlloc = 0; } } /* -** Free a JsonParse object that was obtained from sqlite3_malloc(). -** -** Note that destroying JsonParse might call sqlite3RCStrUnref() to -** destroy the zJson value. The RCStr object might recursively invoke -** JsonParse to destroy this pParse object again. Take care to ensure -** that this recursive destructor sequence terminates harmlessly. +** Decrement the reference count on the JsonParse object. When the +** count reaches zero, free the object. */ static void jsonParseFree(JsonParse *pParse){ - if( pParse->nJPRef>1 ){ - pParse->nJPRef--; - }else{ - jsonParseReset(pParse); - sqlite3_free(pParse); - } -} - -/* -** Add a cleanup task to the JsonParse object. -** -** If an OOM occurs, the cleanup operation happens immediately -** and this function returns SQLITE_NOMEM. -*/ -static int jsonParseAddCleanup( - JsonParse *pParse, /* Add the cleanup task to this parser */ - void(*xOp)(void*), /* The cleanup task */ - void *pArg /* Argument to the cleanup */ -){ - JsonCleanup *pTask = sqlite3_malloc64( sizeof(*pTask) ); - if( pTask==0 ){ - pParse->oom = 1; - xOp(pArg); - return SQLITE_ERROR; - } - pTask->pJCNext = pParse->pClup; - pParse->pClup = pTask; - pTask->xOp = xOp; - pTask->pArg = pArg; - return SQLITE_OK; -} - -/* -** Convert the JsonNode pNode into a pure JSON string and -** append to pOut. Subsubstructure is also included. Return -** the number of JsonNode objects that are encoded. -*/ -static void jsonRenderNode( - JsonParse *pParse, /* the complete parse of the JSON */ - JsonNode *pNode, /* The node to render */ - JsonString *pOut /* Write JSON here */ -){ - assert( pNode!=0 ); - while( (pNode->jnFlags & JNODE_REPLACE)!=0 && pParse->useMod ){ - u32 idx = (u32)(pNode - pParse->aNode); - u32 i = pParse->iSubst; - while( 1 /*exit-by-break*/ ){ - assert( inNode ); - assert( pParse->aNode[i].eType==JSON_SUBST ); - assert( pParse->aNode[i].eU==4 ); - assert( pParse->aNode[i].u.iPrevaNode[i].n==idx ){ - pNode = &pParse->aNode[i+1]; - break; - } - i = pParse->aNode[i].u.iPrev; - } - } - switch( pNode->eType ){ - default: { - assert( pNode->eType==JSON_NULL ); - jsonAppendRawNZ(pOut, "null", 4); - break; - } - case JSON_TRUE: { - jsonAppendRawNZ(pOut, "true", 4); - break; - } - case JSON_FALSE: { - jsonAppendRawNZ(pOut, "false", 5); - break; - } - case JSON_STRING: { - assert( pNode->eU==1 ); - if( pNode->jnFlags & JNODE_RAW ){ - if( pNode->jnFlags & JNODE_LABEL ){ - jsonAppendChar(pOut, '"'); - jsonAppendRaw(pOut, pNode->u.zJContent, pNode->n); - jsonAppendChar(pOut, '"'); - }else{ - jsonAppendString(pOut, pNode->u.zJContent, pNode->n); - } - }else if( pNode->jnFlags & JNODE_JSON5 ){ - jsonAppendNormalizedString(pOut, pNode->u.zJContent, pNode->n); - }else{ - assert( pNode->n>0 ); - jsonAppendRawNZ(pOut, pNode->u.zJContent, pNode->n); - } - break; - } - case JSON_REAL: { - assert( pNode->eU==1 ); - if( pNode->jnFlags & JNODE_JSON5 ){ - jsonAppendNormalizedReal(pOut, pNode->u.zJContent, pNode->n); - }else{ - assert( pNode->n>0 ); - jsonAppendRawNZ(pOut, pNode->u.zJContent, pNode->n); - } - break; - } - case JSON_INT: { - assert( pNode->eU==1 ); - if( pNode->jnFlags & JNODE_JSON5 ){ - jsonAppendNormalizedInt(pOut, pNode->u.zJContent, pNode->n); - }else{ - assert( pNode->n>0 ); - jsonAppendRawNZ(pOut, pNode->u.zJContent, pNode->n); - } - break; - } - case JSON_ARRAY: { - u32 j = 1; - jsonAppendChar(pOut, '['); - for(;;){ - while( j<=pNode->n ){ - if( (pNode[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ){ - jsonAppendSeparator(pOut); - jsonRenderNode(pParse, &pNode[j], pOut); - } - j += jsonNodeSize(&pNode[j]); - } - if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; - if( pParse->useMod==0 ) break; - assert( pNode->eU==2 ); - pNode = &pParse->aNode[pNode->u.iAppend]; - j = 1; - } - jsonAppendChar(pOut, ']'); - break; - } - case JSON_OBJECT: { - u32 j = 1; - jsonAppendChar(pOut, '{'); - for(;;){ - while( j<=pNode->n ){ - if( (pNode[j+1].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ){ - jsonAppendSeparator(pOut); - jsonRenderNode(pParse, &pNode[j], pOut); - jsonAppendChar(pOut, ':'); - jsonRenderNode(pParse, &pNode[j+1], pOut); - } - j += 1 + jsonNodeSize(&pNode[j+1]); - } - if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; - if( pParse->useMod==0 ) break; - assert( pNode->eU==2 ); - pNode = &pParse->aNode[pNode->u.iAppend]; - j = 1; - } - jsonAppendChar(pOut, '}'); - break; + if( pParse ){ + if( pParse->nJPRef>1 ){ + pParse->nJPRef--; + }else{ + jsonParseReset(pParse); + sqlite3DbFree(pParse->db, pParse); } } } -/* -** Return a JsonNode and all its descendants as a JSON string. -*/ -static void jsonReturnJson( - JsonParse *pParse, /* The complete JSON */ - JsonNode *pNode, /* Node to return */ - sqlite3_context *pCtx, /* Return value for this function */ - int bGenerateAlt /* Also store the rendered text in zAlt */ -){ - JsonString s; - if( pParse->oom ){ - sqlite3_result_error_nomem(pCtx); - return; - } - if( pParse->nErr==0 ){ - jsonInit(&s, pCtx); - jsonRenderNode(pParse, pNode, &s); - if( bGenerateAlt && pParse->zAlt==0 && jsonForceRCStr(&s) ){ - pParse->zAlt = sqlite3RCStrRef(s.zBuf); - pParse->nAlt = s.nUsed; - } - jsonResult(&s); - sqlite3_result_subtype(pCtx, JSON_SUBTYPE); - } -} +/************************************************************************** +** Utility routines for the JSON text parser +**************************************************************************/ /* ** Translate a single byte of Hex into an integer. -** This routine only works if h really is a valid hexadecimal -** character: 0..9a..fA..F +** This routine only gives a correct answer if h really is a valid hexadecimal +** character: 0..9a..fA..F. But unlike sqlite3HexToInt(), it does not +** assert() if the digit is not hex. */ static u8 jsonHexToInt(int h){ - assert( (h>='0' && h<='9') || (h>='a' && h<='f') || (h>='A' && h<='F') ); +#ifdef SQLITE_ASCII + h += 9*(1&(h>>6)); +#endif #ifdef SQLITE_EBCDIC h += 9*(1&~(h>>4)); -#else - h += 9*(1&(h>>6)); #endif return (u8)(h & 0xf); } @@ -202106,10 +205755,6 @@ static u8 jsonHexToInt(int h){ */ static u32 jsonHexToInt4(const char *z){ u32 v; - assert( sqlite3Isxdigit(z[0]) ); - assert( sqlite3Isxdigit(z[1]) ); - assert( sqlite3Isxdigit(z[2]) ); - assert( sqlite3Isxdigit(z[3]) ); v = (jsonHexToInt(z[0])<<12) + (jsonHexToInt(z[1])<<8) + (jsonHexToInt(z[2])<<4) @@ -202117,281 +205762,6 @@ static u32 jsonHexToInt4(const char *z){ return v; } -/* -** Make the JsonNode the return value of the function. -*/ -static void jsonReturn( - JsonParse *pParse, /* Complete JSON parse tree */ - JsonNode *pNode, /* Node to return */ - sqlite3_context *pCtx /* Return value for this function */ -){ - switch( pNode->eType ){ - default: { - assert( pNode->eType==JSON_NULL ); - sqlite3_result_null(pCtx); - break; - } - case JSON_TRUE: { - sqlite3_result_int(pCtx, 1); - break; - } - case JSON_FALSE: { - sqlite3_result_int(pCtx, 0); - break; - } - case JSON_INT: { - sqlite3_int64 i = 0; - int rc; - int bNeg = 0; - const char *z; - - assert( pNode->eU==1 ); - z = pNode->u.zJContent; - if( z[0]=='-' ){ z++; bNeg = 1; } - else if( z[0]=='+' ){ z++; } - rc = sqlite3DecOrHexToI64(z, &i); - if( rc<=1 ){ - sqlite3_result_int64(pCtx, bNeg ? -i : i); - }else if( rc==3 && bNeg ){ - sqlite3_result_int64(pCtx, SMALLEST_INT64); - }else{ - goto to_double; - } - break; - } - case JSON_REAL: { - double r; - const char *z; - assert( pNode->eU==1 ); - to_double: - z = pNode->u.zJContent; - sqlite3AtoF(z, &r, sqlite3Strlen30(z), SQLITE_UTF8); - sqlite3_result_double(pCtx, r); - break; - } - case JSON_STRING: { - if( pNode->jnFlags & JNODE_RAW ){ - assert( pNode->eU==1 ); - sqlite3_result_text(pCtx, pNode->u.zJContent, pNode->n, - SQLITE_TRANSIENT); - }else if( (pNode->jnFlags & JNODE_ESCAPE)==0 ){ - /* JSON formatted without any backslash-escapes */ - assert( pNode->eU==1 ); - sqlite3_result_text(pCtx, pNode->u.zJContent+1, pNode->n-2, - SQLITE_TRANSIENT); - }else{ - /* Translate JSON formatted string into raw text */ - u32 i; - u32 n = pNode->n; - const char *z; - char *zOut; - u32 j; - u32 nOut = n; - assert( pNode->eU==1 ); - z = pNode->u.zJContent; - zOut = sqlite3_malloc( nOut+1 ); - if( zOut==0 ){ - sqlite3_result_error_nomem(pCtx); - break; - } - for(i=1, j=0; i>6)); - zOut[j++] = 0x80 | (v&0x3f); - }else{ - u32 vlo; - if( (v&0xfc00)==0xd800 - && i>18); - zOut[j++] = 0x80 | ((v>>12)&0x3f); - zOut[j++] = 0x80 | ((v>>6)&0x3f); - zOut[j++] = 0x80 | (v&0x3f); - }else{ - zOut[j++] = 0xe0 | (v>>12); - zOut[j++] = 0x80 | ((v>>6)&0x3f); - zOut[j++] = 0x80 | (v&0x3f); - } - } - continue; - }else if( c=='b' ){ - c = '\b'; - }else if( c=='f' ){ - c = '\f'; - }else if( c=='n' ){ - c = '\n'; - }else if( c=='r' ){ - c = '\r'; - }else if( c=='t' ){ - c = '\t'; - }else if( c=='v' ){ - c = '\v'; - }else if( c=='\'' || c=='"' || c=='/' || c=='\\' ){ - /* pass through unchanged */ - }else if( c=='0' ){ - c = 0; - }else if( c=='x' ){ - c = (jsonHexToInt(z[i+1])<<4) | jsonHexToInt(z[i+2]); - i += 2; - }else if( c=='\r' && z[i+1]=='\n' ){ - i++; - continue; - }else if( 0xe2==(u8)c ){ - assert( 0x80==(u8)z[i+1] ); - assert( 0xa8==(u8)z[i+2] || 0xa9==(u8)z[i+2] ); - i += 2; - continue; - }else{ - continue; - } - } /* end if( c=='\\' ) */ - zOut[j++] = c; - } /* end for() */ - zOut[j] = 0; - sqlite3_result_text(pCtx, zOut, j, sqlite3_free); - } - break; - } - case JSON_ARRAY: - case JSON_OBJECT: { - jsonReturnJson(pParse, pNode, pCtx, 0); - break; - } - } -} - -/* Forward reference */ -static int jsonParseAddNode(JsonParse*,u32,u32,const char*); - -/* -** A macro to hint to the compiler that a function should not be -** inlined. -*/ -#if defined(__GNUC__) -# define JSON_NOINLINE __attribute__((noinline)) -#elif defined(_MSC_VER) && _MSC_VER>=1310 -# define JSON_NOINLINE __declspec(noinline) -#else -# define JSON_NOINLINE -#endif - - -/* -** Add a single node to pParse->aNode after first expanding the -** size of the aNode array. Return the index of the new node. -** -** If an OOM error occurs, set pParse->oom and return -1. -*/ -static JSON_NOINLINE int jsonParseAddNodeExpand( - JsonParse *pParse, /* Append the node to this object */ - u32 eType, /* Node type */ - u32 n, /* Content size or sub-node count */ - const char *zContent /* Content */ -){ - u32 nNew; - JsonNode *pNew; - assert( pParse->nNode>=pParse->nAlloc ); - if( pParse->oom ) return -1; - nNew = pParse->nAlloc*2 + 10; - pNew = sqlite3_realloc64(pParse->aNode, sizeof(JsonNode)*nNew); - if( pNew==0 ){ - pParse->oom = 1; - return -1; - } - pParse->nAlloc = sqlite3_msize(pNew)/sizeof(JsonNode); - pParse->aNode = pNew; - assert( pParse->nNodenAlloc ); - return jsonParseAddNode(pParse, eType, n, zContent); -} - -/* -** Create a new JsonNode instance based on the arguments and append that -** instance to the JsonParse. Return the index in pParse->aNode[] of the -** new node, or -1 if a memory allocation fails. -*/ -static int jsonParseAddNode( - JsonParse *pParse, /* Append the node to this object */ - u32 eType, /* Node type */ - u32 n, /* Content size or sub-node count */ - const char *zContent /* Content */ -){ - JsonNode *p; - assert( pParse->aNode!=0 || pParse->nNode>=pParse->nAlloc ); - if( pParse->nNode>=pParse->nAlloc ){ - return jsonParseAddNodeExpand(pParse, eType, n, zContent); - } - assert( pParse->aNode!=0 ); - p = &pParse->aNode[pParse->nNode]; - assert( p!=0 ); - p->eType = (u8)(eType & 0xff); - p->jnFlags = (u8)(eType >> 8); - VVA( p->eU = zContent ? 1 : 0 ); - p->n = n; - p->u.zJContent = zContent; - return pParse->nNode++; -} - -/* -** Add an array of new nodes to the current pParse->aNode array. -** Return the index of the first node added. -** -** If an OOM error occurs, set pParse->oom. -*/ -static void jsonParseAddNodeArray( - JsonParse *pParse, /* Append the node to this object */ - JsonNode *aNode, /* Array of nodes to add */ - u32 nNode /* Number of elements in aNew */ -){ - assert( aNode!=0 ); - assert( nNode>=1 ); - if( pParse->nNode + nNode > pParse->nAlloc ){ - u32 nNew = pParse->nNode + nNode; - JsonNode *aNew = sqlite3_realloc64(pParse->aNode, nNew*sizeof(JsonNode)); - if( aNew==0 ){ - pParse->oom = 1; - return; - } - pParse->nAlloc = sqlite3_msize(aNew)/sizeof(JsonNode); - pParse->aNode = aNew; - } - memcpy(&pParse->aNode[pParse->nNode], aNode, nNode*sizeof(JsonNode)); - pParse->nNode += nNode; -} - -/* -** Add a new JSON_SUBST node. The node immediately following -** this new node will be the substitute content for iNode. -*/ -static int jsonParseAddSubstNode( - JsonParse *pParse, /* Add the JSON_SUBST here */ - u32 iNode /* References this node */ -){ - int idx = jsonParseAddNode(pParse, JSON_SUBST, iNode, 0); - if( pParse->oom ) return -1; - pParse->aNode[iNode].jnFlags |= JNODE_REPLACE; - pParse->aNode[idx].eU = 4; - pParse->aNode[idx].u.iPrev = pParse->iSubst; - pParse->iSubst = idx; - pParse->hasMod = 1; - pParse->useMod = 1; - return idx; -} - /* ** Return true if z[] begins with 2 (or more) hexadecimal digits */ @@ -202545,63 +205915,503 @@ static const struct NanInfName { char *zMatch; char *zRepl; } aNanInfName[] = { - { 'i', 'I', 3, JSON_REAL, 7, "inf", "9.0e999" }, - { 'i', 'I', 8, JSON_REAL, 7, "infinity", "9.0e999" }, - { 'n', 'N', 3, JSON_NULL, 4, "NaN", "null" }, - { 'q', 'Q', 4, JSON_NULL, 4, "QNaN", "null" }, - { 's', 'S', 4, JSON_NULL, 4, "SNaN", "null" }, + { 'i', 'I', 3, JSONB_FLOAT, 7, "inf", "9.0e999" }, + { 'i', 'I', 8, JSONB_FLOAT, 7, "infinity", "9.0e999" }, + { 'n', 'N', 3, JSONB_NULL, 4, "NaN", "null" }, + { 'q', 'Q', 4, JSONB_NULL, 4, "QNaN", "null" }, + { 's', 'S', 4, JSONB_NULL, 4, "SNaN", "null" }, }; + /* -** Parse a single JSON value which begins at pParse->zJson[i]. Return the -** index of the first character past the end of the value parsed. +** Report the wrong number of arguments for json_insert(), json_replace() +** or json_set(). +*/ +static void jsonWrongNumArgs( + sqlite3_context *pCtx, + const char *zFuncName +){ + char *zMsg = sqlite3_mprintf("json_%s() needs an odd number of arguments", + zFuncName); + sqlite3_result_error(pCtx, zMsg, -1); + sqlite3_free(zMsg); +} + +/**************************************************************************** +** Utility routines for dealing with the binary BLOB representation of JSON +****************************************************************************/ + +/* +** Expand pParse->aBlob so that it holds at least N bytes. ** -** Special return values: +** Return the number of errors. +*/ +static int jsonBlobExpand(JsonParse *pParse, u32 N){ + u8 *aNew; + u32 t; + assert( N>pParse->nBlobAlloc ); + if( pParse->nBlobAlloc==0 ){ + t = 100; + }else{ + t = pParse->nBlobAlloc*2; + } + if( tdb, pParse->aBlob, t); + if( aNew==0 ){ pParse->oom = 1; return 1; } + pParse->aBlob = aNew; + pParse->nBlobAlloc = t; + return 0; +} + +/* +** If pParse->aBlob is not previously editable (because it is taken +** from sqlite3_value_blob(), as indicated by the fact that +** pParse->nBlobAlloc==0 and pParse->nBlob>0) then make it editable +** by making a copy into space obtained from malloc. +** +** Return true on success. Return false on OOM. +*/ +static int jsonBlobMakeEditable(JsonParse *pParse, u32 nExtra){ + u8 *aOld; + u32 nSize; + assert( !pParse->bReadOnly ); + if( pParse->oom ) return 0; + if( pParse->nBlobAlloc>0 ) return 1; + aOld = pParse->aBlob; + nSize = pParse->nBlob + nExtra; + pParse->aBlob = 0; + if( jsonBlobExpand(pParse, nSize) ){ + return 0; + } + assert( pParse->nBlobAlloc >= pParse->nBlob + nExtra ); + memcpy(pParse->aBlob, aOld, pParse->nBlob); + return 1; +} + +/* Expand pParse->aBlob and append one bytes. +*/ +static SQLITE_NOINLINE void jsonBlobExpandAndAppendOneByte( + JsonParse *pParse, + u8 c +){ + jsonBlobExpand(pParse, pParse->nBlob+1); + if( pParse->oom==0 ){ + assert( pParse->nBlob+1<=pParse->nBlobAlloc ); + pParse->aBlob[pParse->nBlob++] = c; + } +} + +/* Append a single character. +*/ +static void jsonBlobAppendOneByte(JsonParse *pParse, u8 c){ + if( pParse->nBlob >= pParse->nBlobAlloc ){ + jsonBlobExpandAndAppendOneByte(pParse, c); + }else{ + pParse->aBlob[pParse->nBlob++] = c; + } +} + +/* Slow version of jsonBlobAppendNode() that first resizes the +** pParse->aBlob structure. +*/ +static void jsonBlobAppendNode(JsonParse*,u8,u32,const void*); +static SQLITE_NOINLINE void jsonBlobExpandAndAppendNode( + JsonParse *pParse, + u8 eType, + u32 szPayload, + const void *aPayload +){ + if( jsonBlobExpand(pParse, pParse->nBlob+szPayload+9) ) return; + jsonBlobAppendNode(pParse, eType, szPayload, aPayload); +} + + +/* Append an node type byte together with the payload size and +** possibly also the payload. +** +** If aPayload is not NULL, then it is a pointer to the payload which +** is also appended. If aPayload is NULL, the pParse->aBlob[] array +** is resized (if necessary) so that it is big enough to hold the +** payload, but the payload is not appended and pParse->nBlob is left +** pointing to where the first byte of payload will eventually be. +*/ +static void jsonBlobAppendNode( + JsonParse *pParse, /* The JsonParse object under construction */ + u8 eType, /* Node type. One of JSONB_* */ + u32 szPayload, /* Number of bytes of payload */ + const void *aPayload /* The payload. Might be NULL */ +){ + u8 *a; + if( pParse->nBlob+szPayload+9 > pParse->nBlobAlloc ){ + jsonBlobExpandAndAppendNode(pParse,eType,szPayload,aPayload); + return; + } + assert( pParse->aBlob!=0 ); + a = &pParse->aBlob[pParse->nBlob]; + if( szPayload<=11 ){ + a[0] = eType | (szPayload<<4); + pParse->nBlob += 1; + }else if( szPayload<=0xff ){ + a[0] = eType | 0xc0; + a[1] = szPayload & 0xff; + pParse->nBlob += 2; + }else if( szPayload<=0xffff ){ + a[0] = eType | 0xd0; + a[1] = (szPayload >> 8) & 0xff; + a[2] = szPayload & 0xff; + pParse->nBlob += 3; + }else{ + a[0] = eType | 0xe0; + a[1] = (szPayload >> 24) & 0xff; + a[2] = (szPayload >> 16) & 0xff; + a[3] = (szPayload >> 8) & 0xff; + a[4] = szPayload & 0xff; + pParse->nBlob += 5; + } + if( aPayload ){ + pParse->nBlob += szPayload; + memcpy(&pParse->aBlob[pParse->nBlob-szPayload], aPayload, szPayload); + } +} + +/* Change the payload size for the node at index i to be szPayload. +*/ +static int jsonBlobChangePayloadSize( + JsonParse *pParse, + u32 i, + u32 szPayload +){ + u8 *a; + u8 szType; + u8 nExtra; + u8 nNeeded; + int delta; + if( pParse->oom ) return 0; + a = &pParse->aBlob[i]; + szType = a[0]>>4; + if( szType<=11 ){ + nExtra = 0; + }else if( szType==12 ){ + nExtra = 1; + }else if( szType==13 ){ + nExtra = 2; + }else{ + nExtra = 4; + } + if( szPayload<=11 ){ + nNeeded = 0; + }else if( szPayload<=0xff ){ + nNeeded = 1; + }else if( szPayload<=0xffff ){ + nNeeded = 2; + }else{ + nNeeded = 4; + } + delta = nNeeded - nExtra; + if( delta ){ + u32 newSize = pParse->nBlob + delta; + if( delta>0 ){ + if( newSize>pParse->nBlobAlloc && jsonBlobExpand(pParse, newSize) ){ + return 0; /* OOM error. Error state recorded in pParse->oom. */ + } + a = &pParse->aBlob[i]; + memmove(&a[1+delta], &a[1], pParse->nBlob - (i+1)); + }else{ + memmove(&a[1], &a[1-delta], pParse->nBlob - (i+1-delta)); + } + pParse->nBlob = newSize; + } + if( nNeeded==0 ){ + a[0] = (a[0] & 0x0f) | (szPayload<<4); + }else if( nNeeded==1 ){ + a[0] = (a[0] & 0x0f) | 0xc0; + a[1] = szPayload & 0xff; + }else if( nNeeded==2 ){ + a[0] = (a[0] & 0x0f) | 0xd0; + a[1] = (szPayload >> 8) & 0xff; + a[2] = szPayload & 0xff; + }else{ + a[0] = (a[0] & 0x0f) | 0xe0; + a[1] = (szPayload >> 24) & 0xff; + a[2] = (szPayload >> 16) & 0xff; + a[3] = (szPayload >> 8) & 0xff; + a[4] = szPayload & 0xff; + } + return delta; +} + +/* +** If z[0] is 'u' and is followed by exactly 4 hexadecimal character, +** then set *pOp to JSONB_TEXTJ and return true. If not, do not make +** any changes to *pOp and return false. +*/ +static int jsonIs4HexB(const char *z, int *pOp){ + if( z[0]!='u' ) return 0; + if( !jsonIs4Hex(&z[1]) ) return 0; + *pOp = JSONB_TEXTJ; + return 1; +} + +/* +** Check a single element of the JSONB in pParse for validity. +** +** The element to be checked starts at offset i and must end at on the +** last byte before iEnd. +** +** Return 0 if everything is correct. Return the 1-based byte offset of the +** error if a problem is detected. (In other words, if the error is at offset +** 0, return 1). +*/ +static u32 jsonbValidityCheck( + const JsonParse *pParse, /* Input JSONB. Only aBlob and nBlob are used */ + u32 i, /* Start of element as pParse->aBlob[i] */ + u32 iEnd, /* One more than the last byte of the element */ + u32 iDepth /* Current nesting depth */ +){ + u32 n, sz, j, k; + const u8 *z; + u8 x; + if( iDepth>JSON_MAX_DEPTH ) return i+1; + sz = 0; + n = jsonbPayloadSize(pParse, i, &sz); + if( NEVER(n==0) ) return i+1; /* Checked by caller */ + if( NEVER(i+n+sz!=iEnd) ) return i+1; /* Checked by caller */ + z = pParse->aBlob; + x = z[i] & 0x0f; + switch( x ){ + case JSONB_NULL: + case JSONB_TRUE: + case JSONB_FALSE: { + return n+sz==1 ? 0 : i+1; + } + case JSONB_INT: { + if( sz<1 ) return i+1; + j = i+n; + if( z[j]=='-' ){ + j++; + if( sz<2 ) return i+1; + } + k = i+n+sz; + while( jk ) return j+1; + if( z[j+1]!='.' && z[j+1]!='e' && z[j+1]!='E' ) return j+1; + j++; + } + for(; j0 ) return j+1; + if( x==JSONB_FLOAT && (j==k-1 || !sqlite3Isdigit(z[j+1])) ){ + return j+1; + } + seen = 1; + continue; + } + if( z[j]=='e' || z[j]=='E' ){ + if( seen==2 ) return j+1; + if( j==k-1 ) return j+1; + if( z[j+1]=='+' || z[j+1]=='-' ){ + j++; + if( j==k-1 ) return j+1; + } + seen = 2; + continue; + } + return j+1; + } + if( seen==0 ) return i+1; + return 0; + } + case JSONB_TEXT: { + j = i+n; + k = j+sz; + while( j=k ){ + return j+1; + }else if( strchr("\"\\/bfnrt",z[j+1])!=0 ){ + j++; + }else if( z[j+1]=='u' ){ + if( j+5>=k ) return j+1; + if( !jsonIs4Hex((const char*)&z[j+2]) ) return j+1; + j++; + }else if( x!=JSONB_TEXT5 ){ + return j+1; + }else{ + u32 c = 0; + u32 szC = jsonUnescapeOneChar((const char*)&z[j], k-j, &c); + if( c==JSON_INVALID_CHAR ) return j+1; + j += szC - 1; + } + } + j++; + } + return 0; + } + case JSONB_TEXTRAW: { + return 0; + } + case JSONB_ARRAY: { + u32 sub; + j = i+n; + k = j+sz; + while( jk ) return j+1; + sub = jsonbValidityCheck(pParse, j, j+n+sz, iDepth+1); + if( sub ) return sub; + j += n + sz; + } + assert( j==k ); + return 0; + } + case JSONB_OBJECT: { + u32 cnt = 0; + u32 sub; + j = i+n; + k = j+sz; + while( jk ) return j+1; + if( (cnt & 1)==0 ){ + x = z[j] & 0x0f; + if( xJSONB_TEXTRAW ) return j+1; + } + sub = jsonbValidityCheck(pParse, j, j+n+sz, iDepth+1); + if( sub ) return sub; + cnt++; + j += n + sz; + } + assert( j==k ); + if( (cnt & 1)!=0 ) return j+1; + return 0; + } + default: { + return i+1; + } + } +} + +/* +** Translate a single element of JSON text at pParse->zJson[i] into +** its equivalent binary JSONB representation. Append the translation into +** pParse->aBlob[] beginning at pParse->nBlob. The size of +** pParse->aBlob[] is increased as necessary. +** +** Return the index of the first character past the end of the element parsed, +** or one of the following special result codes: ** ** 0 End of input -** -1 Syntax error -** -2 '}' seen -** -3 ']' seen -** -4 ',' seen -** -5 ':' seen +** -1 Syntax error or OOM +** -2 '}' seen \ +** -3 ']' seen \___ For these returns, pParse->iErr is set to +** -4 ',' seen / the index in zJson[] of the seen character +** -5 ':' seen / */ -static int jsonParseValue(JsonParse *pParse, u32 i){ +static int jsonTranslateTextToBlob(JsonParse *pParse, u32 i){ char c; u32 j; - int iThis; + u32 iThis, iStart; int x; - JsonNode *pNode; + u8 t; const char *z = pParse->zJson; json_parse_restart: switch( (u8)z[i] ){ case '{': { /* Parse object */ - iThis = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); - if( iThis<0 ) return -1; + iThis = pParse->nBlob; + jsonBlobAppendNode(pParse, JSONB_OBJECT, pParse->nJson-i, 0); if( ++pParse->iDepth > JSON_MAX_DEPTH ){ pParse->iErr = i; return -1; } + iStart = pParse->nBlob; for(j=i+1;;j++){ - u32 nNode = pParse->nNode; - x = jsonParseValue(pParse, j); + u32 iBlob = pParse->nBlob; + x = jsonTranslateTextToBlob(pParse, j); if( x<=0 ){ + int op; if( x==(-2) ){ j = pParse->iErr; - if( pParse->nNode!=(u32)iThis+1 ) pParse->hasNonstd = 1; + if( pParse->nBlob!=(u32)iStart ) pParse->hasNonstd = 1; break; } j += json5Whitespace(&z[j]); + op = JSONB_TEXT; if( sqlite3JsonId1(z[j]) - || (z[j]=='\\' && z[j+1]=='u' && jsonIs4Hex(&z[j+2])) + || (z[j]=='\\' && jsonIs4HexB(&z[j+1], &op)) ){ int k = j+1; while( (sqlite3JsonId2(z[k]) && json5Whitespace(&z[k])==0) - || (z[k]=='\\' && z[k+1]=='u' && jsonIs4Hex(&z[k+2])) + || (z[k]=='\\' && jsonIs4HexB(&z[k+1], &op)) ){ k++; } - jsonParseAddNode(pParse, JSON_STRING | (JNODE_RAW<<8), k-j, &z[j]); + assert( iBlob==pParse->nBlob ); + jsonBlobAppendNode(pParse, op, k-j, &z[j]); pParse->hasNonstd = 1; x = k; }else{ @@ -202610,24 +206420,24 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ } } if( pParse->oom ) return -1; - pNode = &pParse->aNode[nNode]; - if( pNode->eType!=JSON_STRING ){ + t = pParse->aBlob[iBlob] & 0x0f; + if( tJSONB_TEXTRAW ){ pParse->iErr = j; return -1; } - pNode->jnFlags |= JNODE_LABEL; j = x; if( z[j]==':' ){ j++; }else{ - if( fast_isspace(z[j]) ){ - do{ j++; }while( fast_isspace(z[j]) ); + if( jsonIsspace(z[j]) ){ + /* strspn() is not helpful here */ + do{ j++; }while( jsonIsspace(z[j]) ); if( z[j]==':' ){ j++; goto parse_object_value; } } - x = jsonParseValue(pParse, j); + x = jsonTranslateTextToBlob(pParse, j); if( x!=(-5) ){ if( x!=(-1) ) pParse->iErr = j; return -1; @@ -202635,7 +206445,7 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ j = pParse->iErr+1; } parse_object_value: - x = jsonParseValue(pParse, j); + x = jsonTranslateTextToBlob(pParse, j); if( x<=0 ){ if( x!=(-1) ) pParse->iErr = j; return -1; @@ -202646,15 +206456,15 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ }else if( z[j]=='}' ){ break; }else{ - if( fast_isspace(z[j]) ){ - do{ j++; }while( fast_isspace(z[j]) ); + if( jsonIsspace(z[j]) ){ + j += 1 + (u32)strspn(&z[j+1], jsonSpaces); if( z[j]==',' ){ continue; }else if( z[j]=='}' ){ break; } } - x = jsonParseValue(pParse, j); + x = jsonTranslateTextToBlob(pParse, j); if( x==(-4) ){ j = pParse->iErr; continue; @@ -202667,25 +206477,27 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ pParse->iErr = j; return -1; } - pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1; + jsonBlobChangePayloadSize(pParse, iThis, pParse->nBlob - iStart); pParse->iDepth--; return j+1; } case '[': { /* Parse array */ - iThis = jsonParseAddNode(pParse, JSON_ARRAY, 0, 0); - if( iThis<0 ) return -1; + iThis = pParse->nBlob; + assert( i<=(u32)pParse->nJson ); + jsonBlobAppendNode(pParse, JSONB_ARRAY, pParse->nJson - i, 0); + iStart = pParse->nBlob; + if( pParse->oom ) return -1; if( ++pParse->iDepth > JSON_MAX_DEPTH ){ pParse->iErr = i; return -1; } - memset(&pParse->aNode[iThis].u, 0, sizeof(pParse->aNode[iThis].u)); for(j=i+1;;j++){ - x = jsonParseValue(pParse, j); + x = jsonTranslateTextToBlob(pParse, j); if( x<=0 ){ if( x==(-3) ){ j = pParse->iErr; - if( pParse->nNode!=(u32)iThis+1 ) pParse->hasNonstd = 1; + if( pParse->nBlob!=iStart ) pParse->hasNonstd = 1; break; } if( x!=(-1) ) pParse->iErr = j; @@ -202697,15 +206509,15 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ }else if( z[j]==']' ){ break; }else{ - if( fast_isspace(z[j]) ){ - do{ j++; }while( fast_isspace(z[j]) ); + if( jsonIsspace(z[j]) ){ + j += 1 + (u32)strspn(&z[j+1], jsonSpaces); if( z[j]==',' ){ continue; }else if( z[j]==']' ){ break; } } - x = jsonParseValue(pParse, j); + x = jsonTranslateTextToBlob(pParse, j); if( x==(-4) ){ j = pParse->iErr; continue; @@ -202718,23 +206530,33 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ pParse->iErr = j; return -1; } - pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1; + jsonBlobChangePayloadSize(pParse, iThis, pParse->nBlob - iStart); pParse->iDepth--; return j+1; } case '\'': { - u8 jnFlags; + u8 opcode; char cDelim; pParse->hasNonstd = 1; - jnFlags = JNODE_JSON5; + opcode = JSONB_TEXT; goto parse_string; case '"': /* Parse string */ - jnFlags = 0; + opcode = JSONB_TEXT; parse_string: cDelim = z[i]; - for(j=i+1; 1; j++){ - if( jsonIsOk[(unsigned char)z[j]] ) continue; + j = i+1; + while( 1 /*exit-by-break*/ ){ + if( jsonIsOk[(u8)z[j]] ){ + if( !jsonIsOk[(u8)z[j+1]] ){ + j += 1; + }else if( !jsonIsOk[(u8)z[j+2]] ){ + j += 2; + }else{ + j += 3; + continue; + } + } c = z[j]; if( c==cDelim ){ break; @@ -202743,33 +206565,41 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f' || c=='n' || c=='r' || c=='t' || (c=='u' && jsonIs4Hex(&z[j+1])) ){ - jnFlags |= JNODE_ESCAPE; + if( opcode==JSONB_TEXT ) opcode = JSONB_TEXTJ; }else if( c=='\'' || c=='0' || c=='v' || c=='\n' || (0xe2==(u8)c && 0x80==(u8)z[j+1] && (0xa8==(u8)z[j+2] || 0xa9==(u8)z[j+2])) || (c=='x' && jsonIs2Hex(&z[j+1])) ){ - jnFlags |= (JNODE_ESCAPE|JNODE_JSON5); + opcode = JSONB_TEXT5; pParse->hasNonstd = 1; }else if( c=='\r' ){ if( z[j+1]=='\n' ) j++; - jnFlags |= (JNODE_ESCAPE|JNODE_JSON5); + opcode = JSONB_TEXT5; pParse->hasNonstd = 1; }else{ pParse->iErr = j; return -1; } }else if( c<=0x1f ){ - /* Control characters are not allowed in strings */ - pParse->iErr = j; - return -1; + if( c==0 ){ + pParse->iErr = j; + return -1; + } + /* Control characters are not allowed in canonical JSON string + ** literals, but are allowed in JSON5 string literals. */ + opcode = JSONB_TEXT5; + pParse->hasNonstd = 1; + }else if( c=='"' ){ + opcode = JSONB_TEXT5; } + j++; } - jsonParseAddNode(pParse, JSON_STRING | (jnFlags<<8), j+1-i, &z[i]); + jsonBlobAppendNode(pParse, opcode, j-1-i, &z[i+1]); return j+1; } case 't': { if( strncmp(z+i,"true",4)==0 && !sqlite3Isalnum(z[i+4]) ){ - jsonParseAddNode(pParse, JSON_TRUE, 0, 0); + jsonBlobAppendOneByte(pParse, JSONB_TRUE); return i+4; } pParse->iErr = i; @@ -202777,23 +206607,22 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ } case 'f': { if( strncmp(z+i,"false",5)==0 && !sqlite3Isalnum(z[i+5]) ){ - jsonParseAddNode(pParse, JSON_FALSE, 0, 0); + jsonBlobAppendOneByte(pParse, JSONB_FALSE); return i+5; } pParse->iErr = i; return -1; } case '+': { - u8 seenDP, seenE, jnFlags; + u8 seenE; pParse->hasNonstd = 1; - jnFlags = JNODE_JSON5; + t = 0x00; /* Bit 0x01: JSON5. Bit 0x02: FLOAT */ goto parse_number; case '.': if( sqlite3Isdigit(z[i+1]) ){ pParse->hasNonstd = 1; - jnFlags = JNODE_JSON5; + t = 0x03; /* Bit 0x01: JSON5. Bit 0x02: FLOAT */ seenE = 0; - seenDP = JSON_REAL; goto parse_number_2; } pParse->iErr = i; @@ -202810,9 +206639,8 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ case '8': case '9': /* Parse number */ - jnFlags = 0; + t = 0x00; /* Bit 0x01: JSON5. Bit 0x02: FLOAT */ parse_number: - seenDP = JSON_INT; seenE = 0; assert( '-' < '0' ); assert( '+' < '0' ); @@ -202822,9 +206650,9 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ if( c<='0' ){ if( c=='0' ){ if( (z[i+1]=='x' || z[i+1]=='X') && sqlite3Isxdigit(z[i+2]) ){ - assert( seenDP==JSON_INT ); + assert( t==0x00 ); pParse->hasNonstd = 1; - jnFlags |= JNODE_JSON5; + t = 0x01; for(j=i+3; sqlite3Isxdigit(z[j]); j++){} goto parse_number_finish; }else if( sqlite3Isdigit(z[i+1]) ){ @@ -202841,15 +206669,15 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ ){ pParse->hasNonstd = 1; if( z[i]=='-' ){ - jsonParseAddNode(pParse, JSON_REAL, 8, "-9.0e999"); + jsonBlobAppendNode(pParse, JSONB_FLOAT, 6, "-9e999"); }else{ - jsonParseAddNode(pParse, JSON_REAL, 7, "9.0e999"); + jsonBlobAppendNode(pParse, JSONB_FLOAT, 5, "9e999"); } return i + (sqlite3StrNICmp(&z[i+4],"inity",5)==0 ? 9 : 4); } if( z[i+1]=='.' ){ pParse->hasNonstd = 1; - jnFlags |= JNODE_JSON5; + t |= 0x01; goto parse_number_2; } pParse->iErr = i; @@ -202861,30 +206689,31 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ return -1; }else if( (z[i+2]=='x' || z[i+2]=='X') && sqlite3Isxdigit(z[i+3]) ){ pParse->hasNonstd = 1; - jnFlags |= JNODE_JSON5; + t |= 0x01; for(j=i+4; sqlite3Isxdigit(z[j]); j++){} goto parse_number_finish; } } } } + parse_number_2: for(j=i+1;; j++){ c = z[j]; if( sqlite3Isdigit(c) ) continue; if( c=='.' ){ - if( seenDP==JSON_REAL ){ + if( (t & 0x02)!=0 ){ pParse->iErr = j; return -1; } - seenDP = JSON_REAL; + t |= 0x02; continue; } if( c=='e' || c=='E' ){ if( z[j-1]<'0' ){ if( ALWAYS(z[j-1]=='.') && ALWAYS(j-2>=i) && sqlite3Isdigit(z[j-2]) ){ pParse->hasNonstd = 1; - jnFlags |= JNODE_JSON5; + t |= 0x01; }else{ pParse->iErr = j; return -1; @@ -202894,7 +206723,7 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ pParse->iErr = j; return -1; } - seenDP = JSON_REAL; + t |= 0x02; seenE = 1; c = z[j+1]; if( c=='+' || c=='-' ){ @@ -202912,14 +206741,18 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ if( z[j-1]<'0' ){ if( ALWAYS(z[j-1]=='.') && ALWAYS(j-2>=i) && sqlite3Isdigit(z[j-2]) ){ pParse->hasNonstd = 1; - jnFlags |= JNODE_JSON5; + t |= 0x01; }else{ pParse->iErr = j; return -1; } } parse_number_finish: - jsonParseAddNode(pParse, seenDP | (jnFlags<<8), j - i, &z[i]); + assert( JSONB_INT+0x01==JSONB_INT5 ); + assert( JSONB_FLOAT+0x01==JSONB_FLOAT5 ); + assert( JSONB_INT+0x02==JSONB_FLOAT ); + if( z[i]=='+' ) i++; + jsonBlobAppendNode(pParse, JSONB_INT+t, j-i, &z[i]); return j; } case '}': { @@ -202945,9 +206778,7 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ case 0x0a: case 0x0d: case 0x20: { - do{ - i++; - }while( fast_isspace(z[i]) ); + i += 1 + (u32)strspn(&z[i+1], jsonSpaces); goto json_parse_restart; } case 0x0b: @@ -202969,10 +206800,11 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ } case 'n': { if( strncmp(z+i,"null",4)==0 && !sqlite3Isalnum(z[i+4]) ){ - jsonParseAddNode(pParse, JSON_NULL, 0, 0); + jsonBlobAppendOneByte(pParse, JSONB_NULL); return i+4; } /* fall-through into the default case that checks for NaN */ + /* no break */ deliberate_fall_through } default: { u32 k; @@ -202985,8 +206817,11 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ continue; } if( sqlite3Isalnum(z[i+nn]) ) continue; - jsonParseAddNode(pParse, aNanInfName[k].eType, - aNanInfName[k].nRepl, aNanInfName[k].zRepl); + if( aNanInfName[k].eType==JSONB_FLOAT ){ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 5, "9e999"); + }else{ + jsonBlobAppendOneByte(pParse, JSONB_NULL); + } pParse->hasNonstd = 1; return i + nn; } @@ -202996,6 +206831,7 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ } /* End switch(z[i]) */ } + /* ** Parse a complete JSON string. Return 0 on success or non-zero if there ** are any errors. If an error occurs, free all memory held by pParse, @@ -203004,20 +206840,26 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ ** pParse must be initialized to an empty parse object prior to calling ** this routine. */ -static int jsonParse( +static int jsonConvertTextToBlob( JsonParse *pParse, /* Initialize and fill this JsonParse object */ sqlite3_context *pCtx /* Report errors here */ ){ int i; const char *zJson = pParse->zJson; - i = jsonParseValue(pParse, 0); + i = jsonTranslateTextToBlob(pParse, 0); if( pParse->oom ) i = -1; if( i>0 ){ +#ifdef SQLITE_DEBUG assert( pParse->iDepth==0 ); - while( fast_isspace(zJson[i]) ) i++; + if( sqlite3Config.bJsonSelfcheck ){ + assert( jsonbValidityCheck(pParse, 0, pParse->nBlob, 0)==0 ); + } +#endif + while( jsonIsspace(zJson[i]) ) i++; if( zJson[i] ){ i += json5Whitespace(&zJson[i]); if( zJson[i] ){ + if( pCtx ) sqlite3_result_error(pCtx, "malformed JSON", -1); jsonParseReset(pParse); return 1; } @@ -203038,248 +206880,832 @@ static int jsonParse( return 0; } +/* +** The input string pStr is a well-formed JSON text string. Convert +** this into the JSONB format and make it the return value of the +** SQL function. +*/ +static void jsonReturnStringAsBlob(JsonString *pStr){ + JsonParse px; + memset(&px, 0, sizeof(px)); + jsonStringTerminate(pStr); + if( pStr->eErr ){ + sqlite3_result_error_nomem(pStr->pCtx); + return; + } + px.zJson = pStr->zBuf; + px.nJson = pStr->nUsed; + px.db = sqlite3_context_db_handle(pStr->pCtx); + (void)jsonTranslateTextToBlob(&px, 0); + if( px.oom ){ + sqlite3DbFree(px.db, px.aBlob); + sqlite3_result_error_nomem(pStr->pCtx); + }else{ + assert( px.nBlobAlloc>0 ); + assert( !px.bReadOnly ); + sqlite3_result_blob(pStr->pCtx, px.aBlob, px.nBlob, SQLITE_DYNAMIC); + } +} -/* Mark node i of pParse as being a child of iParent. Call recursively -** to fill in all the descendants of node i. +/* The byte at index i is a node type-code. This routine +** determines the payload size for that node and writes that +** payload size in to *pSz. It returns the offset from i to the +** beginning of the payload. Return 0 on error. */ -static void jsonParseFillInParentage(JsonParse *pParse, u32 i, u32 iParent){ - JsonNode *pNode = &pParse->aNode[i]; - u32 j; - pParse->aUp[i] = iParent; - switch( pNode->eType ){ - case JSON_ARRAY: { - for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j)){ - jsonParseFillInParentage(pParse, i+j, i); +static u32 jsonbPayloadSize(const JsonParse *pParse, u32 i, u32 *pSz){ + u8 x; + u32 sz; + u32 n; + if( NEVER(i>pParse->nBlob) ){ + *pSz = 0; + return 0; + } + x = pParse->aBlob[i]>>4; + if( x<=11 ){ + sz = x; + n = 1; + }else if( x==12 ){ + if( i+1>=pParse->nBlob ){ + *pSz = 0; + return 0; + } + sz = pParse->aBlob[i+1]; + n = 2; + }else if( x==13 ){ + if( i+2>=pParse->nBlob ){ + *pSz = 0; + return 0; + } + sz = (pParse->aBlob[i+1]<<8) + pParse->aBlob[i+2]; + n = 3; + }else if( x==14 ){ + if( i+4>=pParse->nBlob ){ + *pSz = 0; + return 0; + } + sz = ((u32)pParse->aBlob[i+1]<<24) + (pParse->aBlob[i+2]<<16) + + (pParse->aBlob[i+3]<<8) + pParse->aBlob[i+4]; + n = 5; + }else{ + if( i+8>=pParse->nBlob + || pParse->aBlob[i+1]!=0 + || pParse->aBlob[i+2]!=0 + || pParse->aBlob[i+3]!=0 + || pParse->aBlob[i+4]!=0 + ){ + *pSz = 0; + return 0; + } + sz = (pParse->aBlob[i+5]<<24) + (pParse->aBlob[i+6]<<16) + + (pParse->aBlob[i+7]<<8) + pParse->aBlob[i+8]; + n = 9; + } + if( (i64)i+sz+n > pParse->nBlob + && (i64)i+sz+n > pParse->nBlob-pParse->delta + ){ + sz = 0; + n = 0; + } + *pSz = sz; + return n; +} + + +/* +** Translate the binary JSONB representation of JSON beginning at +** pParse->aBlob[i] into a JSON text string. Append the JSON +** text onto the end of pOut. Return the index in pParse->aBlob[] +** of the first byte past the end of the element that is translated. +** +** If an error is detected in the BLOB input, the pOut->eErr flag +** might get set to JSTRING_MALFORMED. But not all BLOB input errors +** are detected. So a malformed JSONB input might either result +** in an error, or in incorrect JSON. +** +** The pOut->eErr JSTRING_OOM flag is set on a OOM. +*/ +static u32 jsonTranslateBlobToText( + const JsonParse *pParse, /* the complete parse of the JSON */ + u32 i, /* Start rendering at this index */ + JsonString *pOut /* Write JSON here */ +){ + u32 sz, n, j, iEnd; + + n = jsonbPayloadSize(pParse, i, &sz); + if( n==0 ){ + pOut->eErr |= JSTRING_MALFORMED; + return pParse->nBlob+1; + } + switch( pParse->aBlob[i] & 0x0f ){ + case JSONB_NULL: { + jsonAppendRawNZ(pOut, "null", 4); + return i+1; + } + case JSONB_TRUE: { + jsonAppendRawNZ(pOut, "true", 4); + return i+1; + } + case JSONB_FALSE: { + jsonAppendRawNZ(pOut, "false", 5); + return i+1; + } + case JSONB_INT: + case JSONB_FLOAT: { + if( sz==0 ) goto malformed_jsonb; + jsonAppendRaw(pOut, (const char*)&pParse->aBlob[i+n], sz); + break; + } + case JSONB_INT5: { /* Integer literal in hexadecimal notation */ + u32 k = 2; + sqlite3_uint64 u = 0; + const char *zIn = (const char*)&pParse->aBlob[i+n]; + int bOverflow = 0; + if( sz==0 ) goto malformed_jsonb; + if( zIn[0]=='-' ){ + jsonAppendChar(pOut, '-'); + k++; + }else if( zIn[0]=='+' ){ + k++; + } + for(; keErr |= JSTRING_MALFORMED; + break; + }else if( (u>>60)!=0 ){ + bOverflow = 1; + }else{ + u = u*16 + sqlite3HexToInt(zIn[k]); + } } + jsonPrintf(100,pOut,bOverflow?"9.0e999":"%llu", u); break; } - case JSON_OBJECT: { - for(j=1; j<=pNode->n; j += jsonNodeSize(pNode+j+1)+1){ - pParse->aUp[i+j] = i; - jsonParseFillInParentage(pParse, i+j+1, i); + case JSONB_FLOAT5: { /* Float literal missing digits beside "." */ + u32 k = 0; + const char *zIn = (const char*)&pParse->aBlob[i+n]; + if( sz==0 ) goto malformed_jsonb; + if( zIn[0]=='-' ){ + jsonAppendChar(pOut, '-'); + k++; + } + if( zIn[k]=='.' ){ + jsonAppendChar(pOut, '0'); + } + for(; kaBlob[i+n], sz); + jsonAppendChar(pOut, '"'); + break; + } + case JSONB_TEXT5: { + const char *zIn; + u32 k; + u32 sz2 = sz; + zIn = (const char*)&pParse->aBlob[i+n]; + jsonAppendChar(pOut, '"'); + while( sz2>0 ){ + for(k=0; k0 ){ + jsonAppendRawNZ(pOut, zIn, k); + if( k>=sz2 ){ + break; + } + zIn += k; + sz2 -= k; + } + if( zIn[0]=='"' ){ + jsonAppendRawNZ(pOut, "\\\"", 2); + zIn++; + sz2--; + continue; + } + if( zIn[0]<=0x1f ){ + if( pOut->nUsed+7>pOut->nAlloc && jsonStringGrow(pOut,7) ) break; + jsonAppendControlChar(pOut, zIn[0]); + zIn++; + sz2--; + continue; + } + assert( zIn[0]=='\\' ); + assert( sz2>=1 ); + if( sz2<2 ){ + pOut->eErr |= JSTRING_MALFORMED; + break; + } + switch( (u8)zIn[1] ){ + case '\'': + jsonAppendChar(pOut, '\''); + break; + case 'v': + jsonAppendRawNZ(pOut, "\\u0009", 6); + break; + case 'x': + if( sz2<4 ){ + pOut->eErr |= JSTRING_MALFORMED; + sz2 = 2; + break; + } + jsonAppendRawNZ(pOut, "\\u00", 4); + jsonAppendRawNZ(pOut, &zIn[2], 2); + zIn += 2; + sz2 -= 2; + break; + case '0': + jsonAppendRawNZ(pOut, "\\u0000", 6); + break; + case '\r': + if( sz2>2 && zIn[2]=='\n' ){ + zIn++; + sz2--; + } + break; + case '\n': + break; + case 0xe2: + /* '\' followed by either U+2028 or U+2029 is ignored as + ** whitespace. Not that in UTF8, U+2028 is 0xe2 0x80 0x29. + ** U+2029 is the same except for the last byte */ + if( sz2<4 + || 0x80!=(u8)zIn[2] + || (0xa8!=(u8)zIn[3] && 0xa9!=(u8)zIn[3]) + ){ + pOut->eErr |= JSTRING_MALFORMED; + sz2 = 2; + break; + } + zIn += 2; + sz2 -= 2; + break; + default: + jsonAppendRawNZ(pOut, zIn, 2); + break; + } + assert( sz2>=2 ); + zIn += 2; + sz2 -= 2; + } + jsonAppendChar(pOut, '"'); + break; + } + case JSONB_TEXTRAW: { + jsonAppendString(pOut, (const char*)&pParse->aBlob[i+n], sz); + break; + } + case JSONB_ARRAY: { + jsonAppendChar(pOut, '['); + j = i+n; + iEnd = j+sz; + while( jeErr==0 ){ + j = jsonTranslateBlobToText(pParse, j, pOut); + jsonAppendChar(pOut, ','); + } + if( j>iEnd ) pOut->eErr |= JSTRING_MALFORMED; + if( sz>0 ) jsonStringTrimOneChar(pOut); + jsonAppendChar(pOut, ']'); + break; + } + case JSONB_OBJECT: { + int x = 0; + jsonAppendChar(pOut, '{'); + j = i+n; + iEnd = j+sz; + while( jeErr==0 ){ + j = jsonTranslateBlobToText(pParse, j, pOut); + jsonAppendChar(pOut, (x++ & 1) ? ',' : ':'); + } + if( (x & 1)!=0 || j>iEnd ) pOut->eErr |= JSTRING_MALFORMED; + if( sz>0 ) jsonStringTrimOneChar(pOut); + jsonAppendChar(pOut, '}'); + break; + } + default: { + malformed_jsonb: + pOut->eErr |= JSTRING_MALFORMED; break; } } + return i+n+sz; +} + +/* Context for recursion of json_pretty() +*/ +typedef struct JsonPretty JsonPretty; +struct JsonPretty { + JsonParse *pParse; /* The BLOB being rendered */ + JsonString *pOut; /* Generate pretty output into this string */ + const char *zIndent; /* Use this text for indentation */ + u32 szIndent; /* Bytes in zIndent[] */ + u32 nIndent; /* Current level of indentation */ +}; + +/* Append indentation to the pretty JSON under construction */ +static void jsonPrettyIndent(JsonPretty *pPretty){ + u32 jj; + for(jj=0; jjnIndent; jj++){ + jsonAppendRaw(pPretty->pOut, pPretty->zIndent, pPretty->szIndent); + } } /* -** Compute the parentage of all nodes in a completed parse. +** Translate the binary JSONB representation of JSON beginning at +** pParse->aBlob[i] into a JSON text string. Append the JSON +** text onto the end of pOut. Return the index in pParse->aBlob[] +** of the first byte past the end of the element that is translated. +** +** This is a variant of jsonTranslateBlobToText() that "pretty-prints" +** the output. Extra whitespace is inserted to make the JSON easier +** for humans to read. +** +** If an error is detected in the BLOB input, the pOut->eErr flag +** might get set to JSTRING_MALFORMED. But not all BLOB input errors +** are detected. So a malformed JSONB input might either result +** in an error, or in incorrect JSON. +** +** The pOut->eErr JSTRING_OOM flag is set on a OOM. */ -static int jsonParseFindParents(JsonParse *pParse){ - u32 *aUp; - assert( pParse->aUp==0 ); - aUp = pParse->aUp = sqlite3_malloc64( sizeof(u32)*pParse->nNode ); - if( aUp==0 ){ - pParse->oom = 1; - return SQLITE_NOMEM; +static u32 jsonTranslateBlobToPrettyText( + JsonPretty *pPretty, /* Pretty-printing context */ + u32 i /* Start rendering at this index */ +){ + u32 sz, n, j, iEnd; + const JsonParse *pParse = pPretty->pParse; + JsonString *pOut = pPretty->pOut; + n = jsonbPayloadSize(pParse, i, &sz); + if( n==0 ){ + pOut->eErr |= JSTRING_MALFORMED; + return pParse->nBlob+1; } - jsonParseFillInParentage(pParse, 0, 0); - return SQLITE_OK; + switch( pParse->aBlob[i] & 0x0f ){ + case JSONB_ARRAY: { + j = i+n; + iEnd = j+sz; + jsonAppendChar(pOut, '['); + if( jnIndent++; + while( pOut->eErr==0 ){ + jsonPrettyIndent(pPretty); + j = jsonTranslateBlobToPrettyText(pPretty, j); + if( j>=iEnd ) break; + jsonAppendRawNZ(pOut, ",\n", 2); + } + jsonAppendChar(pOut, '\n'); + pPretty->nIndent--; + jsonPrettyIndent(pPretty); + } + jsonAppendChar(pOut, ']'); + i = iEnd; + break; + } + case JSONB_OBJECT: { + j = i+n; + iEnd = j+sz; + jsonAppendChar(pOut, '{'); + if( jnIndent++; + while( pOut->eErr==0 ){ + jsonPrettyIndent(pPretty); + j = jsonTranslateBlobToText(pParse, j, pOut); + if( j>iEnd ){ + pOut->eErr |= JSTRING_MALFORMED; + break; + } + jsonAppendRawNZ(pOut, ": ", 2); + j = jsonTranslateBlobToPrettyText(pPretty, j); + if( j>=iEnd ) break; + jsonAppendRawNZ(pOut, ",\n", 2); + } + jsonAppendChar(pOut, '\n'); + pPretty->nIndent--; + jsonPrettyIndent(pPretty); + } + jsonAppendChar(pOut, '}'); + i = iEnd; + break; + } + default: { + i = jsonTranslateBlobToText(pParse, i, pOut); + break; + } + } + return i; +} + + +/* Return true if the input pJson +** +** For performance reasons, this routine does not do a detailed check of the +** input BLOB to ensure that it is well-formed. Hence, false positives are +** possible. False negatives should never occur, however. +*/ +static int jsonFuncArgMightBeBinary(sqlite3_value *pJson){ + u32 sz, n; + const u8 *aBlob; + int nBlob; + JsonParse s; + if( sqlite3_value_type(pJson)!=SQLITE_BLOB ) return 0; + aBlob = sqlite3_value_blob(pJson); + nBlob = sqlite3_value_bytes(pJson); + if( nBlob<1 ) return 0; + if( NEVER(aBlob==0) || (aBlob[0] & 0x0f)>JSONB_OBJECT ) return 0; + memset(&s, 0, sizeof(s)); + s.aBlob = (u8*)aBlob; + s.nBlob = nBlob; + n = jsonbPayloadSize(&s, 0, &sz); + if( n==0 ) return 0; + if( sz+n!=(u32)nBlob ) return 0; + if( (aBlob[0] & 0x0f)<=JSONB_FALSE && sz>0 ) return 0; + return sz+n==(u32)nBlob; } /* -** Magic number used for the JSON parse cache in sqlite3_get_auxdata() +** Given that a JSONB_ARRAY object starts at offset i, return +** the number of entries in that array. */ -#define JSON_CACHE_ID (-429938) /* First cache entry */ -#define JSON_CACHE_SZ 4 /* Max number of cache entries */ +static u32 jsonbArrayCount(JsonParse *pParse, u32 iRoot){ + u32 n, sz, i, iEnd; + u32 k = 0; + n = jsonbPayloadSize(pParse, iRoot, &sz); + iEnd = iRoot+n+sz; + for(i=iRoot+n; n>0 && idelta. +*/ +static void jsonAfterEditSizeAdjust(JsonParse *pParse, u32 iRoot){ + u32 sz = 0; + u32 nBlob; + assert( pParse->delta!=0 ); + assert( pParse->nBlobAlloc >= pParse->nBlob ); + nBlob = pParse->nBlob; + pParse->nBlob = pParse->nBlobAlloc; + (void)jsonbPayloadSize(pParse, iRoot, &sz); + pParse->nBlob = nBlob; + sz += pParse->delta; + pParse->delta += jsonBlobChangePayloadSize(pParse, iRoot, sz); +} + +/* +** Modify the JSONB blob at pParse->aBlob by removing nDel bytes of +** content beginning at iDel, and replacing them with nIns bytes of +** content given by aIns. ** -** Except, if an error occurs and pErrCtx==0 then return the JsonParse -** object with JsonParse.nErr non-zero and the caller will own the JsonParse -** object. In that case, it will be the responsibility of the caller to -** invoke jsonParseFree(). To summarize: +** nDel may be zero, in which case no bytes are removed. But iDel is +** still important as new bytes will be insert beginning at iDel. ** -** pErrCtx!=0 || p->nErr==0 ==> Return value p is owned by the -** cache. Call does not need to -** free it. +** aIns may be zero, in which case space is created to hold nIns bytes +** beginning at iDel, but that space is uninitialized. ** -** pErrCtx==0 && p->nErr!=0 ==> Return value is owned by the caller -** and so the caller must free it. +** Set pParse->oom if an OOM occurs. */ -static JsonParse *jsonParseCached( - sqlite3_context *pCtx, /* Context to use for cache search */ - sqlite3_value *pJson, /* Function param containing JSON text */ - sqlite3_context *pErrCtx, /* Write parse errors here if not NULL */ - int bUnedited /* No prior edits allowed */ +static void jsonBlobEdit( + JsonParse *pParse, /* The JSONB to be modified is in pParse->aBlob */ + u32 iDel, /* First byte to be removed */ + u32 nDel, /* Number of bytes to remove */ + const u8 *aIns, /* Content to insert */ + u32 nIns /* Bytes of content to insert */ ){ - char *zJson = (char*)sqlite3_value_text(pJson); - int nJson = sqlite3_value_bytes(pJson); - JsonParse *p; - JsonParse *pMatch = 0; - int iKey; - int iMinKey = 0; - u32 iMinHold = 0xffffffff; - u32 iMaxHold = 0; - int bJsonRCStr; + i64 d = (i64)nIns - (i64)nDel; + if( d!=0 ){ + if( pParse->nBlob + d > pParse->nBlobAlloc ){ + jsonBlobExpand(pParse, pParse->nBlob+d); + if( pParse->oom ) return; + } + memmove(&pParse->aBlob[iDel+nIns], + &pParse->aBlob[iDel+nDel], + pParse->nBlob - (iDel+nDel)); + pParse->nBlob += d; + pParse->delta += d; + } + if( nIns && aIns ) memcpy(&pParse->aBlob[iDel], aIns, nIns); +} - if( zJson==0 ) return 0; - for(iKey=0; iKeynJson==nJson - && (p->hasMod==0 || bUnedited==0) - && (p->zJson==zJson || memcmp(p->zJson,zJson,nJson)==0) - ){ - p->nErr = 0; - p->useMod = 0; - pMatch = p; - }else - if( pMatch==0 - && p->zAlt!=0 - && bUnedited==0 - && p->nAlt==nJson - && memcmp(p->zAlt, zJson, nJson)==0 - ){ - p->nErr = 0; - p->useMod = 1; - pMatch = p; - }else if( p->iHoldiHold; - iMinKey = iKey; + if( z[i+1]=='\r' ){ + if( i+2iHold>iMaxHold ){ - iMaxHold = p->iHold; + if( 0xe2==(u8)z[i+1] + && i+3nErr = 0; - pMatch->iHold = iMaxHold+1; - assert( pMatch->nJPRef>0 ); /* pMatch is owned by the cache */ - return pMatch; - } + return i; +} - /* The input JSON was not found anywhere in the cache. We will need - ** to parse it ourselves and generate a new JsonParse object. - */ - bJsonRCStr = sqlite3ValueIsOfClass(pJson,(void(*)(void*))sqlite3RCStrUnref); - p = sqlite3_malloc64( sizeof(*p) + (bJsonRCStr ? 0 : nJson+1) ); - if( p==0 ){ - sqlite3_result_error_nomem(pCtx); - return 0; +/* +** Input z[0..n] defines JSON escape sequence including the leading '\\'. +** Decode that escape sequence into a single character. Write that +** character into *piOut. Return the number of bytes in the escape sequence. +** +** If there is a syntax error of some kind (for example too few characters +** after the '\\' to complete the encoding) then *piOut is set to +** JSON_INVALID_CHAR. +*/ +static u32 jsonUnescapeOneChar(const char *z, u32 n, u32 *piOut){ + assert( n>0 ); + assert( z[0]=='\\' ); + if( n<2 ){ + *piOut = JSON_INVALID_CHAR; + return n; } - memset(p, 0, sizeof(*p)); - if( bJsonRCStr ){ - p->zJson = sqlite3RCStrRef(zJson); - p->bJsonIsRCStr = 1; - }else{ - p->zJson = (char*)&p[1]; - memcpy(p->zJson, zJson, nJson+1); + switch( (u8)z[1] ){ + case 'u': { + u32 v, vlo; + if( n<6 ){ + *piOut = JSON_INVALID_CHAR; + return n; + } + v = jsonHexToInt4(&z[2]); + if( (v & 0xfc00)==0xd800 + && n>=12 + && z[6]=='\\' + && z[7]=='u' + && ((vlo = jsonHexToInt4(&z[8]))&0xfc00)==0xdc00 + ){ + *piOut = ((v&0x3ff)<<10) + (vlo&0x3ff) + 0x10000; + return 12; + }else{ + *piOut = v; + return 6; + } + } + case 'b': { *piOut = '\b'; return 2; } + case 'f': { *piOut = '\f'; return 2; } + case 'n': { *piOut = '\n'; return 2; } + case 'r': { *piOut = '\r'; return 2; } + case 't': { *piOut = '\t'; return 2; } + case 'v': { *piOut = '\v'; return 2; } + case '0': { *piOut = 0; return 2; } + case '\'': + case '"': + case '/': + case '\\':{ *piOut = z[1]; return 2; } + case 'x': { + if( n<4 ){ + *piOut = JSON_INVALID_CHAR; + return n; + } + *piOut = (jsonHexToInt(z[2])<<4) | jsonHexToInt(z[3]); + return 4; + } + case 0xe2: + case '\r': + case '\n': { + u32 nSkip = jsonBytesToBypass(z, n); + if( nSkip==0 ){ + *piOut = JSON_INVALID_CHAR; + return n; + }else if( nSkip==n ){ + *piOut = 0; + return n; + }else if( z[nSkip]=='\\' ){ + return nSkip + jsonUnescapeOneChar(&z[nSkip], n-nSkip, piOut); + }else{ + int sz = sqlite3Utf8ReadLimited((u8*)&z[nSkip], n-nSkip, piOut); + return nSkip + sz; + } + } + default: { + *piOut = JSON_INVALID_CHAR; + return 2; + } } - p->nJPRef = 1; - if( jsonParse(p, pErrCtx) ){ - if( pErrCtx==0 ){ - p->nErr = 1; - assert( p->nJPRef==1 ); /* Caller will own the new JsonParse object p */ - return p; +} + + +/* +** Compare two object labels. Return 1 if they are equal and +** 0 if they differ. +** +** In this version, we know that one or the other or both of the +** two comparands contains an escape sequence. +*/ +static SQLITE_NOINLINE int jsonLabelCompareEscaped( + const char *zLeft, /* The left label */ + u32 nLeft, /* Size of the left label in bytes */ + int rawLeft, /* True if zLeft contains no escapes */ + const char *zRight, /* The right label */ + u32 nRight, /* Size of the right label in bytes */ + int rawRight /* True if zRight is escape-free */ +){ + u32 cLeft, cRight; + assert( rawLeft==0 || rawRight==0 ); + while( 1 /*exit-by-return*/ ){ + if( nLeft==0 ){ + cLeft = 0; + }else if( rawLeft || zLeft[0]!='\\' ){ + cLeft = ((u8*)zLeft)[0]; + if( cLeft>=0xc0 ){ + int sz = sqlite3Utf8ReadLimited((u8*)zLeft, nLeft, &cLeft); + zLeft += sz; + nLeft -= sz; + }else{ + zLeft++; + nLeft--; + } + }else{ + u32 n = jsonUnescapeOneChar(zLeft, nLeft, &cLeft); + zLeft += n; + assert( n<=nLeft ); + nLeft -= n; + } + if( nRight==0 ){ + cRight = 0; + }else if( rawRight || zRight[0]!='\\' ){ + cRight = ((u8*)zRight)[0]; + if( cRight>=0xc0 ){ + int sz = sqlite3Utf8ReadLimited((u8*)zRight, nRight, &cRight); + zRight += sz; + nRight -= sz; + }else{ + zRight++; + nRight--; + } + }else{ + u32 n = jsonUnescapeOneChar(zRight, nRight, &cRight); + zRight += n; + assert( n<=nRight ); + nRight -= n; } - jsonParseFree(p); - return 0; + if( cLeft!=cRight ) return 0; + if( cLeft==0 ) return 1; } - p->nJson = nJson; - p->iHold = iMaxHold+1; - /* Transfer ownership of the new JsonParse to the cache */ - sqlite3_set_auxdata(pCtx, JSON_CACHE_ID+iMinKey, p, - (void(*)(void*))jsonParseFree); - return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID+iMinKey); } /* -** Compare the OBJECT label at pNode against zKey,nKey. Return true on -** a match. +** Compare two object labels. Return 1 if they are equal and +** 0 if they differ. Return -1 if an OOM occurs. */ -static int jsonLabelCompare(const JsonNode *pNode, const char *zKey, u32 nKey){ - assert( pNode->eU==1 ); - if( pNode->jnFlags & JNODE_RAW ){ - if( pNode->n!=nKey ) return 0; - return strncmp(pNode->u.zJContent, zKey, nKey)==0; +static int jsonLabelCompare( + const char *zLeft, /* The left label */ + u32 nLeft, /* Size of the left label in bytes */ + int rawLeft, /* True if zLeft contains no escapes */ + const char *zRight, /* The right label */ + u32 nRight, /* Size of the right label in bytes */ + int rawRight /* True if zRight is escape-free */ +){ + if( rawLeft && rawRight ){ + /* Simpliest case: Neither label contains escapes. A simple + ** memcmp() is sufficient. */ + if( nLeft!=nRight ) return 0; + return memcmp(zLeft, zRight, nLeft)==0; }else{ - if( pNode->n!=nKey+2 ) return 0; - return strncmp(pNode->u.zJContent+1, zKey, nKey)==0; + return jsonLabelCompareEscaped(zLeft, nLeft, rawLeft, + zRight, nRight, rawRight); } } -static int jsonSameLabel(const JsonNode *p1, const JsonNode *p2){ - if( p1->jnFlags & JNODE_RAW ){ - return jsonLabelCompare(p2, p1->u.zJContent, p1->n); - }else if( p2->jnFlags & JNODE_RAW ){ - return jsonLabelCompare(p1, p2->u.zJContent, p2->n); + +/* +** Error returns from jsonLookupStep() +*/ +#define JSON_LOOKUP_ERROR 0xffffffff +#define JSON_LOOKUP_NOTFOUND 0xfffffffe +#define JSON_LOOKUP_PATHERROR 0xfffffffd +#define JSON_LOOKUP_ISERROR(x) ((x)>=JSON_LOOKUP_PATHERROR) + +/* Forward declaration */ +static u32 jsonLookupStep(JsonParse*,u32,const char*,u32); + + +/* This helper routine for jsonLookupStep() populates pIns with +** binary data that is to be inserted into pParse. +** +** In the common case, pIns just points to pParse->aIns and pParse->nIns. +** But if the zPath of the original edit operation includes path elements +** that go deeper, additional substructure must be created. +** +** For example: +** +** json_insert('{}', '$.a.b.c', 123); +** +** The search stops at '$.a' But additional substructure must be +** created for the ".b.c" part of the patch so that the final result +** is: {"a":{"b":{"c"::123}}}. This routine populates pIns with +** the binary equivalent of {"b":{"c":123}} so that it can be inserted. +** +** The caller is responsible for resetting pIns when it has finished +** using the substructure. +*/ +static u32 jsonCreateEditSubstructure( + JsonParse *pParse, /* The original JSONB that is being edited */ + JsonParse *pIns, /* Populate this with the blob data to insert */ + const char *zTail /* Tail of the path that determins substructure */ +){ + static const u8 emptyObject[] = { JSONB_ARRAY, JSONB_OBJECT }; + int rc; + memset(pIns, 0, sizeof(*pIns)); + pIns->db = pParse->db; + if( zTail[0]==0 ){ + /* No substructure. Just insert what is given in pParse. */ + pIns->aBlob = pParse->aIns; + pIns->nBlob = pParse->nIns; + rc = 0; }else{ - return p1->n==p2->n && strncmp(p1->u.zJContent,p2->u.zJContent,p1->n)==0; + /* Construct the binary substructure */ + pIns->nBlob = 1; + pIns->aBlob = (u8*)&emptyObject[zTail[0]=='.']; + pIns->eEdit = pParse->eEdit; + pIns->nIns = pParse->nIns; + pIns->aIns = pParse->aIns; + rc = jsonLookupStep(pIns, 0, zTail, 0); + pParse->oom |= pIns->oom; } + return rc; /* Error code only */ } -/* forward declaration */ -static JsonNode *jsonLookupAppend(JsonParse*,const char*,int*,const char**); - /* -** Search along zPath to find the node specified. Return a pointer -** to that node, or NULL if zPath is malformed or if there is no such -** node. +** Search along zPath to find the Json element specified. Return an +** index into pParse->aBlob[] for the start of that element's value. ** -** If pApnd!=0, then try to append new nodes to complete zPath if it is -** possible to do so and if no existing node corresponds to zPath. If -** new nodes are appended *pApnd is set to 1. +** If the value found by this routine is the value half of label/value pair +** within an object, then set pPath->iLabel to the start of the corresponding +** label, before returning. +** +** Return one of the JSON_LOOKUP error codes if problems are seen. +** +** This routine will also modify the blob. If pParse->eEdit is one of +** JEDIT_DEL, JEDIT_REPL, JEDIT_INS, or JEDIT_SET, then changes might be +** made to the selected value. If an edit is performed, then the return +** value does not necessarily point to the select element. If an edit +** is performed, the return value is only useful for detecting error +** conditions. */ -static JsonNode *jsonLookupStep( +static u32 jsonLookupStep( JsonParse *pParse, /* The JSON to search */ - u32 iRoot, /* Begin the search at this node */ + u32 iRoot, /* Begin the search at this element of aBlob[] */ const char *zPath, /* The path to search */ - int *pApnd, /* Append nodes to complete path if not NULL */ - const char **pzErr /* Make *pzErr point to any syntax error in zPath */ + u32 iLabel /* Label if iRoot is a value of in an object */ ){ - u32 i, j, nKey; + u32 i, j, k, nKey, sz, n, iEnd, rc; const char *zKey; - JsonNode *pRoot; - if( pParse->oom ) return 0; - pRoot = &pParse->aNode[iRoot]; - if( pRoot->jnFlags & (JNODE_REPLACE|JNODE_REMOVE) && pParse->useMod ){ - while( (pRoot->jnFlags & JNODE_REPLACE)!=0 ){ - u32 idx = (u32)(pRoot - pParse->aNode); - i = pParse->iSubst; - while( 1 /*exit-by-break*/ ){ - assert( inNode ); - assert( pParse->aNode[i].eType==JSON_SUBST ); - assert( pParse->aNode[i].eU==4 ); - assert( pParse->aNode[i].u.iPrevaNode[i].n==idx ){ - pRoot = &pParse->aNode[i+1]; - iRoot = i+1; - break; - } - i = pParse->aNode[i].u.iPrev; + u8 x; + + if( zPath[0]==0 ){ + if( pParse->eEdit && jsonBlobMakeEditable(pParse, pParse->nIns) ){ + n = jsonbPayloadSize(pParse, iRoot, &sz); + sz += n; + if( pParse->eEdit==JEDIT_DEL ){ + if( iLabel>0 ){ + sz += iRoot - iLabel; + iRoot = iLabel; + } + jsonBlobEdit(pParse, iRoot, sz, 0, 0); + }else if( pParse->eEdit==JEDIT_INS ){ + /* Already exists, so json_insert() is a no-op */ + }else{ + /* json_set() or json_replace() */ + jsonBlobEdit(pParse, iRoot, sz, pParse->aIns, pParse->nIns); } } - if( pRoot->jnFlags & JNODE_REMOVE ){ - return 0; - } + pParse->iLabel = iLabel; + return iRoot; } - if( zPath[0]==0 ) return pRoot; if( zPath[0]=='.' ){ - if( pRoot->eType!=JSON_OBJECT ) return 0; + int rawKey = 1; + x = pParse->aBlob[iRoot]; zPath++; if( zPath[0]=='"' ){ zKey = zPath + 1; @@ -203288,250 +207714,705 @@ static JsonNode *jsonLookupStep( if( zPath[i] ){ i++; }else{ - *pzErr = zPath; - return 0; + return JSON_LOOKUP_PATHERROR; } testcase( nKey==0 ); + rawKey = memchr(zKey, '\\', nKey)==0; }else{ zKey = zPath; for(i=0; zPath[i] && zPath[i]!='.' && zPath[i]!='['; i++){} nKey = i; if( nKey==0 ){ - *pzErr = zPath; - return 0; - } - } - j = 1; - for(;;){ - while( j<=pRoot->n ){ - if( jsonLabelCompare(pRoot+j, zKey, nKey) ){ - return jsonLookupStep(pParse, iRoot+j+1, &zPath[i], pApnd, pzErr); - } - j++; - j += jsonNodeSize(&pRoot[j]); + return JSON_LOOKUP_PATHERROR; + } + } + if( (x & 0x0f)!=JSONB_OBJECT ) return JSON_LOOKUP_NOTFOUND; + n = jsonbPayloadSize(pParse, iRoot, &sz); + j = iRoot + n; /* j is the index of a label */ + iEnd = j+sz; + while( jaBlob[j] & 0x0f; + if( xJSONB_TEXTRAW ) return JSON_LOOKUP_ERROR; + n = jsonbPayloadSize(pParse, j, &sz); + if( n==0 ) return JSON_LOOKUP_ERROR; + k = j+n; /* k is the index of the label text */ + if( k+sz>=iEnd ) return JSON_LOOKUP_ERROR; + zLabel = (const char*)&pParse->aBlob[k]; + rawLabel = x==JSONB_TEXT || x==JSONB_TEXTRAW; + if( jsonLabelCompare(zKey, nKey, rawKey, zLabel, sz, rawLabel) ){ + u32 v = k+sz; /* v is the index of the value */ + if( ((pParse->aBlob[v])&0x0f)>JSONB_OBJECT ) return JSON_LOOKUP_ERROR; + n = jsonbPayloadSize(pParse, v, &sz); + if( n==0 || v+n+sz>iEnd ) return JSON_LOOKUP_ERROR; + assert( j>0 ); + rc = jsonLookupStep(pParse, v, &zPath[i], j); + if( pParse->delta ) jsonAfterEditSizeAdjust(pParse, iRoot); + return rc; } - if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break; - if( pParse->useMod==0 ) break; - assert( pRoot->eU==2 ); - iRoot = pRoot->u.iAppend; - pRoot = &pParse->aNode[iRoot]; - j = 1; - } - if( pApnd ){ - u32 iStart, iLabel; - JsonNode *pNode; - assert( pParse->useMod ); - iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0); - iLabel = jsonParseAddNode(pParse, JSON_STRING, nKey, zKey); - zPath += i; - pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr); - if( pParse->oom ) return 0; - if( pNode ){ - pRoot = &pParse->aNode[iRoot]; - assert( pRoot->eU==0 ); - pRoot->u.iAppend = iStart; - pRoot->jnFlags |= JNODE_APPEND; - VVA( pRoot->eU = 2 ); - pParse->aNode[iLabel].jnFlags |= JNODE_RAW; - } - return pNode; + j = k+sz; + if( ((pParse->aBlob[j])&0x0f)>JSONB_OBJECT ) return JSON_LOOKUP_ERROR; + n = jsonbPayloadSize(pParse, j, &sz); + if( n==0 ) return JSON_LOOKUP_ERROR; + j += n+sz; + } + if( j>iEnd ) return JSON_LOOKUP_ERROR; + if( pParse->eEdit>=JEDIT_INS ){ + u32 nIns; /* Total bytes to insert (label+value) */ + JsonParse v; /* BLOB encoding of the value to be inserted */ + JsonParse ix; /* Header of the label to be inserted */ + testcase( pParse->eEdit==JEDIT_INS ); + testcase( pParse->eEdit==JEDIT_SET ); + memset(&ix, 0, sizeof(ix)); + ix.db = pParse->db; + jsonBlobAppendNode(&ix, rawKey?JSONB_TEXTRAW:JSONB_TEXT5, nKey, 0); + pParse->oom |= ix.oom; + rc = jsonCreateEditSubstructure(pParse, &v, &zPath[i]); + if( !JSON_LOOKUP_ISERROR(rc) + && jsonBlobMakeEditable(pParse, ix.nBlob+nKey+v.nBlob) + ){ + assert( !pParse->oom ); + nIns = ix.nBlob + nKey + v.nBlob; + jsonBlobEdit(pParse, j, 0, 0, nIns); + if( !pParse->oom ){ + assert( pParse->aBlob!=0 ); /* Because pParse->oom!=0 */ + assert( ix.aBlob!=0 ); /* Because pPasre->oom!=0 */ + memcpy(&pParse->aBlob[j], ix.aBlob, ix.nBlob); + k = j + ix.nBlob; + memcpy(&pParse->aBlob[k], zKey, nKey); + k += nKey; + memcpy(&pParse->aBlob[k], v.aBlob, v.nBlob); + if( ALWAYS(pParse->delta) ) jsonAfterEditSizeAdjust(pParse, iRoot); + } + } + jsonParseReset(&v); + jsonParseReset(&ix); + return rc; } }else if( zPath[0]=='[' ){ - i = 0; - j = 1; - while( sqlite3Isdigit(zPath[j]) ){ - i = i*10 + zPath[j] - '0'; - j++; + x = pParse->aBlob[iRoot] & 0x0f; + if( x!=JSONB_ARRAY ) return JSON_LOOKUP_NOTFOUND; + n = jsonbPayloadSize(pParse, iRoot, &sz); + k = 0; + i = 1; + while( sqlite3Isdigit(zPath[i]) ){ + k = k*10 + zPath[i] - '0'; + i++; } - if( j<2 || zPath[j]!=']' ){ + if( i<2 || zPath[i]!=']' ){ if( zPath[1]=='#' ){ - JsonNode *pBase = pRoot; - int iBase = iRoot; - if( pRoot->eType!=JSON_ARRAY ) return 0; - for(;;){ - while( j<=pBase->n ){ - if( (pBase[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ) i++; - j += jsonNodeSize(&pBase[j]); - } - if( (pBase->jnFlags & JNODE_APPEND)==0 ) break; - if( pParse->useMod==0 ) break; - assert( pBase->eU==2 ); - iBase = pBase->u.iAppend; - pBase = &pParse->aNode[iBase]; - j = 1; - } - j = 2; + k = jsonbArrayCount(pParse, iRoot); + i = 2; if( zPath[2]=='-' && sqlite3Isdigit(zPath[3]) ){ - unsigned int x = 0; - j = 3; + unsigned int nn = 0; + i = 3; do{ - x = x*10 + zPath[j] - '0'; - j++; - }while( sqlite3Isdigit(zPath[j]) ); - if( x>i ) return 0; - i -= x; + nn = nn*10 + zPath[i] - '0'; + i++; + }while( sqlite3Isdigit(zPath[i]) ); + if( nn>k ) return JSON_LOOKUP_NOTFOUND; + k -= nn; } - if( zPath[j]!=']' ){ - *pzErr = zPath; - return 0; + if( zPath[i]!=']' ){ + return JSON_LOOKUP_PATHERROR; } }else{ - *pzErr = zPath; - return 0; + return JSON_LOOKUP_PATHERROR; } } - if( pRoot->eType!=JSON_ARRAY ) return 0; - zPath += j + 1; - j = 1; - for(;;){ - while( j<=pRoot->n - && (i>0 || ((pRoot[j].jnFlags & JNODE_REMOVE)!=0 && pParse->useMod)) + j = iRoot+n; + iEnd = j+sz; + while( jdelta ) jsonAfterEditSizeAdjust(pParse, iRoot); + return rc; + } + k--; + n = jsonbPayloadSize(pParse, j, &sz); + if( n==0 ) return JSON_LOOKUP_ERROR; + j += n+sz; + } + if( j>iEnd ) return JSON_LOOKUP_ERROR; + if( k>0 ) return JSON_LOOKUP_NOTFOUND; + if( pParse->eEdit>=JEDIT_INS ){ + JsonParse v; + testcase( pParse->eEdit==JEDIT_INS ); + testcase( pParse->eEdit==JEDIT_SET ); + rc = jsonCreateEditSubstructure(pParse, &v, &zPath[i+1]); + if( !JSON_LOOKUP_ISERROR(rc) + && jsonBlobMakeEditable(pParse, v.nBlob) ){ - if( (pRoot[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ) i--; - j += jsonNodeSize(&pRoot[j]); - } - if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break; - if( pParse->useMod==0 ) break; - assert( pRoot->eU==2 ); - iRoot = pRoot->u.iAppend; - pRoot = &pParse->aNode[iRoot]; - j = 1; - } - if( j<=pRoot->n ){ - return jsonLookupStep(pParse, iRoot+j, zPath, pApnd, pzErr); - } - if( i==0 && pApnd ){ - u32 iStart; - JsonNode *pNode; - assert( pParse->useMod ); - iStart = jsonParseAddNode(pParse, JSON_ARRAY, 1, 0); - pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr); - if( pParse->oom ) return 0; - if( pNode ){ - pRoot = &pParse->aNode[iRoot]; - assert( pRoot->eU==0 ); - pRoot->u.iAppend = iStart; - pRoot->jnFlags |= JNODE_APPEND; - VVA( pRoot->eU = 2 ); + assert( !pParse->oom ); + jsonBlobEdit(pParse, j, 0, v.aBlob, v.nBlob); } - return pNode; + jsonParseReset(&v); + if( pParse->delta ) jsonAfterEditSizeAdjust(pParse, iRoot); + return rc; } }else{ - *pzErr = zPath; + return JSON_LOOKUP_PATHERROR; } - return 0; + return JSON_LOOKUP_NOTFOUND; } /* -** Append content to pParse that will complete zPath. Return a pointer -** to the inserted node, or return NULL if the append fails. +** Convert a JSON BLOB into text and make that text the return value +** of an SQL function. */ -static JsonNode *jsonLookupAppend( - JsonParse *pParse, /* Append content to the JSON parse */ - const char *zPath, /* Description of content to append */ - int *pApnd, /* Set this flag to 1 */ - const char **pzErr /* Make this point to any syntax error */ +static void jsonReturnTextJsonFromBlob( + sqlite3_context *ctx, + const u8 *aBlob, + u32 nBlob ){ - *pApnd = 1; - if( zPath[0]==0 ){ - jsonParseAddNode(pParse, JSON_NULL, 0, 0); - return pParse->oom ? 0 : &pParse->aNode[pParse->nNode-1]; - } - if( zPath[0]=='.' ){ - jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); - }else if( strncmp(zPath,"[0]",3)==0 ){ - jsonParseAddNode(pParse, JSON_ARRAY, 0, 0); - }else{ - return 0; - } - if( pParse->oom ) return 0; - return jsonLookupStep(pParse, pParse->nNode-1, zPath, pApnd, pzErr); + JsonParse x; + JsonString s; + + if( NEVER(aBlob==0) ) return; + memset(&x, 0, sizeof(x)); + x.aBlob = (u8*)aBlob; + x.nBlob = nBlob; + jsonStringInit(&s, ctx); + jsonTranslateBlobToText(&x, 0, &s); + jsonReturnString(&s, 0, 0); } + /* -** Return the text of a syntax error message on a JSON path. Space is -** obtained from sqlite3_malloc(). +** Return the value of the BLOB node at index i. +** +** If the value is a primitive, return it as an SQL value. +** If the value is an array or object, return it as either +** JSON text or the BLOB encoding, depending on the JSON_B flag +** on the userdata. */ -static char *jsonPathSyntaxError(const char *zErr){ - return sqlite3_mprintf("JSON path error near '%q'", zErr); +static void jsonReturnFromBlob( + JsonParse *pParse, /* Complete JSON parse tree */ + u32 i, /* Index of the node */ + sqlite3_context *pCtx, /* Return value for this function */ + int textOnly /* return text JSON. Disregard user-data */ +){ + u32 n, sz; + int rc; + sqlite3 *db = sqlite3_context_db_handle(pCtx); + + n = jsonbPayloadSize(pParse, i, &sz); + if( n==0 ){ + sqlite3_result_error(pCtx, "malformed JSON", -1); + return; + } + switch( pParse->aBlob[i] & 0x0f ){ + case JSONB_NULL: { + if( sz ) goto returnfromblob_malformed; + sqlite3_result_null(pCtx); + break; + } + case JSONB_TRUE: { + if( sz ) goto returnfromblob_malformed; + sqlite3_result_int(pCtx, 1); + break; + } + case JSONB_FALSE: { + if( sz ) goto returnfromblob_malformed; + sqlite3_result_int(pCtx, 0); + break; + } + case JSONB_INT5: + case JSONB_INT: { + sqlite3_int64 iRes = 0; + char *z; + int bNeg = 0; + char x; + if( sz==0 ) goto returnfromblob_malformed; + x = (char)pParse->aBlob[i+n]; + if( x=='-' ){ + if( sz<2 ) goto returnfromblob_malformed; + n++; + sz--; + bNeg = 1; + } + z = sqlite3DbStrNDup(db, (const char*)&pParse->aBlob[i+n], (int)sz); + if( z==0 ) goto returnfromblob_oom; + rc = sqlite3DecOrHexToI64(z, &iRes); + sqlite3DbFree(db, z); + if( rc==0 ){ + sqlite3_result_int64(pCtx, bNeg ? -iRes : iRes); + }else if( rc==3 && bNeg ){ + sqlite3_result_int64(pCtx, SMALLEST_INT64); + }else if( rc==1 ){ + goto returnfromblob_malformed; + }else{ + if( bNeg ){ n--; sz++; } + goto to_double; + } + break; + } + case JSONB_FLOAT5: + case JSONB_FLOAT: { + double r; + char *z; + if( sz==0 ) goto returnfromblob_malformed; + to_double: + z = sqlite3DbStrNDup(db, (const char*)&pParse->aBlob[i+n], (int)sz); + if( z==0 ) goto returnfromblob_oom; + rc = sqlite3AtoF(z, &r, sqlite3Strlen30(z), SQLITE_UTF8); + sqlite3DbFree(db, z); + if( rc<=0 ) goto returnfromblob_malformed; + sqlite3_result_double(pCtx, r); + break; + } + case JSONB_TEXTRAW: + case JSONB_TEXT: { + sqlite3_result_text(pCtx, (char*)&pParse->aBlob[i+n], sz, + SQLITE_TRANSIENT); + break; + } + case JSONB_TEXT5: + case JSONB_TEXTJ: { + /* Translate JSON formatted string into raw text */ + u32 iIn, iOut; + const char *z; + char *zOut; + u32 nOut = sz; + z = (const char*)&pParse->aBlob[i+n]; + zOut = sqlite3DbMallocRaw(db, nOut+1); + if( zOut==0 ) goto returnfromblob_oom; + for(iIn=iOut=0; iIn=2 ); + zOut[iOut++] = (char)(0xc0 | (v>>6)); + zOut[iOut++] = 0x80 | (v&0x3f); + }else if( v<0x10000 ){ + assert( szEscape>=3 ); + zOut[iOut++] = 0xe0 | (v>>12); + zOut[iOut++] = 0x80 | ((v>>6)&0x3f); + zOut[iOut++] = 0x80 | (v&0x3f); + }else if( v==JSON_INVALID_CHAR ){ + /* Silently ignore illegal unicode */ + }else{ + assert( szEscape>=4 ); + zOut[iOut++] = 0xf0 | (v>>18); + zOut[iOut++] = 0x80 | ((v>>12)&0x3f); + zOut[iOut++] = 0x80 | ((v>>6)&0x3f); + zOut[iOut++] = 0x80 | (v&0x3f); + } + iIn += szEscape - 1; + }else{ + zOut[iOut++] = c; + } + } /* end for() */ + assert( iOut<=nOut ); + zOut[iOut] = 0; + sqlite3_result_text(pCtx, zOut, iOut, SQLITE_DYNAMIC); + break; + } + case JSONB_ARRAY: + case JSONB_OBJECT: { + int flags = textOnly ? 0 : SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx)); + if( flags & JSON_BLOB ){ + sqlite3_result_blob(pCtx, &pParse->aBlob[i], sz+n, SQLITE_TRANSIENT); + }else{ + jsonReturnTextJsonFromBlob(pCtx, &pParse->aBlob[i], sz+n); + } + break; + } + default: { + goto returnfromblob_malformed; + } + } + return; + +returnfromblob_oom: + sqlite3_result_error_nomem(pCtx); + return; + +returnfromblob_malformed: + sqlite3_result_error(pCtx, "malformed JSON", -1); + return; } /* -** Do a node lookup using zPath. Return a pointer to the node on success. -** Return NULL if not found or if there is an error. +** pArg is a function argument that might be an SQL value or a JSON +** value. Figure out what it is and encode it as a JSONB blob. +** Return the results in pParse. ** -** On an error, write an error message into pCtx and increment the -** pParse->nErr counter. +** pParse is uninitialized upon entry. This routine will handle the +** initialization of pParse. The result will be contained in +** pParse->aBlob and pParse->nBlob. pParse->aBlob might be dynamically +** allocated (if pParse->nBlobAlloc is greater than zero) in which case +** the caller is responsible for freeing the space allocated to pParse->aBlob +** when it has finished with it. Or pParse->aBlob might be a static string +** or a value obtained from sqlite3_value_blob(pArg). ** -** If pApnd!=NULL then try to append missing nodes and set *pApnd = 1 if -** nodes are appended. +** If the argument is a BLOB that is clearly not a JSONB, then this +** function might set an error message in ctx and return non-zero. +** It might also set an error message and return non-zero on an OOM error. */ -static JsonNode *jsonLookup( - JsonParse *pParse, /* The JSON to search */ - const char *zPath, /* The path to search */ - int *pApnd, /* Append nodes to complete path if not NULL */ - sqlite3_context *pCtx /* Report errors here, if not NULL */ -){ - const char *zErr = 0; - JsonNode *pNode = 0; - char *zMsg; - - if( zPath==0 ) return 0; - if( zPath[0]!='$' ){ - zErr = zPath; - goto lookup_err; +static int jsonFunctionArgToBlob( + sqlite3_context *ctx, + sqlite3_value *pArg, + JsonParse *pParse +){ + int eType = sqlite3_value_type(pArg); + static u8 aNull[] = { 0x00 }; + memset(pParse, 0, sizeof(pParse[0])); + pParse->db = sqlite3_context_db_handle(ctx); + switch( eType ){ + default: { + pParse->aBlob = aNull; + pParse->nBlob = 1; + return 0; + } + case SQLITE_BLOB: { + if( jsonFuncArgMightBeBinary(pArg) ){ + pParse->aBlob = (u8*)sqlite3_value_blob(pArg); + pParse->nBlob = sqlite3_value_bytes(pArg); + }else{ + sqlite3_result_error(ctx, "JSON cannot hold BLOB values", -1); + return 1; + } + break; + } + case SQLITE_TEXT: { + const char *zJson = (const char*)sqlite3_value_text(pArg); + int nJson = sqlite3_value_bytes(pArg); + if( zJson==0 ) return 1; + if( sqlite3_value_subtype(pArg)==JSON_SUBTYPE ){ + pParse->zJson = (char*)zJson; + pParse->nJson = nJson; + if( jsonConvertTextToBlob(pParse, ctx) ){ + sqlite3_result_error(ctx, "malformed JSON", -1); + sqlite3DbFree(pParse->db, pParse->aBlob); + memset(pParse, 0, sizeof(pParse[0])); + return 1; + } + }else{ + jsonBlobAppendNode(pParse, JSONB_TEXTRAW, nJson, zJson); + } + break; + } + case SQLITE_FLOAT: { + double r = sqlite3_value_double(pArg); + if( NEVER(sqlite3IsNaN(r)) ){ + jsonBlobAppendNode(pParse, JSONB_NULL, 0, 0); + }else{ + int n = sqlite3_value_bytes(pArg); + const char *z = (const char*)sqlite3_value_text(pArg); + if( z==0 ) return 1; + if( z[0]=='I' ){ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 5, "9e999"); + }else if( z[0]=='-' && z[1]=='I' ){ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 6, "-9e999"); + }else{ + jsonBlobAppendNode(pParse, JSONB_FLOAT, n, z); + } + } + break; + } + case SQLITE_INTEGER: { + int n = sqlite3_value_bytes(pArg); + const char *z = (const char*)sqlite3_value_text(pArg); + if( z==0 ) return 1; + jsonBlobAppendNode(pParse, JSONB_INT, n, z); + break; + } } - zPath++; - pNode = jsonLookupStep(pParse, 0, zPath, pApnd, &zErr); - if( zErr==0 ) return pNode; + if( pParse->oom ){ + sqlite3_result_error_nomem(ctx); + return 1; + }else{ + return 0; + } +} -lookup_err: - pParse->nErr++; - assert( zErr!=0 && pCtx!=0 ); - zMsg = jsonPathSyntaxError(zErr); +/* +** Generate a bad path error. +** +** If ctx is not NULL then push the error message into ctx and return NULL. +** If ctx is NULL, then return the text of the error message. +*/ +static char *jsonBadPathError( + sqlite3_context *ctx, /* The function call containing the error */ + const char *zPath /* The path with the problem */ +){ + char *zMsg = sqlite3_mprintf("bad JSON path: %Q", zPath); + if( ctx==0 ) return zMsg; if( zMsg ){ - sqlite3_result_error(pCtx, zMsg, -1); + sqlite3_result_error(ctx, zMsg, -1); sqlite3_free(zMsg); }else{ - sqlite3_result_error_nomem(pCtx); + sqlite3_result_error_nomem(ctx); } return 0; } +/* argv[0] is a BLOB that seems likely to be a JSONB. Subsequent +** arguments come in parse where each pair contains a JSON path and +** content to insert or set at that patch. Do the updates +** and return the result. +** +** The specific operation is determined by eEdit, which can be one +** of JEDIT_INS, JEDIT_REPL, or JEDIT_SET. +*/ +static void jsonInsertIntoBlob( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv, + int eEdit /* JEDIT_INS, JEDIT_REPL, or JEDIT_SET */ +){ + int i; + u32 rc = 0; + const char *zPath = 0; + int flgs; + JsonParse *p; + JsonParse ax; + + assert( (argc&1)==1 ); + flgs = argc==1 ? 0 : JSON_EDITABLE; + p = jsonParseFuncArg(ctx, argv[0], flgs); + if( p==0 ) return; + for(i=1; inBlob, ax.aBlob, ax.nBlob); + } + rc = 0; + }else{ + p->eEdit = eEdit; + p->nIns = ax.nBlob; + p->aIns = ax.aBlob; + p->delta = 0; + rc = jsonLookupStep(p, 0, zPath+1, 0); + } + jsonParseReset(&ax); + if( rc==JSON_LOOKUP_NOTFOUND ) continue; + if( JSON_LOOKUP_ISERROR(rc) ) goto jsonInsertIntoBlob_patherror; + } + jsonReturnParse(ctx, p); + jsonParseFree(p); + return; + +jsonInsertIntoBlob_patherror: + jsonParseFree(p); + if( rc==JSON_LOOKUP_ERROR ){ + sqlite3_result_error(ctx, "malformed JSON", -1); + }else{ + jsonBadPathError(ctx, zPath); + } + return; +} /* -** Report the wrong number of arguments for json_insert(), json_replace() -** or json_set(). +** If pArg is a blob that seems like a JSONB blob, then initialize +** p to point to that JSONB and return TRUE. If pArg does not seem like +** a JSONB blob, then return FALSE; +** +** This routine is only called if it is already known that pArg is a +** blob. The only open question is whether or not the blob appears +** to be a JSONB blob. */ -static void jsonWrongNumArgs( - sqlite3_context *pCtx, - const char *zFuncName -){ - char *zMsg = sqlite3_mprintf("json_%s() needs an odd number of arguments", - zFuncName); - sqlite3_result_error(pCtx, zMsg, -1); - sqlite3_free(zMsg); +static int jsonArgIsJsonb(sqlite3_value *pArg, JsonParse *p){ + u32 n, sz = 0; + p->aBlob = (u8*)sqlite3_value_blob(pArg); + p->nBlob = (u32)sqlite3_value_bytes(pArg); + if( p->nBlob==0 ){ + p->aBlob = 0; + return 0; + } + if( NEVER(p->aBlob==0) ){ + return 0; + } + if( (p->aBlob[0] & 0x0f)<=JSONB_OBJECT + && (n = jsonbPayloadSize(p, 0, &sz))>0 + && sz+n==p->nBlob + && ((p->aBlob[0] & 0x0f)>JSONB_FALSE || sz==0) + ){ + return 1; + } + p->aBlob = 0; + p->nBlob = 0; + return 0; } /* -** Mark all NULL entries in the Object passed in as JNODE_REMOVE. +** Generate a JsonParse object, containing valid JSONB in aBlob and nBlob, +** from the SQL function argument pArg. Return a pointer to the new +** JsonParse object. +** +** Ownership of the new JsonParse object is passed to the caller. The +** caller should invoke jsonParseFree() on the return value when it +** has finished using it. +** +** If any errors are detected, an appropriate error messages is set +** using sqlite3_result_error() or the equivalent and this routine +** returns NULL. This routine also returns NULL if the pArg argument +** is an SQL NULL value, but no error message is set in that case. This +** is so that SQL functions that are given NULL arguments will return +** a NULL value. */ -static void jsonRemoveAllNulls(JsonNode *pNode){ - int i, n; - assert( pNode->eType==JSON_OBJECT ); - n = pNode->n; - for(i=2; i<=n; i += jsonNodeSize(&pNode[i])+1){ - switch( pNode[i].eType ){ - case JSON_NULL: - pNode[i].jnFlags |= JNODE_REMOVE; - break; - case JSON_OBJECT: - jsonRemoveAllNulls(&pNode[i]); - break; +static JsonParse *jsonParseFuncArg( + sqlite3_context *ctx, + sqlite3_value *pArg, + u32 flgs +){ + int eType; /* Datatype of pArg */ + JsonParse *p = 0; /* Value to be returned */ + JsonParse *pFromCache = 0; /* Value taken from cache */ + sqlite3 *db; /* The database connection */ + + assert( ctx!=0 ); + eType = sqlite3_value_type(pArg); + if( eType==SQLITE_NULL ){ + return 0; + } + pFromCache = jsonCacheSearch(ctx, pArg); + if( pFromCache ){ + pFromCache->nJPRef++; + if( (flgs & JSON_EDITABLE)==0 ){ + return pFromCache; } } + db = sqlite3_context_db_handle(ctx); +rebuild_from_cache: + p = sqlite3DbMallocZero(db, sizeof(*p)); + if( p==0 ) goto json_pfa_oom; + memset(p, 0, sizeof(*p)); + p->db = db; + p->nJPRef = 1; + if( pFromCache!=0 ){ + u32 nBlob = pFromCache->nBlob; + p->aBlob = sqlite3DbMallocRaw(db, nBlob); + if( p->aBlob==0 ) goto json_pfa_oom; + memcpy(p->aBlob, pFromCache->aBlob, nBlob); + p->nBlobAlloc = p->nBlob = nBlob; + p->hasNonstd = pFromCache->hasNonstd; + jsonParseFree(pFromCache); + return p; + } + if( eType==SQLITE_BLOB ){ + if( jsonArgIsJsonb(pArg,p) ){ + if( (flgs & JSON_EDITABLE)!=0 && jsonBlobMakeEditable(p, 0)==0 ){ + goto json_pfa_oom; + } + return p; + } + /* If the blob is not valid JSONB, fall through into trying to cast + ** the blob into text which is then interpreted as JSON. (tag-20240123-a) + ** + ** This goes against all historical documentation about how the SQLite + ** JSON functions were suppose to work. From the beginning, blob was + ** reserved for expansion and a blob value should have raised an error. + ** But it did not, due to a bug. And many applications came to depend + ** upon this buggy behavior, espeically when using the CLI and reading + ** JSON text using readfile(), which returns a blob. For this reason + ** we will continue to support the bug moving forward. + ** See for example https://sqlite.org/forum/forumpost/012136abd5292b8d + */ + } + p->zJson = (char*)sqlite3_value_text(pArg); + p->nJson = sqlite3_value_bytes(pArg); + if( db->mallocFailed ) goto json_pfa_oom; + if( p->nJson==0 ) goto json_pfa_malformed; + assert( p->zJson!=0 ); + if( jsonConvertTextToBlob(p, (flgs & JSON_KEEPERROR) ? 0 : ctx) ){ + if( flgs & JSON_KEEPERROR ){ + p->nErr = 1; + return p; + }else{ + jsonParseFree(p); + return 0; + } + }else{ + int isRCStr = sqlite3ValueIsOfClass(pArg, sqlite3RCStrUnref); + int rc; + if( !isRCStr ){ + char *zNew = sqlite3RCStrNew( p->nJson ); + if( zNew==0 ) goto json_pfa_oom; + memcpy(zNew, p->zJson, p->nJson); + p->zJson = zNew; + p->zJson[p->nJson] = 0; + }else{ + sqlite3RCStrRef(p->zJson); + } + p->bJsonIsRCStr = 1; + rc = jsonCacheInsert(ctx, p); + if( rc==SQLITE_NOMEM ) goto json_pfa_oom; + if( flgs & JSON_EDITABLE ){ + pFromCache = p; + p = 0; + goto rebuild_from_cache; + } + } + return p; + +json_pfa_malformed: + if( flgs & JSON_KEEPERROR ){ + p->nErr = 1; + return p; + }else{ + jsonParseFree(p); + sqlite3_result_error(ctx, "malformed JSON", -1); + return 0; + } + +json_pfa_oom: + jsonParseFree(pFromCache); + jsonParseFree(p); + sqlite3_result_error_nomem(ctx); + return 0; } +/* +** Make the return value of a JSON function either the raw JSONB blob +** or make it JSON text, depending on whether the JSON_BLOB flag is +** set on the function. +*/ +static void jsonReturnParse( + sqlite3_context *ctx, + JsonParse *p +){ + int flgs; + if( p->oom ){ + sqlite3_result_error_nomem(ctx); + return; + } + flgs = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + if( flgs & JSON_BLOB ){ + if( p->nBlobAlloc>0 && !p->bReadOnly ){ + sqlite3_result_blob(ctx, p->aBlob, p->nBlob, SQLITE_DYNAMIC); + p->nBlobAlloc = 0; + }else{ + sqlite3_result_blob(ctx, p->aBlob, p->nBlob, SQLITE_TRANSIENT); + } + }else{ + JsonString s; + jsonStringInit(&s, ctx); + p->delta = 0; + jsonTranslateBlobToText(p, 0, &s); + jsonReturnString(&s, p, ctx); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } +} /**************************************************************************** ** SQL functions used for testing and debugging @@ -203539,63 +208420,124 @@ static void jsonRemoveAllNulls(JsonNode *pNode){ #if SQLITE_DEBUG /* -** Print N node entries. -*/ -static void jsonDebugPrintNodeEntries( - JsonNode *aNode, /* First node entry to print */ - int N /* Number of node entries to print */ -){ - int i; - for(i=0; iaBlob[iStart] & 0x0f; + u32 savedNBlob = pParse->nBlob; + sqlite3_str_appendf(pOut, "%5d:%*s", iStart, nIndent, ""); + if( pParse->nBlobAlloc>pParse->nBlob ){ + pParse->nBlob = pParse->nBlobAlloc; + } + nn = n = jsonbPayloadSize(pParse, iStart, &sz); + if( nn==0 ) nn = 1; + if( sz>0 && xaBlob[iStart+i]); + } + if( n==0 ){ + sqlite3_str_appendf(pOut, " ERROR invalid node size\n"); + iStart = n==0 ? iStart+1 : iEnd; + continue; + } + pParse->nBlob = savedNBlob; + if( iStart+n+sz>iEnd ){ + iEnd = iStart+n+sz; + if( iEnd>pParse->nBlob ){ + if( pParse->nBlobAlloc>0 && iEnd>pParse->nBlobAlloc ){ + iEnd = pParse->nBlobAlloc; + }else{ + iEnd = pParse->nBlob; + } + } } - printf("node %4u: %-7s n=%-5d", i, zType, aNode[i].n); - if( (aNode[i].jnFlags & ~JNODE_LABEL)!=0 ){ - u8 f = aNode[i].jnFlags; - if( f & JNODE_RAW ) printf(" RAW"); - if( f & JNODE_ESCAPE ) printf(" ESCAPE"); - if( f & JNODE_REMOVE ) printf(" REMOVE"); - if( f & JNODE_REPLACE ) printf(" REPLACE"); - if( f & JNODE_APPEND ) printf(" APPEND"); - if( f & JNODE_JSON5 ) printf(" JSON5"); + sqlite3_str_appendall(pOut," <-- "); + switch( x ){ + case JSONB_NULL: sqlite3_str_appendall(pOut,"null"); break; + case JSONB_TRUE: sqlite3_str_appendall(pOut,"true"); break; + case JSONB_FALSE: sqlite3_str_appendall(pOut,"false"); break; + case JSONB_INT: sqlite3_str_appendall(pOut,"int"); break; + case JSONB_INT5: sqlite3_str_appendall(pOut,"int5"); break; + case JSONB_FLOAT: sqlite3_str_appendall(pOut,"float"); break; + case JSONB_FLOAT5: sqlite3_str_appendall(pOut,"float5"); break; + case JSONB_TEXT: sqlite3_str_appendall(pOut,"text"); break; + case JSONB_TEXTJ: sqlite3_str_appendall(pOut,"textj"); break; + case JSONB_TEXT5: sqlite3_str_appendall(pOut,"text5"); break; + case JSONB_TEXTRAW: sqlite3_str_appendall(pOut,"textraw"); break; + case JSONB_ARRAY: { + sqlite3_str_appendf(pOut,"array, %u bytes\n", sz); + jsonDebugPrintBlob(pParse, iStart+n, iStart+n+sz, nIndent+2, pOut); + showContent = 0; + break; + } + case JSONB_OBJECT: { + sqlite3_str_appendf(pOut, "object, %u bytes\n", sz); + jsonDebugPrintBlob(pParse, iStart+n, iStart+n+sz, nIndent+2, pOut); + showContent = 0; + break; + } + default: { + sqlite3_str_appendall(pOut, "ERROR: unknown node type\n"); + showContent = 0; + break; + } } - switch( aNode[i].eU ){ - case 1: printf(" zJContent=[%.*s]\n", - aNode[i].n, aNode[i].u.zJContent); break; - case 2: printf(" iAppend=%u\n", aNode[i].u.iAppend); break; - case 3: printf(" iKey=%u\n", aNode[i].u.iKey); break; - case 4: printf(" iPrev=%u\n", aNode[i].u.iPrev); break; - default: printf("\n"); + if( showContent ){ + if( sz==0 && x<=JSONB_FALSE ){ + sqlite3_str_append(pOut, "\n", 1); + }else{ + u32 j; + sqlite3_str_appendall(pOut, ": \""); + for(j=iStart+n; jaBlob[j]; + if( c<0x20 || c>=0x7f ) c = '.'; + sqlite3_str_append(pOut, (char*)&c, 1); + } + sqlite3_str_append(pOut, "\"\n", 2); + } } + iStart += n + sz; } } -#endif /* SQLITE_DEBUG */ - - -#if 0 /* 1 for debugging. 0 normally. Requires -DSQLITE_DEBUG too */ -static void jsonDebugPrintParse(JsonParse *p){ - jsonDebugPrintNodeEntries(p->aNode, p->nNode); -} -static void jsonDebugPrintNode(JsonNode *pNode){ - jsonDebugPrintNodeEntries(pNode, jsonNodeSize(pNode)); +static void jsonShowParse(JsonParse *pParse){ + sqlite3_str out; + char zBuf[1000]; + if( pParse==0 ){ + printf("NULL pointer\n"); + return; + }else{ + printf("nBlobAlloc = %u\n", pParse->nBlobAlloc); + printf("nBlob = %u\n", pParse->nBlob); + printf("delta = %d\n", pParse->delta); + if( pParse->nBlob==0 ) return; + printf("content (bytes 0..%u):\n", pParse->nBlob-1); + } + sqlite3StrAccumInit(&out, 0, zBuf, sizeof(zBuf), 1000000); + jsonDebugPrintBlob(pParse, 0, pParse->nBlob, 0, &out); + printf("%s", sqlite3_str_value(&out)); + sqlite3_str_reset(&out); } -#else - /* The usual case */ -# define jsonDebugPrintNode(X) -# define jsonDebugPrintParse(X) -#endif +#endif /* SQLITE_DEBUG */ #ifdef SQLITE_DEBUG /* ** SQL function: json_parse(JSON) ** -** Parse JSON using jsonParseCached(). Then print a dump of that -** parse on standard output. Return the mimified JSON result, just -** like the json() function. +** Parse JSON using jsonParseFuncArg(). Return text that is a +** human-readable dump of the binary JSONB for the input parameter. */ static void jsonParseFunc( sqlite3_context *ctx, @@ -203603,38 +208545,20 @@ static void jsonParseFunc( sqlite3_value **argv ){ JsonParse *p; /* The parse */ + sqlite3_str out; - assert( argc==1 ); - p = jsonParseCached(ctx, argv[0], ctx, 0); + assert( argc>=1 ); + sqlite3StrAccumInit(&out, 0, 0, 0, 1000000); + p = jsonParseFuncArg(ctx, argv[0], 0); if( p==0 ) return; - printf("nNode = %u\n", p->nNode); - printf("nAlloc = %u\n", p->nAlloc); - printf("nJson = %d\n", p->nJson); - printf("nAlt = %d\n", p->nAlt); - printf("nErr = %u\n", p->nErr); - printf("oom = %u\n", p->oom); - printf("hasNonstd = %u\n", p->hasNonstd); - printf("useMod = %u\n", p->useMod); - printf("hasMod = %u\n", p->hasMod); - printf("nJPRef = %u\n", p->nJPRef); - printf("iSubst = %u\n", p->iSubst); - printf("iHold = %u\n", p->iHold); - jsonDebugPrintNodeEntries(p->aNode, p->nNode); - jsonReturnJson(p, p->aNode, ctx, 1); -} - -/* -** The json_test1(JSON) function return true (1) if the input is JSON -** text generated by another json function. It returns (0) if the input -** is not known to be JSON. -*/ -static void jsonTest1Func( - sqlite3_context *ctx, - int argc, - sqlite3_value **argv -){ - UNUSED_PARAMETER(argc); - sqlite3_result_int(ctx, sqlite3_value_subtype(argv[0])==JSON_SUBTYPE); + if( argc==1 ){ + jsonDebugPrintBlob(p, 0, p->nBlob, 0, &out); + sqlite3_result_text64(ctx,out.zText,out.nChar,SQLITE_TRANSIENT,SQLITE_UTF8); + }else{ + jsonShowParse(p); + } + jsonParseFree(p); + sqlite3_str_reset(&out); } #endif /* SQLITE_DEBUG */ @@ -203643,7 +208567,7 @@ static void jsonTest1Func( ****************************************************************************/ /* -** Implementation of the json_QUOTE(VALUE) function. Return a JSON value +** Implementation of the json_quote(VALUE) function. Return a JSON value ** corresponding to the SQL value input. Mostly this means putting ** double-quotes around strings and returning the unquoted string "null" ** when given a NULL input. @@ -203656,9 +208580,9 @@ static void jsonQuoteFunc( JsonString jx; UNUSED_PARAMETER(argc); - jsonInit(&jx, ctx); - jsonAppendValue(&jx, argv[0]); - jsonResult(&jx); + jsonStringInit(&jx, ctx); + jsonAppendSqlValue(&jx, argv[0]); + jsonReturnString(&jx, 0, 0); sqlite3_result_subtype(ctx, JSON_SUBTYPE); } @@ -203675,18 +208599,17 @@ static void jsonArrayFunc( int i; JsonString jx; - jsonInit(&jx, ctx); + jsonStringInit(&jx, ctx); jsonAppendChar(&jx, '['); for(i=0; inNode ); if( argc==2 ){ const char *zPath = (const char*)sqlite3_value_text(argv[1]); - pNode = jsonLookup(p, zPath, 0, ctx); - }else{ - pNode = p->aNode; - } - if( pNode==0 ){ - return; - } - if( pNode->eType==JSON_ARRAY ){ - while( 1 /*exit-by-break*/ ){ - i = 1; - while( i<=pNode->n ){ - if( (pNode[i].jnFlags & JNODE_REMOVE)==0 ) n++; - i += jsonNodeSize(&pNode[i]); + if( zPath==0 ){ + jsonParseFree(p); + return; + } + i = jsonLookupStep(p, 0, zPath[0]=='$' ? zPath+1 : "@", 0); + if( JSON_LOOKUP_ISERROR(i) ){ + if( i==JSON_LOOKUP_NOTFOUND ){ + /* no-op */ + }else if( i==JSON_LOOKUP_PATHERROR ){ + jsonBadPathError(ctx, zPath); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); } - if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; - if( p->useMod==0 ) break; - assert( pNode->eU==2 ); - pNode = &p->aNode[pNode->u.iAppend]; + eErr = 1; + i = 0; } + }else{ + i = 0; + } + if( (p->aBlob[i] & 0x0f)==JSONB_ARRAY ){ + cnt = jsonbArrayCount(p, i); } - sqlite3_result_int64(ctx, n); + if( !eErr ) sqlite3_result_int64(ctx, cnt); + jsonParseFree(p); } -/* -** Bit values for the flags passed into jsonExtractFunc() or -** jsonSetFunc() via the user-data value. -*/ -#define JSON_JSON 0x01 /* Result is always JSON */ -#define JSON_SQL 0x02 /* Result is always SQL */ -#define JSON_ABPATH 0x03 /* Allow abbreviated JSON path specs */ -#define JSON_ISSET 0x04 /* json_set(), not json_insert() */ +/* True if the string is all alphanumerics and underscores */ +static int jsonAllAlphanum(const char *z, int n){ + int i; + for(i=0; i2 ){ + jsonAppendChar(&jx, '['); + } + for(i=1; i and ->> operators accept abbreviated PATH arguments. This - ** is mostly for compatibility with PostgreSQL, but also for - ** convenience. - ** - ** NUMBER ==> $[NUMBER] // PG compatible - ** LABEL ==> $.LABEL // PG compatible - ** [NUMBER] ==> $[NUMBER] // Not PG. Purely for convenience - */ - jsonInit(&jx, ctx); - if( sqlite3Isdigit(zPath[0]) ){ - jsonAppendRawNZ(&jx, "$[", 2); - jsonAppendRaw(&jx, zPath, (int)strlen(zPath)); - jsonAppendRawNZ(&jx, "]", 2); - }else{ - jsonAppendRawNZ(&jx, "$.", 1 + (zPath[0]!='[')); - jsonAppendRaw(&jx, zPath, (int)strlen(zPath)); - jsonAppendChar(&jx, 0); - } - pNode = jx.bErr ? 0 : jsonLookup(p, jx.zBuf, 0, ctx); - jsonReset(&jx); + const char *zPath = (const char*)sqlite3_value_text(argv[i]); + int nPath; + u32 j; + if( zPath==0 ) goto json_extract_error; + nPath = sqlite3Strlen30(zPath); + if( zPath[0]=='$' ){ + j = jsonLookupStep(p, 0, zPath+1, 0); + }else if( (flags & JSON_ABPATH) ){ + /* The -> and ->> operators accept abbreviated PATH arguments. This + ** is mostly for compatibility with PostgreSQL, but also for + ** convenience. + ** + ** NUMBER ==> $[NUMBER] // PG compatible + ** LABEL ==> $.LABEL // PG compatible + ** [NUMBER] ==> $[NUMBER] // Not PG. Purely for convenience + */ + jsonStringInit(&jx, ctx); + if( sqlite3_value_type(argv[i])==SQLITE_INTEGER ){ + jsonAppendRawNZ(&jx, "[", 1); + jsonAppendRaw(&jx, zPath, nPath); + jsonAppendRawNZ(&jx, "]", 2); + }else if( jsonAllAlphanum(zPath, nPath) ){ + jsonAppendRawNZ(&jx, ".", 1); + jsonAppendRaw(&jx, zPath, nPath); + }else if( zPath[0]=='[' && nPath>=3 && zPath[nPath-1]==']' ){ + jsonAppendRaw(&jx, zPath, nPath); }else{ - pNode = jsonLookup(p, zPath, 0, ctx); + jsonAppendRawNZ(&jx, ".\"", 2); + jsonAppendRaw(&jx, zPath, nPath); + jsonAppendRawNZ(&jx, "\"", 1); } - if( pNode ){ + jsonStringTerminate(&jx); + j = jsonLookupStep(p, 0, jx.zBuf, 0); + jsonStringReset(&jx); + }else{ + jsonBadPathError(ctx, zPath); + goto json_extract_error; + } + if( jnBlob ){ + if( argc==2 ){ if( flags & JSON_JSON ){ - jsonReturnJson(p, pNode, ctx, 0); + jsonStringInit(&jx, ctx); + jsonTranslateBlobToText(p, j, &jx); + jsonReturnString(&jx, 0, 0); + jsonStringReset(&jx); + assert( (flags & JSON_BLOB)==0 ); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); }else{ - jsonReturn(p, pNode, ctx); - sqlite3_result_subtype(ctx, 0); + jsonReturnFromBlob(p, j, ctx, 0); + if( (flags & (JSON_SQL|JSON_BLOB))==0 + && (p->aBlob[j]&0x0f)>=JSONB_ARRAY + ){ + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } } + }else{ + jsonAppendSeparator(&jx); + jsonTranslateBlobToText(p, j, &jx); } - }else{ - pNode = jsonLookup(p, zPath, 0, ctx); - if( p->nErr==0 && pNode ) jsonReturn(p, pNode, ctx); - } - }else{ - /* Two or more PATH arguments results in a JSON array with each - ** element of the array being the value selected by one of the PATHs */ - int i; - jsonInit(&jx, ctx); - jsonAppendChar(&jx, '['); - for(i=1; inErr ) break; - jsonAppendSeparator(&jx); - if( pNode ){ - jsonRenderNode(p, pNode, &jx); + }else if( j==JSON_LOOKUP_NOTFOUND ){ + if( argc==2 ){ + goto json_extract_error; /* Return NULL if not found */ }else{ + jsonAppendSeparator(&jx); jsonAppendRawNZ(&jx, "null", 4); } + }else if( j==JSON_LOOKUP_ERROR ){ + sqlite3_result_error(ctx, "malformed JSON", -1); + goto json_extract_error; + }else{ + jsonBadPathError(ctx, zPath); + goto json_extract_error; } - if( i==argc ){ - jsonAppendChar(&jx, ']'); - jsonResult(&jx); + } + if( argc>2 ){ + jsonAppendChar(&jx, ']'); + jsonReturnString(&jx, 0, 0); + if( (flags & JSON_BLOB)==0 ){ sqlite3_result_subtype(ctx, JSON_SUBTYPE); } - jsonReset(&jx); } +json_extract_error: + jsonStringReset(&jx); + jsonParseFree(p); + return; } -/* This is the RFC 7396 MergePatch algorithm. -*/ -static JsonNode *jsonMergePatch( - JsonParse *pParse, /* The JSON parser that contains the TARGET */ - u32 iTarget, /* Node of the TARGET in pParse */ - JsonNode *pPatch /* The PATCH */ -){ - u32 i, j; - u32 iRoot; - JsonNode *pTarget; - if( pPatch->eType!=JSON_OBJECT ){ - return pPatch; - } - assert( iTargetnNode ); - pTarget = &pParse->aNode[iTarget]; - assert( (pPatch->jnFlags & JNODE_APPEND)==0 ); - if( pTarget->eType!=JSON_OBJECT ){ - jsonRemoveAllNulls(pPatch); - return pPatch; - } - iRoot = iTarget; - for(i=1; in; i += jsonNodeSize(&pPatch[i+1])+1){ - u32 nKey; - const char *zKey; - assert( pPatch[i].eType==JSON_STRING ); - assert( pPatch[i].jnFlags & JNODE_LABEL ); - assert( pPatch[i].eU==1 ); - nKey = pPatch[i].n; - zKey = pPatch[i].u.zJContent; - for(j=1; jn; j += jsonNodeSize(&pTarget[j+1])+1 ){ - assert( pTarget[j].eType==JSON_STRING ); - assert( pTarget[j].jnFlags & JNODE_LABEL ); - if( jsonSameLabel(&pPatch[i], &pTarget[j]) ){ - if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_REPLACE) ) break; - if( pPatch[i+1].eType==JSON_NULL ){ - pTarget[j+1].jnFlags |= JNODE_REMOVE; - }else{ - JsonNode *pNew = jsonMergePatch(pParse, iTarget+j+1, &pPatch[i+1]); - if( pNew==0 ) return 0; - if( pNew!=&pParse->aNode[iTarget+j+1] ){ - jsonParseAddSubstNode(pParse, iTarget+j+1); - jsonParseAddNodeArray(pParse, pNew, jsonNodeSize(pNew)); - } - pTarget = &pParse->aNode[iTarget]; - } - break; +/* +** Return codes for jsonMergePatch() +*/ +#define JSON_MERGE_OK 0 /* Success */ +#define JSON_MERGE_BADTARGET 1 /* Malformed TARGET blob */ +#define JSON_MERGE_BADPATCH 2 /* Malformed PATCH blob */ +#define JSON_MERGE_OOM 3 /* Out-of-memory condition */ + +/* +** RFC-7396 MergePatch for two JSONB blobs. +** +** pTarget is the target. pPatch is the patch. The target is updated +** in place. The patch is read-only. +** +** The original RFC-7396 algorithm is this: +** +** define MergePatch(Target, Patch): +** if Patch is an Object: +** if Target is not an Object: +** Target = {} # Ignore the contents and set it to an empty Object +** for each Name/Value pair in Patch: +** if Value is null: +** if Name exists in Target: +** remove the Name/Value pair from Target +** else: +** Target[Name] = MergePatch(Target[Name], Value) +** return Target +** else: +** return Patch +** +** Here is an equivalent algorithm restructured to show the actual +** implementation: +** +** 01 define MergePatch(Target, Patch): +** 02 if Patch is not an Object: +** 03 return Patch +** 04 else: // if Patch is an Object +** 05 if Target is not an Object: +** 06 Target = {} +** 07 for each Name/Value pair in Patch: +** 08 if Name exists in Target: +** 09 if Value is null: +** 10 remove the Name/Value pair from Target +** 11 else +** 12 Target[name] = MergePatch(Target[Name], Value) +** 13 else if Value is not NULL: +** 14 if Value is not an Object: +** 15 Target[name] = Value +** 16 else: +** 17 Target[name] = MergePatch('{}',value) +** 18 return Target +** | +** ^---- Line numbers referenced in comments in the implementation +*/ +static int jsonMergePatch( + JsonParse *pTarget, /* The JSON parser that contains the TARGET */ + u32 iTarget, /* Index of TARGET in pTarget->aBlob[] */ + const JsonParse *pPatch, /* The PATCH */ + u32 iPatch /* Index of PATCH in pPatch->aBlob[] */ +){ + u8 x; /* Type of a single node */ + u32 n, sz=0; /* Return values from jsonbPayloadSize() */ + u32 iTCursor; /* Cursor position while scanning the target object */ + u32 iTStart; /* First label in the target object */ + u32 iTEndBE; /* Original first byte past end of target, before edit */ + u32 iTEnd; /* Current first byte past end of target */ + u8 eTLabel; /* Node type of the target label */ + u32 iTLabel = 0; /* Index of the label */ + u32 nTLabel = 0; /* Header size in bytes for the target label */ + u32 szTLabel = 0; /* Size of the target label payload */ + u32 iTValue = 0; /* Index of the target value */ + u32 nTValue = 0; /* Header size of the target value */ + u32 szTValue = 0; /* Payload size for the target value */ + + u32 iPCursor; /* Cursor position while scanning the patch */ + u32 iPEnd; /* First byte past the end of the patch */ + u8 ePLabel; /* Node type of the patch label */ + u32 iPLabel; /* Start of patch label */ + u32 nPLabel; /* Size of header on the patch label */ + u32 szPLabel; /* Payload size of the patch label */ + u32 iPValue; /* Start of patch value */ + u32 nPValue; /* Header size for the patch value */ + u32 szPValue; /* Payload size of the patch value */ + + assert( iTarget>=0 && iTargetnBlob ); + assert( iPatch>=0 && iPatchnBlob ); + x = pPatch->aBlob[iPatch] & 0x0f; + if( x!=JSONB_OBJECT ){ /* Algorithm line 02 */ + u32 szPatch; /* Total size of the patch, header+payload */ + u32 szTarget; /* Total size of the target, header+payload */ + n = jsonbPayloadSize(pPatch, iPatch, &sz); + szPatch = n+sz; + sz = 0; + n = jsonbPayloadSize(pTarget, iTarget, &sz); + szTarget = n+sz; + jsonBlobEdit(pTarget, iTarget, szTarget, pPatch->aBlob+iPatch, szPatch); + return pTarget->oom ? JSON_MERGE_OOM : JSON_MERGE_OK; /* Line 03 */ + } + x = pTarget->aBlob[iTarget] & 0x0f; + if( x!=JSONB_OBJECT ){ /* Algorithm line 05 */ + n = jsonbPayloadSize(pTarget, iTarget, &sz); + jsonBlobEdit(pTarget, iTarget+n, sz, 0, 0); + x = pTarget->aBlob[iTarget]; + pTarget->aBlob[iTarget] = (x & 0xf0) | JSONB_OBJECT; + } + n = jsonbPayloadSize(pPatch, iPatch, &sz); + if( NEVER(n==0) ) return JSON_MERGE_BADPATCH; + iPCursor = iPatch+n; + iPEnd = iPCursor+sz; + n = jsonbPayloadSize(pTarget, iTarget, &sz); + if( NEVER(n==0) ) return JSON_MERGE_BADTARGET; + iTStart = iTarget+n; + iTEndBE = iTStart+sz; + + while( iPCursoraBlob[iPCursor] & 0x0f; + if( ePLabelJSONB_TEXTRAW ){ + return JSON_MERGE_BADPATCH; + } + nPLabel = jsonbPayloadSize(pPatch, iPCursor, &szPLabel); + if( nPLabel==0 ) return JSON_MERGE_BADPATCH; + iPValue = iPCursor + nPLabel + szPLabel; + if( iPValue>=iPEnd ) return JSON_MERGE_BADPATCH; + nPValue = jsonbPayloadSize(pPatch, iPValue, &szPValue); + if( nPValue==0 ) return JSON_MERGE_BADPATCH; + iPCursor = iPValue + nPValue + szPValue; + if( iPCursor>iPEnd ) return JSON_MERGE_BADPATCH; + + iTCursor = iTStart; + iTEnd = iTEndBE + pTarget->delta; + while( iTCursoraBlob[iTCursor] & 0x0f; + if( eTLabelJSONB_TEXTRAW ){ + return JSON_MERGE_BADTARGET; + } + nTLabel = jsonbPayloadSize(pTarget, iTCursor, &szTLabel); + if( nTLabel==0 ) return JSON_MERGE_BADTARGET; + iTValue = iTLabel + nTLabel + szTLabel; + if( iTValue>=iTEnd ) return JSON_MERGE_BADTARGET; + nTValue = jsonbPayloadSize(pTarget, iTValue, &szTValue); + if( nTValue==0 ) return JSON_MERGE_BADTARGET; + if( iTValue + nTValue + szTValue > iTEnd ) return JSON_MERGE_BADTARGET; + isEqual = jsonLabelCompare( + (const char*)&pPatch->aBlob[iPLabel+nPLabel], + szPLabel, + (ePLabel==JSONB_TEXT || ePLabel==JSONB_TEXTRAW), + (const char*)&pTarget->aBlob[iTLabel+nTLabel], + szTLabel, + (eTLabel==JSONB_TEXT || eTLabel==JSONB_TEXTRAW)); + if( isEqual ) break; + iTCursor = iTValue + nTValue + szTValue; + } + x = pPatch->aBlob[iPValue] & 0x0f; + if( iTCursoroom) ) return JSON_MERGE_OOM; + }else{ + /* Algorithm line 12 */ + int rc, savedDelta = pTarget->delta; + pTarget->delta = 0; + rc = jsonMergePatch(pTarget, iTValue, pPatch, iPValue); + if( rc ) return rc; + pTarget->delta += savedDelta; + } + }else if( x>0 ){ /* Algorithm line 13 */ + /* No match and patch value is not NULL */ + u32 szNew = szPLabel+nPLabel; + if( (pPatch->aBlob[iPValue] & 0x0f)!=JSONB_OBJECT ){ /* Line 14 */ + jsonBlobEdit(pTarget, iTEnd, 0, 0, szPValue+nPValue+szNew); + if( pTarget->oom ) return JSON_MERGE_OOM; + memcpy(&pTarget->aBlob[iTEnd], &pPatch->aBlob[iPLabel], szNew); + memcpy(&pTarget->aBlob[iTEnd+szNew], + &pPatch->aBlob[iPValue], szPValue+nPValue); + }else{ + int rc, savedDelta; + jsonBlobEdit(pTarget, iTEnd, 0, 0, szNew+1); + if( pTarget->oom ) return JSON_MERGE_OOM; + memcpy(&pTarget->aBlob[iTEnd], &pPatch->aBlob[iPLabel], szNew); + pTarget->aBlob[iTEnd+szNew] = 0x00; + savedDelta = pTarget->delta; + pTarget->delta = 0; + rc = jsonMergePatch(pTarget, iTEnd+szNew,pPatch,iPValue); + if( rc ) return rc; + pTarget->delta += savedDelta; } } - if( j>=pTarget->n && pPatch[i+1].eType!=JSON_NULL ){ - int iStart; - JsonNode *pApnd; - u32 nApnd; - iStart = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); - jsonParseAddNode(pParse, JSON_STRING, nKey, zKey); - pApnd = &pPatch[i+1]; - if( pApnd->eType==JSON_OBJECT ) jsonRemoveAllNulls(pApnd); - nApnd = jsonNodeSize(pApnd); - jsonParseAddNodeArray(pParse, pApnd, jsonNodeSize(pApnd)); - if( pParse->oom ) return 0; - pParse->aNode[iStart].n = 1+nApnd; - pParse->aNode[iRoot].jnFlags |= JNODE_APPEND; - pParse->aNode[iRoot].u.iAppend = iStart; - VVA( pParse->aNode[iRoot].eU = 2 ); - iRoot = iStart; - pTarget = &pParse->aNode[iTarget]; - } } - return pTarget; + if( pTarget->delta ) jsonAfterEditSizeAdjust(pTarget, iTarget); + return pTarget->oom ? JSON_MERGE_OOM : JSON_MERGE_OK; } + /* ** Implementation of the json_mergepatch(JSON1,JSON2) function. Return a JSON ** object that is the result of running the RFC 7396 MergePatch() algorithm @@ -203922,28 +209000,27 @@ static void jsonPatchFunc( int argc, sqlite3_value **argv ){ - JsonParse *pX; /* The JSON that is being patched */ - JsonParse *pY; /* The patch */ - JsonNode *pResult; /* The result of the merge */ + JsonParse *pTarget; /* The TARGET */ + JsonParse *pPatch; /* The PATCH */ + int rc; /* Result code */ UNUSED_PARAMETER(argc); - pX = jsonParseCached(ctx, argv[0], ctx, 1); - if( pX==0 ) return; - assert( pX->hasMod==0 ); - pX->hasMod = 1; - pY = jsonParseCached(ctx, argv[1], ctx, 1); - if( pY==0 ) return; - pX->useMod = 1; - pY->useMod = 1; - pResult = jsonMergePatch(pX, 0, pY->aNode); - assert( pResult!=0 || pX->oom ); - if( pResult && pX->oom==0 ){ - jsonDebugPrintParse(pX); - jsonDebugPrintNode(pResult); - jsonReturnJson(pX, pResult, ctx, 0); - }else{ - sqlite3_result_error_nomem(ctx); + assert( argc==2 ); + pTarget = jsonParseFuncArg(ctx, argv[0], JSON_EDITABLE); + if( pTarget==0 ) return; + pPatch = jsonParseFuncArg(ctx, argv[1], 0); + if( pPatch ){ + rc = jsonMergePatch(pTarget, 0, pPatch, 0); + if( rc==JSON_MERGE_OK ){ + jsonReturnParse(ctx, pTarget); + }else if( rc==JSON_MERGE_OOM ){ + sqlite3_result_error_nomem(ctx); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); + } + jsonParseFree(pPatch); } + jsonParseFree(pTarget); } @@ -203967,23 +209044,23 @@ static void jsonObjectFunc( "of arguments", -1); return; } - jsonInit(&jx, ctx); + jsonStringInit(&jx, ctx); jsonAppendChar(&jx, '{'); for(i=0; i1); - if( pParse==0 ) return; - for(i=1; i<(u32)argc; i++){ + p = jsonParseFuncArg(ctx, argv[0], argc>1 ? JSON_EDITABLE : 0); + if( p==0 ) return; + for(i=1; inErr ) goto remove_done; - if( pNode ){ - pNode->jnFlags |= JNODE_REMOVE; - pParse->hasMod = 1; - pParse->useMod = 1; + if( zPath==0 ){ + goto json_remove_done; + } + if( zPath[0]!='$' ){ + goto json_remove_patherror; + } + if( zPath[1]==0 ){ + /* json_remove(j,'$') returns NULL */ + goto json_remove_done; + } + p->eEdit = JEDIT_DEL; + p->delta = 0; + rc = jsonLookupStep(p, 0, zPath+1, 0); + if( JSON_LOOKUP_ISERROR(rc) ){ + if( rc==JSON_LOOKUP_NOTFOUND ){ + continue; /* No-op */ + }else if( rc==JSON_LOOKUP_PATHERROR ){ + jsonBadPathError(ctx, zPath); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); + } + goto json_remove_done; } } - if( (pParse->aNode[0].jnFlags & JNODE_REMOVE)==0 ){ - jsonReturnJson(pParse, pParse->aNode, ctx, 1); - } -remove_done: - jsonDebugPrintParse(p); -} + jsonReturnParse(ctx, p); + jsonParseFree(p); + return; -/* -** Substitute the value at iNode with the pValue parameter. -*/ -static void jsonReplaceNode( - sqlite3_context *pCtx, - JsonParse *p, - int iNode, - sqlite3_value *pValue -){ - int idx = jsonParseAddSubstNode(p, iNode); - if( idx<=0 ){ - assert( p->oom ); - return; - } - switch( sqlite3_value_type(pValue) ){ - case SQLITE_NULL: { - jsonParseAddNode(p, JSON_NULL, 0, 0); - break; - } - case SQLITE_FLOAT: { - char *z = sqlite3_mprintf("%!0.15g", sqlite3_value_double(pValue)); - int n; - if( z==0 ){ - p->oom = 1; - break; - } - n = sqlite3Strlen30(z); - jsonParseAddNode(p, JSON_REAL, n, z); - jsonParseAddCleanup(p, sqlite3_free, z); - break; - } - case SQLITE_INTEGER: { - char *z = sqlite3_mprintf("%lld", sqlite3_value_int64(pValue)); - int n; - if( z==0 ){ - p->oom = 1; - break; - } - n = sqlite3Strlen30(z); - jsonParseAddNode(p, JSON_INT, n, z); - jsonParseAddCleanup(p, sqlite3_free, z); +json_remove_patherror: + jsonBadPathError(ctx, zPath); - break; - } - case SQLITE_TEXT: { - const char *z = (const char*)sqlite3_value_text(pValue); - u32 n = (u32)sqlite3_value_bytes(pValue); - if( z==0 ){ - p->oom = 1; - break; - } - if( sqlite3_value_subtype(pValue)!=JSON_SUBTYPE ){ - char *zCopy = sqlite3DbStrDup(0, z); - int k; - if( zCopy ){ - jsonParseAddCleanup(p, sqlite3_free, zCopy); - }else{ - p->oom = 1; - sqlite3_result_error_nomem(pCtx); - } - k = jsonParseAddNode(p, JSON_STRING, n, zCopy); - assert( k>0 || p->oom ); - if( p->oom==0 ) p->aNode[k].jnFlags |= JNODE_RAW; - }else{ - JsonParse *pPatch = jsonParseCached(pCtx, pValue, pCtx, 1); - if( pPatch==0 ){ - p->oom = 1; - break; - } - jsonParseAddNodeArray(p, pPatch->aNode, pPatch->nNode); - /* The nodes copied out of pPatch and into p likely contain - ** u.zJContent pointers into pPatch->zJson. So preserve the - ** content of pPatch until p is destroyed. */ - assert( pPatch->nJPRef>=1 ); - pPatch->nJPRef++; - jsonParseAddCleanup(p, (void(*)(void*))jsonParseFree, pPatch); - } - break; - } - default: { - jsonParseAddNode(p, JSON_NULL, 0, 0); - sqlite3_result_error(pCtx, "JSON cannot hold BLOB values", -1); - p->nErr++; - break; - } - } +json_remove_done: + jsonParseFree(p); + return; } /* @@ -204124,30 +209133,12 @@ static void jsonReplaceFunc( int argc, sqlite3_value **argv ){ - JsonParse *pParse; /* The parse */ - JsonNode *pNode; - const char *zPath; - u32 i; - if( argc<1 ) return; if( (argc&1)==0 ) { jsonWrongNumArgs(ctx, "replace"); return; } - pParse = jsonParseCached(ctx, argv[0], ctx, argc>1); - if( pParse==0 ) return; - for(i=1; i<(u32)argc; i+=2){ - zPath = (const char*)sqlite3_value_text(argv[i]); - pParse->useMod = 1; - pNode = jsonLookup(pParse, zPath, 0, ctx); - if( pParse->nErr ) goto replace_err; - if( pNode ){ - jsonReplaceNode(ctx, pParse, (u32)(pNode - pParse->aNode), argv[i+1]); - } - } - jsonReturnJson(pParse, pParse->aNode, ctx, 1); -replace_err: - jsonDebugPrintParse(pParse); + jsonInsertIntoBlob(ctx, argc, argv, JEDIT_REPL); } @@ -204168,39 +209159,16 @@ static void jsonSetFunc( int argc, sqlite3_value **argv ){ - JsonParse *pParse; /* The parse */ - JsonNode *pNode; - const char *zPath; - u32 i; - int bApnd; - int bIsSet = sqlite3_user_data(ctx)!=0; + + int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + int bIsSet = (flags&JSON_ISSET)!=0; if( argc<1 ) return; if( (argc&1)==0 ) { jsonWrongNumArgs(ctx, bIsSet ? "set" : "insert"); return; } - pParse = jsonParseCached(ctx, argv[0], ctx, argc>1); - if( pParse==0 ) return; - for(i=1; i<(u32)argc; i+=2){ - zPath = (const char*)sqlite3_value_text(argv[i]); - bApnd = 0; - pParse->useMod = 1; - pNode = jsonLookup(pParse, zPath, &bApnd, ctx); - if( pParse->oom ){ - sqlite3_result_error_nomem(ctx); - goto jsonSetDone; - }else if( pParse->nErr ){ - goto jsonSetDone; - }else if( pNode && (bApnd || bIsSet) ){ - jsonReplaceNode(ctx, pParse, (u32)(pNode - pParse->aNode), argv[i+1]); - } - } - jsonDebugPrintParse(pParse); - jsonReturnJson(pParse, pParse->aNode, ctx, 1); - -jsonSetDone: - /* no cleanup required */; + jsonInsertIntoBlob(ctx, argc, argv, bIsSet ? JEDIT_SET : JEDIT_INS); } /* @@ -204216,27 +209184,127 @@ static void jsonTypeFunc( sqlite3_value **argv ){ JsonParse *p; /* The parse */ - const char *zPath; - JsonNode *pNode; + const char *zPath = 0; + u32 i; - p = jsonParseCached(ctx, argv[0], ctx, 0); + p = jsonParseFuncArg(ctx, argv[0], 0); if( p==0 ) return; if( argc==2 ){ zPath = (const char*)sqlite3_value_text(argv[1]); - pNode = jsonLookup(p, zPath, 0, ctx); + if( zPath==0 ) goto json_type_done; + if( zPath[0]!='$' ){ + jsonBadPathError(ctx, zPath); + goto json_type_done; + } + i = jsonLookupStep(p, 0, zPath+1, 0); + if( JSON_LOOKUP_ISERROR(i) ){ + if( i==JSON_LOOKUP_NOTFOUND ){ + /* no-op */ + }else if( i==JSON_LOOKUP_PATHERROR ){ + jsonBadPathError(ctx, zPath); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); + } + goto json_type_done; + } }else{ - pNode = p->aNode; + i = 0; } - if( pNode ){ - sqlite3_result_text(ctx, jsonType[pNode->eType], -1, SQLITE_STATIC); + sqlite3_result_text(ctx, jsonbType[p->aBlob[i]&0x0f], -1, SQLITE_STATIC); +json_type_done: + jsonParseFree(p); +} + +/* +** json_pretty(JSON) +** json_pretty(JSON, INDENT) +** +** Return text that is a pretty-printed rendering of the input JSON. +** If the argument is not valid JSON, return NULL. +** +** The INDENT argument is text that is used for indentation. If omitted, +** it defaults to four spaces (the same as PostgreSQL). +*/ +static void jsonPrettyFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonString s; /* The output string */ + JsonPretty x; /* Pretty printing context */ + + memset(&x, 0, sizeof(x)); + x.pParse = jsonParseFuncArg(ctx, argv[0], 0); + if( x.pParse==0 ) return; + x.pOut = &s; + jsonStringInit(&s, ctx); + if( argc==1 || (x.zIndent = (const char*)sqlite3_value_text(argv[1]))==0 ){ + x.zIndent = " "; + x.szIndent = 4; + }else{ + x.szIndent = (u32)strlen(x.zIndent); } + jsonTranslateBlobToPrettyText(&x, 0); + jsonReturnString(&s, 0, 0); + jsonParseFree(x.pParse); } /* ** json_valid(JSON) -** -** Return 1 if JSON is a well-formed canonical JSON string according -** to RFC-7159. Return 0 otherwise. +** json_valid(JSON, FLAGS) +** +** Check the JSON argument to see if it is well-formed. The FLAGS argument +** encodes the various constraints on what is meant by "well-formed": +** +** 0x01 Canonical RFC-8259 JSON text +** 0x02 JSON text with optional JSON-5 extensions +** 0x04 Superficially appears to be JSONB +** 0x08 Strictly well-formed JSONB +** +** If the FLAGS argument is omitted, it defaults to 1. Useful values for +** FLAGS include: +** +** 1 Strict canonical JSON text +** 2 JSON text perhaps with JSON-5 extensions +** 4 Superficially appears to be JSONB +** 5 Canonical JSON text or superficial JSONB +** 6 JSON-5 text or superficial JSONB +** 8 Strict JSONB +** 9 Canonical JSON text or strict JSONB +** 10 JSON-5 text or strict JSONB +** +** Other flag combinations are redundant. For example, every canonical +** JSON text is also well-formed JSON-5 text, so FLAG values 2 and 3 +** are the same. Similarly, any input that passes a strict JSONB validation +** will also pass the superficial validation so 12 through 15 are the same +** as 8 through 11 respectively. +** +** This routine runs in linear time to validate text and when doing strict +** JSONB validation. Superficial JSONB validation is constant time, +** assuming the BLOB is already in memory. The performance advantage +** of superficial JSONB validation is why that option is provided. +** Application developers can choose to do fast superficial validation or +** slower strict validation, according to their specific needs. +** +** Only the lower four bits of the FLAGS argument are currently used. +** Higher bits are reserved for future expansion. To facilitate +** compatibility, the current implementation raises an error if any bit +** in FLAGS is set other than the lower four bits. +** +** The original circa 2015 implementation of the JSON routines in +** SQLite only supported canonical RFC-8259 JSON text and the json_valid() +** function only accepted one argument. That is why the default value +** for the FLAGS argument is 1, since FLAGS=1 causes this routine to only +** recognize canonical RFC-8259 JSON text as valid. The extra FLAGS +** argument was added when the JSON routines were extended to support +** JSON5-like extensions and binary JSONB stored in BLOBs. +** +** Return Values: +** +** * Raise an error if FLAGS is outside the range of 1 to 15. +** * Return NULL if the input is NULL +** * Return 1 if the input is well-formed. +** * Return 0 if the input is not well-formed. */ static void jsonValidFunc( sqlite3_context *ctx, @@ -204244,79 +209312,128 @@ static void jsonValidFunc( sqlite3_value **argv ){ JsonParse *p; /* The parse */ - UNUSED_PARAMETER(argc); - if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + u8 flags = 1; + u8 res = 0; + if( argc==2 ){ + i64 f = sqlite3_value_int64(argv[1]); + if( f<1 || f>15 ){ + sqlite3_result_error(ctx, "FLAGS parameter to json_valid() must be" + " between 1 and 15", -1); + return; + } + flags = f & 0x0f; + } + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_NULL: { #ifdef SQLITE_LEGACY_JSON_VALID - /* Incorrect legacy behavior was to return FALSE for a NULL input */ - sqlite3_result_int(ctx, 0); + /* Incorrect legacy behavior was to return FALSE for a NULL input */ + sqlite3_result_int(ctx, 0); #endif - return; - } - p = jsonParseCached(ctx, argv[0], 0, 0); - if( p==0 || p->oom ){ - sqlite3_result_error_nomem(ctx); - sqlite3_free(p); - }else{ - sqlite3_result_int(ctx, p->nErr==0 && (p->hasNonstd==0 || p->useMod)); - if( p->nErr ) jsonParseFree(p); + return; + } + case SQLITE_BLOB: { + if( jsonFuncArgMightBeBinary(argv[0]) ){ + if( flags & 0x04 ){ + /* Superficial checking only - accomplished by the + ** jsonFuncArgMightBeBinary() call above. */ + res = 1; + }else if( flags & 0x08 ){ + /* Strict checking. Check by translating BLOB->TEXT->BLOB. If + ** no errors occur, call that a "strict check". */ + JsonParse px; + u32 iErr; + memset(&px, 0, sizeof(px)); + px.aBlob = (u8*)sqlite3_value_blob(argv[0]); + px.nBlob = sqlite3_value_bytes(argv[0]); + iErr = jsonbValidityCheck(&px, 0, px.nBlob, 1); + res = iErr==0; + } + break; + } + /* Fall through into interpreting the input as text. See note + ** above at tag-20240123-a. */ + /* no break */ deliberate_fall_through + } + default: { + JsonParse px; + if( (flags & 0x3)==0 ) break; + memset(&px, 0, sizeof(px)); + + p = jsonParseFuncArg(ctx, argv[0], JSON_KEEPERROR); + if( p ){ + if( p->oom ){ + sqlite3_result_error_nomem(ctx); + }else if( p->nErr ){ + /* no-op */ + }else if( (flags & 0x02)!=0 || p->hasNonstd==0 ){ + res = 1; + } + jsonParseFree(p); + }else{ + sqlite3_result_error_nomem(ctx); + } + break; + } } + sqlite3_result_int(ctx, res); } /* ** json_error_position(JSON) ** -** If the argument is not an interpretable JSON string, then return the 1-based -** character position at which the parser first recognized that the input -** was in error. The left-most character is 1. If the string is valid -** JSON, then return 0. -** -** Note that json_valid() is only true for strictly conforming canonical JSON. -** But this routine returns zero if the input contains extension. Thus: -** -** (1) If the input X is strictly conforming canonical JSON: -** -** json_valid(X) returns true -** json_error_position(X) returns 0 +** If the argument is NULL, return NULL ** -** (2) If the input X is JSON but it includes extension (such as JSON5) that -** are not part of RFC-8259: +** If the argument is BLOB, do a full validity check and return non-zero +** if the check fails. The return value is the approximate 1-based offset +** to the byte of the element that contains the first error. ** -** json_valid(X) returns false -** json_error_position(X) return 0 -** -** (3) If the input X cannot be interpreted as JSON even taking extensions -** into account: -** -** json_valid(X) return false -** json_error_position(X) returns 1 or more +** Otherwise interpret the argument is TEXT (even if it is numeric) and +** return the 1-based character position for where the parser first recognized +** that the input was not valid JSON, or return 0 if the input text looks +** ok. JSON-5 extensions are accepted. */ static void jsonErrorFunc( sqlite3_context *ctx, int argc, sqlite3_value **argv ){ - JsonParse *p; /* The parse */ + i64 iErrPos = 0; /* Error position to be returned */ + JsonParse s; + + assert( argc==1 ); UNUSED_PARAMETER(argc); - if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - p = jsonParseCached(ctx, argv[0], 0, 0); - if( p==0 || p->oom ){ + memset(&s, 0, sizeof(s)); + s.db = sqlite3_context_db_handle(ctx); + if( jsonFuncArgMightBeBinary(argv[0]) ){ + s.aBlob = (u8*)sqlite3_value_blob(argv[0]); + s.nBlob = sqlite3_value_bytes(argv[0]); + iErrPos = (i64)jsonbValidityCheck(&s, 0, s.nBlob, 1); + }else{ + s.zJson = (char*)sqlite3_value_text(argv[0]); + if( s.zJson==0 ) return; /* NULL input or OOM */ + s.nJson = sqlite3_value_bytes(argv[0]); + if( jsonConvertTextToBlob(&s,0) ){ + if( s.oom ){ + iErrPos = -1; + }else{ + /* Convert byte-offset s.iErr into a character offset */ + u32 k; + assert( s.zJson!=0 ); /* Because s.oom is false */ + for(k=0; knErr==0 ){ - sqlite3_result_int(ctx, 0); }else{ - int n = 1; - u32 i; - const char *z = (const char*)sqlite3_value_text(argv[0]); - for(i=0; iiErr && ALWAYS(z[i]); i++){ - if( (z[i]&0xc0)!=0x80 ) n++; - } - sqlite3_result_int(ctx, n); - jsonParseFree(p); + sqlite3_result_int64(ctx, iErrPos); } } - /**************************************************************************** ** Aggregate SQL function implementations ****************************************************************************/ @@ -204335,32 +209452,42 @@ static void jsonArrayStep( pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr)); if( pStr ){ if( pStr->zBuf==0 ){ - jsonInit(pStr, ctx); + jsonStringInit(pStr, ctx); jsonAppendChar(pStr, '['); }else if( pStr->nUsed>1 ){ jsonAppendChar(pStr, ','); } pStr->pCtx = ctx; - jsonAppendValue(pStr, argv[0]); + jsonAppendSqlValue(pStr, argv[0]); } } static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){ JsonString *pStr; pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); if( pStr ){ + int flags; pStr->pCtx = ctx; jsonAppendChar(pStr, ']'); - if( pStr->bErr ){ - if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx); - assert( pStr->bStatic ); + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + if( pStr->eErr ){ + jsonReturnString(pStr, 0, 0); + return; + }else if( flags & JSON_BLOB ){ + jsonReturnStringAsBlob(pStr); + if( isFinal ){ + if( !pStr->bStatic ) sqlite3RCStrUnref(pStr->zBuf); + }else{ + jsonStringTrimOneChar(pStr); + } + return; }else if( isFinal ){ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, pStr->bStatic ? SQLITE_TRANSIENT : - (void(*)(void*))sqlite3RCStrUnref); + sqlite3RCStrUnref); pStr->bStatic = 1; }else{ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); - pStr->nUsed--; + jsonStringTrimOneChar(pStr); } }else{ sqlite3_result_text(ctx, "[]", 2, SQLITE_STATIC); @@ -204441,35 +209568,46 @@ static void jsonObjectStep( pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr)); if( pStr ){ if( pStr->zBuf==0 ){ - jsonInit(pStr, ctx); + jsonStringInit(pStr, ctx); jsonAppendChar(pStr, '{'); }else if( pStr->nUsed>1 ){ jsonAppendChar(pStr, ','); } pStr->pCtx = ctx; z = (const char*)sqlite3_value_text(argv[0]); - n = (u32)sqlite3_value_bytes(argv[0]); + n = sqlite3Strlen30(z); jsonAppendString(pStr, z, n); jsonAppendChar(pStr, ':'); - jsonAppendValue(pStr, argv[1]); + jsonAppendSqlValue(pStr, argv[1]); } } static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){ JsonString *pStr; pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); if( pStr ){ + int flags; jsonAppendChar(pStr, '}'); - if( pStr->bErr ){ - if( pStr->bErr==1 ) sqlite3_result_error_nomem(ctx); - assert( pStr->bStatic ); + pStr->pCtx = ctx; + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + if( pStr->eErr ){ + jsonReturnString(pStr, 0, 0); + return; + }else if( flags & JSON_BLOB ){ + jsonReturnStringAsBlob(pStr); + if( isFinal ){ + if( !pStr->bStatic ) sqlite3RCStrUnref(pStr->zBuf); + }else{ + jsonStringTrimOneChar(pStr); + } + return; }else if( isFinal ){ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, pStr->bStatic ? SQLITE_TRANSIENT : - (void(*)(void*))sqlite3RCStrUnref); + sqlite3RCStrUnref); pStr->bStatic = 1; }else{ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); - pStr->nUsed--; + jsonStringTrimOneChar(pStr); } }else{ sqlite3_result_text(ctx, "{}", 2, SQLITE_STATIC); @@ -204489,19 +209627,37 @@ static void jsonObjectFinal(sqlite3_context *ctx){ /**************************************************************************** ** The json_each virtual table ****************************************************************************/ +typedef struct JsonParent JsonParent; +struct JsonParent { + u32 iHead; /* Start of object or array */ + u32 iValue; /* Start of the value */ + u32 iEnd; /* First byte past the end */ + u32 nPath; /* Length of path */ + i64 iKey; /* Key for JSONB_ARRAY */ +}; + typedef struct JsonEachCursor JsonEachCursor; struct JsonEachCursor { sqlite3_vtab_cursor base; /* Base class - must be first */ u32 iRowid; /* The rowid */ - u32 iBegin; /* The first node of the scan */ - u32 i; /* Index in sParse.aNode[] of current row */ + u32 i; /* Index in sParse.aBlob[] of current row */ u32 iEnd; /* EOF when i equals or exceeds this value */ - u8 eType; /* Type of top-level element */ + u32 nRoot; /* Size of the root path in bytes */ + u8 eType; /* Type of the container for element i */ u8 bRecursive; /* True for json_tree(). False for json_each() */ - char *zJson; /* Input JSON */ - char *zRoot; /* Path by which to filter zJson */ + u32 nParent; /* Current nesting depth */ + u32 nParentAlloc; /* Space allocated for aParent[] */ + JsonParent *aParent; /* Parent elements of i */ + sqlite3 *db; /* Database connection */ + JsonString path; /* Current path */ JsonParse sParse; /* Parse of the input JSON */ }; +typedef struct JsonEachConnection JsonEachConnection; +struct JsonEachConnection { + sqlite3_vtab base; /* Base class - must be first */ + sqlite3 *db; /* Database connection */ +}; + /* Constructor for the json_each virtual table */ static int jsonEachConnect( @@ -204511,7 +209667,7 @@ static int jsonEachConnect( sqlite3_vtab **ppVtab, char **pzErr ){ - sqlite3_vtab *pNew; + JsonEachConnection *pNew; int rc; /* Column numbers */ @@ -204537,28 +209693,32 @@ static int jsonEachConnect( "CREATE TABLE x(key,value,type,atom,id,parent,fullkey,path," "json HIDDEN,root HIDDEN)"); if( rc==SQLITE_OK ){ - pNew = *ppVtab = sqlite3_malloc( sizeof(*pNew) ); + pNew = (JsonEachConnection*)sqlite3DbMallocZero(db, sizeof(*pNew)); + *ppVtab = (sqlite3_vtab*)pNew; if( pNew==0 ) return SQLITE_NOMEM; - memset(pNew, 0, sizeof(*pNew)); sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); + pNew->db = db; } return rc; } /* destructor for json_each virtual table */ static int jsonEachDisconnect(sqlite3_vtab *pVtab){ - sqlite3_free(pVtab); + JsonEachConnection *p = (JsonEachConnection*)pVtab; + sqlite3DbFree(p->db, pVtab); return SQLITE_OK; } /* constructor for a JsonEachCursor object for json_each(). */ static int jsonEachOpenEach(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + JsonEachConnection *pVtab = (JsonEachConnection*)p; JsonEachCursor *pCur; UNUSED_PARAMETER(p); - pCur = sqlite3_malloc( sizeof(*pCur) ); + pCur = sqlite3DbMallocZero(pVtab->db, sizeof(*pCur)); if( pCur==0 ) return SQLITE_NOMEM; - memset(pCur, 0, sizeof(*pCur)); + pCur->db = pVtab->db; + jsonStringZero(&pCur->path); *ppCursor = &pCur->base; return SQLITE_OK; } @@ -204576,21 +209736,24 @@ static int jsonEachOpenTree(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ /* Reset a JsonEachCursor back to its original state. Free any memory ** held. */ static void jsonEachCursorReset(JsonEachCursor *p){ - sqlite3_free(p->zRoot); jsonParseReset(&p->sParse); + jsonStringReset(&p->path); + sqlite3DbFree(p->db, p->aParent); p->iRowid = 0; p->i = 0; + p->aParent = 0; + p->nParent = 0; + p->nParentAlloc = 0; p->iEnd = 0; p->eType = 0; - p->zJson = 0; - p->zRoot = 0; } /* Destructor for a jsonEachCursor object */ static int jsonEachClose(sqlite3_vtab_cursor *cur){ JsonEachCursor *p = (JsonEachCursor*)cur; jsonEachCursorReset(p); - sqlite3_free(cur); + + sqlite3DbFree(p->db, cur); return SQLITE_OK; } @@ -204601,200 +209764,233 @@ static int jsonEachEof(sqlite3_vtab_cursor *cur){ return p->i >= p->iEnd; } -/* Advance the cursor to the next element for json_tree() */ -static int jsonEachNext(sqlite3_vtab_cursor *cur){ - JsonEachCursor *p = (JsonEachCursor*)cur; - if( p->bRecursive ){ - if( p->sParse.aNode[p->i].jnFlags & JNODE_LABEL ) p->i++; - p->i++; - p->iRowid++; - if( p->iiEnd ){ - u32 iUp = p->sParse.aUp[p->i]; - JsonNode *pUp = &p->sParse.aNode[iUp]; - p->eType = pUp->eType; - if( pUp->eType==JSON_ARRAY ){ - assert( pUp->eU==0 || pUp->eU==3 ); - testcase( pUp->eU==3 ); - VVA( pUp->eU = 3 ); - if( iUp==p->i-1 ){ - pUp->u.iKey = 0; - }else{ - pUp->u.iKey++; +/* +** If the cursor is currently pointing at the label of a object entry, +** then return the index of the value. For all other cases, return the +** current pointer position, which is the value. +*/ +static int jsonSkipLabel(JsonEachCursor *p){ + if( p->eType==JSONB_OBJECT ){ + u32 sz = 0; + u32 n = jsonbPayloadSize(&p->sParse, p->i, &sz); + return p->i + n + sz; + }else{ + return p->i; + } +} + +/* +** Append the path name for the current element. +*/ +static void jsonAppendPathName(JsonEachCursor *p){ + assert( p->nParent>0 ); + assert( p->eType==JSONB_ARRAY || p->eType==JSONB_OBJECT ); + if( p->eType==JSONB_ARRAY ){ + jsonPrintf(30, &p->path, "[%lld]", p->aParent[p->nParent-1].iKey); + }else{ + u32 n, sz = 0, k, i; + const char *z; + int needQuote = 0; + n = jsonbPayloadSize(&p->sParse, p->i, &sz); + k = p->i + n; + z = (const char*)&p->sParse.aBlob[k]; + if( sz==0 || !sqlite3Isalpha(z[0]) ){ + needQuote = 1; + }else{ + for(i=0; ieType ){ - case JSON_ARRAY: { - p->i += jsonNodeSize(&p->sParse.aNode[p->i]); - p->iRowid++; - break; - } - case JSON_OBJECT: { - p->i += 1 + jsonNodeSize(&p->sParse.aNode[p->i+1]); - p->iRowid++; - break; - } - default: { - p->i = p->iEnd; - break; - } + if( needQuote ){ + jsonPrintf(sz+4,&p->path,".\"%.*s\"", sz, z); + }else{ + jsonPrintf(sz+2,&p->path,".%.*s", sz, z); } } - return SQLITE_OK; } -/* Append an object label to the JSON Path being constructed -** in pStr. -*/ -static void jsonAppendObjectPathElement( - JsonString *pStr, - JsonNode *pNode -){ - int jj, nn; - const char *z; - assert( pNode->eType==JSON_STRING ); - assert( pNode->jnFlags & JNODE_LABEL ); - assert( pNode->eU==1 ); - z = pNode->u.zJContent; - nn = pNode->n; - if( (pNode->jnFlags & JNODE_RAW)==0 ){ - assert( nn>=2 ); - assert( z[0]=='"' || z[0]=='\'' ); - assert( z[nn-1]=='"' || z[0]=='\'' ); - if( nn>2 && sqlite3Isalpha(z[1]) ){ - for(jj=2; jjbRecursive ){ + u8 x; + u8 levelChange = 0; + u32 n, sz = 0; + u32 i = jsonSkipLabel(p); + x = p->sParse.aBlob[i] & 0x0f; + n = jsonbPayloadSize(&p->sParse, i, &sz); + if( x==JSONB_OBJECT || x==JSONB_ARRAY ){ + JsonParent *pParent; + if( p->nParent>=p->nParentAlloc ){ + JsonParent *pNew; + u64 nNew; + nNew = p->nParentAlloc*2 + 3; + pNew = sqlite3DbRealloc(p->db, p->aParent, sizeof(JsonParent)*nNew); + if( pNew==0 ) return SQLITE_NOMEM; + p->nParentAlloc = (u32)nNew; + p->aParent = pNew; + } + levelChange = 1; + pParent = &p->aParent[p->nParent]; + pParent->iHead = p->i; + pParent->iValue = i; + pParent->iEnd = i + n + sz; + pParent->iKey = -1; + pParent->nPath = (u32)p->path.nUsed; + if( p->eType && p->nParent ){ + jsonAppendPathName(p); + if( p->path.eErr ) rc = SQLITE_NOMEM; + } + p->nParent++; + p->i = i + n; + }else{ + p->i = i + n + sz; + } + while( p->nParent>0 && p->i >= p->aParent[p->nParent-1].iEnd ){ + p->nParent--; + p->path.nUsed = p->aParent[p->nParent].nPath; + levelChange = 1; + } + if( levelChange ){ + if( p->nParent>0 ){ + JsonParent *pParent = &p->aParent[p->nParent-1]; + u32 iVal = pParent->iValue; + p->eType = p->sParse.aBlob[iVal] & 0x0f; + }else{ + p->eType = 0; } } + }else{ + u32 n, sz = 0; + u32 i = jsonSkipLabel(p); + n = jsonbPayloadSize(&p->sParse, i, &sz); + p->i = i + n + sz; + } + if( p->eType==JSONB_ARRAY && p->nParent ){ + p->aParent[p->nParent-1].iKey++; } - jsonPrintf(nn+2, pStr, ".%.*s", nn, z); + p->iRowid++; + return rc; } -/* Append the name of the path for element i to pStr +/* Length of the path for rowid==0 in bRecursive mode. */ -static void jsonEachComputePath( - JsonEachCursor *p, /* The cursor */ - JsonString *pStr, /* Write the path here */ - u32 i /* Path to this element */ -){ - JsonNode *pNode, *pUp; - u32 iUp; - if( i==0 ){ - jsonAppendChar(pStr, '$'); - return; - } - iUp = p->sParse.aUp[i]; - jsonEachComputePath(p, pStr, iUp); - pNode = &p->sParse.aNode[i]; - pUp = &p->sParse.aNode[iUp]; - if( pUp->eType==JSON_ARRAY ){ - assert( pUp->eU==3 || (pUp->eU==0 && pUp->u.iKey==0) ); - testcase( pUp->eU==0 ); - jsonPrintf(30, pStr, "[%d]", pUp->u.iKey); - }else{ - assert( pUp->eType==JSON_OBJECT ); - if( (pNode->jnFlags & JNODE_LABEL)==0 ) pNode--; - jsonAppendObjectPathElement(pStr, pNode); +static int jsonEachPathLength(JsonEachCursor *p){ + u32 n = p->path.nUsed; + char *z = p->path.zBuf; + if( p->iRowid==0 && p->bRecursive && n>=2 ){ + while( n>1 ){ + n--; + if( z[n]=='[' || z[n]=='.' ){ + u32 x, sz = 0; + char cSaved = z[n]; + z[n] = 0; + assert( p->sParse.eEdit==0 ); + x = jsonLookupStep(&p->sParse, 0, z+1, 0); + z[n] = cSaved; + if( JSON_LOOKUP_ISERROR(x) ) continue; + if( x + jsonbPayloadSize(&p->sParse, x, &sz) == p->i ) break; + } + } } + return n; } /* Return the value of a column */ static int jsonEachColumn( sqlite3_vtab_cursor *cur, /* The cursor */ sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ - int i /* Which column to return */ + int iColumn /* Which column to return */ ){ JsonEachCursor *p = (JsonEachCursor*)cur; - JsonNode *pThis = &p->sParse.aNode[p->i]; - switch( i ){ + switch( iColumn ){ case JEACH_KEY: { - if( p->i==0 ) break; - if( p->eType==JSON_OBJECT ){ - jsonReturn(&p->sParse, pThis, ctx); - }else if( p->eType==JSON_ARRAY ){ - u32 iKey; - if( p->bRecursive ){ - if( p->iRowid==0 ) break; - assert( p->sParse.aNode[p->sParse.aUp[p->i]].eU==3 ); - iKey = p->sParse.aNode[p->sParse.aUp[p->i]].u.iKey; + if( p->nParent==0 ){ + u32 n, j; + if( p->nRoot==1 ) break; + j = jsonEachPathLength(p); + n = p->nRoot - j; + if( n==0 ){ + break; + }else if( p->path.zBuf[j]=='[' ){ + i64 x; + sqlite3Atoi64(&p->path.zBuf[j+1], &x, n-1, SQLITE_UTF8); + sqlite3_result_int64(ctx, x); + }else if( p->path.zBuf[j+1]=='"' ){ + sqlite3_result_text(ctx, &p->path.zBuf[j+2], n-3, SQLITE_TRANSIENT); }else{ - iKey = p->iRowid; + sqlite3_result_text(ctx, &p->path.zBuf[j+1], n-1, SQLITE_TRANSIENT); } - sqlite3_result_int64(ctx, (sqlite3_int64)iKey); + break; + } + if( p->eType==JSONB_OBJECT ){ + jsonReturnFromBlob(&p->sParse, p->i, ctx, 1); + }else{ + assert( p->eType==JSONB_ARRAY ); + sqlite3_result_int64(ctx, p->aParent[p->nParent-1].iKey); } break; } case JEACH_VALUE: { - if( pThis->jnFlags & JNODE_LABEL ) pThis++; - jsonReturn(&p->sParse, pThis, ctx); + u32 i = jsonSkipLabel(p); + jsonReturnFromBlob(&p->sParse, i, ctx, 1); + if( (p->sParse.aBlob[i] & 0x0f)>=JSONB_ARRAY ){ + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } break; } case JEACH_TYPE: { - if( pThis->jnFlags & JNODE_LABEL ) pThis++; - sqlite3_result_text(ctx, jsonType[pThis->eType], -1, SQLITE_STATIC); + u32 i = jsonSkipLabel(p); + u8 eType = p->sParse.aBlob[i] & 0x0f; + sqlite3_result_text(ctx, jsonbType[eType], -1, SQLITE_STATIC); break; } case JEACH_ATOM: { - if( pThis->jnFlags & JNODE_LABEL ) pThis++; - if( pThis->eType>=JSON_ARRAY ) break; - jsonReturn(&p->sParse, pThis, ctx); + u32 i = jsonSkipLabel(p); + if( (p->sParse.aBlob[i] & 0x0f)sParse, i, ctx, 1); + } break; } case JEACH_ID: { - sqlite3_result_int64(ctx, - (sqlite3_int64)p->i + ((pThis->jnFlags & JNODE_LABEL)!=0)); + sqlite3_result_int64(ctx, (sqlite3_int64)p->i); break; } case JEACH_PARENT: { - if( p->i>p->iBegin && p->bRecursive ){ - sqlite3_result_int64(ctx, (sqlite3_int64)p->sParse.aUp[p->i]); + if( p->nParent>0 && p->bRecursive ){ + sqlite3_result_int64(ctx, p->aParent[p->nParent-1].iHead); } break; } case JEACH_FULLKEY: { - JsonString x; - jsonInit(&x, ctx); - if( p->bRecursive ){ - jsonEachComputePath(p, &x, p->i); - }else{ - if( p->zRoot ){ - jsonAppendRaw(&x, p->zRoot, (int)strlen(p->zRoot)); - }else{ - jsonAppendChar(&x, '$'); - } - if( p->eType==JSON_ARRAY ){ - jsonPrintf(30, &x, "[%d]", p->iRowid); - }else if( p->eType==JSON_OBJECT ){ - jsonAppendObjectPathElement(&x, pThis); - } - } - jsonResult(&x); + u64 nBase = p->path.nUsed; + if( p->nParent ) jsonAppendPathName(p); + sqlite3_result_text64(ctx, p->path.zBuf, p->path.nUsed, + SQLITE_TRANSIENT, SQLITE_UTF8); + p->path.nUsed = nBase; break; } case JEACH_PATH: { - if( p->bRecursive ){ - JsonString x; - jsonInit(&x, ctx); - jsonEachComputePath(p, &x, p->sParse.aUp[p->i]); - jsonResult(&x); - break; - } - /* For json_each() path and root are the same so fall through - ** into the root case */ - /* no break */ deliberate_fall_through + u32 n = jsonEachPathLength(p); + sqlite3_result_text64(ctx, p->path.zBuf, n, + SQLITE_TRANSIENT, SQLITE_UTF8); + break; } default: { - const char *zRoot = p->zRoot; - if( zRoot==0 ) zRoot = "$"; - sqlite3_result_text(ctx, zRoot, -1, SQLITE_STATIC); + sqlite3_result_text(ctx, p->path.zBuf, p->nRoot, SQLITE_STATIC); break; } case JEACH_JSON: { - assert( i==JEACH_JSON ); - sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_STATIC); + if( p->sParse.zJson==0 ){ + sqlite3_result_blob(ctx, p->sParse.aBlob, p->sParse.nBlob, + SQLITE_TRANSIENT); + }else{ + sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_TRANSIENT); + } break; } } @@ -204885,86 +210081,97 @@ static int jsonEachFilter( int argc, sqlite3_value **argv ){ JsonEachCursor *p = (JsonEachCursor*)cur; - const char *z; const char *zRoot = 0; - sqlite3_int64 n; + u32 i, n, sz; UNUSED_PARAMETER(idxStr); UNUSED_PARAMETER(argc); jsonEachCursorReset(p); if( idxNum==0 ) return SQLITE_OK; - z = (const char*)sqlite3_value_text(argv[0]); - if( z==0 ) return SQLITE_OK; memset(&p->sParse, 0, sizeof(p->sParse)); p->sParse.nJPRef = 1; - if( sqlite3ValueIsOfClass(argv[0], (void(*)(void*))sqlite3RCStrUnref) ){ - p->sParse.zJson = sqlite3RCStrRef((char*)z); - }else{ - n = sqlite3_value_bytes(argv[0]); - p->sParse.zJson = sqlite3RCStrNew( n+1 ); - if( p->sParse.zJson==0 ) return SQLITE_NOMEM; - memcpy(p->sParse.zJson, z, (size_t)n+1); - } - p->sParse.bJsonIsRCStr = 1; - p->zJson = p->sParse.zJson; - if( jsonParse(&p->sParse, 0) ){ - int rc = SQLITE_NOMEM; - if( p->sParse.oom==0 ){ - sqlite3_free(cur->pVtab->zErrMsg); - cur->pVtab->zErrMsg = sqlite3_mprintf("malformed JSON"); - if( cur->pVtab->zErrMsg ) rc = SQLITE_ERROR; + p->sParse.db = p->db; + if( jsonFuncArgMightBeBinary(argv[0]) ){ + p->sParse.nBlob = sqlite3_value_bytes(argv[0]); + p->sParse.aBlob = (u8*)sqlite3_value_blob(argv[0]); + }else{ + p->sParse.zJson = (char*)sqlite3_value_text(argv[0]); + p->sParse.nJson = sqlite3_value_bytes(argv[0]); + if( p->sParse.zJson==0 ){ + p->i = p->iEnd = 0; + return SQLITE_OK; } - jsonEachCursorReset(p); - return rc; - }else if( p->bRecursive && jsonParseFindParents(&p->sParse) ){ - jsonEachCursorReset(p); - return SQLITE_NOMEM; - }else{ - JsonNode *pNode = 0; - if( idxNum==3 ){ - const char *zErr = 0; - zRoot = (const char*)sqlite3_value_text(argv[1]); - if( zRoot==0 ) return SQLITE_OK; - n = sqlite3_value_bytes(argv[1]); - p->zRoot = sqlite3_malloc64( n+1 ); - if( p->zRoot==0 ) return SQLITE_NOMEM; - memcpy(p->zRoot, zRoot, (size_t)n+1); - if( zRoot[0]!='$' ){ - zErr = zRoot; - }else{ - pNode = jsonLookupStep(&p->sParse, 0, p->zRoot+1, 0, &zErr); + if( jsonConvertTextToBlob(&p->sParse, 0) ){ + if( p->sParse.oom ){ + return SQLITE_NOMEM; } - if( zErr ){ + goto json_each_malformed_input; + } + } + if( idxNum==3 ){ + zRoot = (const char*)sqlite3_value_text(argv[1]); + if( zRoot==0 ) return SQLITE_OK; + if( zRoot[0]!='$' ){ + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = jsonBadPathError(0, zRoot); + jsonEachCursorReset(p); + return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; + } + p->nRoot = sqlite3Strlen30(zRoot); + if( zRoot[1]==0 ){ + i = p->i = 0; + p->eType = 0; + }else{ + i = jsonLookupStep(&p->sParse, 0, zRoot+1, 0); + if( JSON_LOOKUP_ISERROR(i) ){ + if( i==JSON_LOOKUP_NOTFOUND ){ + p->i = 0; + p->eType = 0; + p->iEnd = 0; + return SQLITE_OK; + } sqlite3_free(cur->pVtab->zErrMsg); - cur->pVtab->zErrMsg = jsonPathSyntaxError(zErr); + cur->pVtab->zErrMsg = jsonBadPathError(0, zRoot); jsonEachCursorReset(p); return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; - }else if( pNode==0 ){ - return SQLITE_OK; } - }else{ - pNode = p->sParse.aNode; - } - p->iBegin = p->i = (int)(pNode - p->sParse.aNode); - p->eType = pNode->eType; - if( p->eType>=JSON_ARRAY ){ - assert( pNode->eU==0 ); - VVA( pNode->eU = 3 ); - pNode->u.iKey = 0; - p->iEnd = p->i + pNode->n + 1; - if( p->bRecursive ){ - p->eType = p->sParse.aNode[p->sParse.aUp[p->i]].eType; - if( p->i>0 && (p->sParse.aNode[p->i-1].jnFlags & JNODE_LABEL)!=0 ){ - p->i--; - } + if( p->sParse.iLabel ){ + p->i = p->sParse.iLabel; + p->eType = JSONB_OBJECT; }else{ - p->i++; - } - }else{ - p->iEnd = p->i+1; - } + p->i = i; + p->eType = JSONB_ARRAY; + } + } + jsonAppendRaw(&p->path, zRoot, p->nRoot); + }else{ + i = p->i = 0; + p->eType = 0; + p->nRoot = 1; + jsonAppendRaw(&p->path, "$", 1); + } + p->nParent = 0; + n = jsonbPayloadSize(&p->sParse, i, &sz); + p->iEnd = i+n+sz; + if( (p->sParse.aBlob[i] & 0x0f)>=JSONB_ARRAY && !p->bRecursive ){ + p->i = i + n; + p->eType = p->sParse.aBlob[i] & 0x0f; + p->aParent = sqlite3DbMallocZero(p->db, sizeof(JsonParent)); + if( p->aParent==0 ) return SQLITE_NOMEM; + p->nParent = 1; + p->nParentAlloc = 1; + p->aParent[0].iKey = 0; + p->aParent[0].iEnd = p->iEnd; + p->aParent[0].iHead = p->i; + p->aParent[0].iValue = i; } return SQLITE_OK; + +json_each_malformed_input: + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = sqlite3_mprintf("malformed JSON"); + jsonEachCursorReset(p); + return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; } /* The methods of the json_each virtual table */ @@ -204992,7 +210199,8 @@ static sqlite3_module jsonEachModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; /* The methods of the json_tree virtual table. */ @@ -205020,7 +210228,8 @@ static sqlite3_module jsonTreeModule = { 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ #endif /* !defined(SQLITE_OMIT_JSON) */ @@ -205031,34 +210240,59 @@ static sqlite3_module jsonTreeModule = { SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){ #ifndef SQLITE_OMIT_JSON static FuncDef aJsonFunc[] = { - JFUNCTION(json, 1, 0, jsonRemoveFunc), - JFUNCTION(json_array, -1, 0, jsonArrayFunc), - JFUNCTION(json_array_length, 1, 0, jsonArrayLengthFunc), - JFUNCTION(json_array_length, 2, 0, jsonArrayLengthFunc), - JFUNCTION(json_error_position,1, 0, jsonErrorFunc), - JFUNCTION(json_extract, -1, 0, jsonExtractFunc), - JFUNCTION(->, 2, JSON_JSON, jsonExtractFunc), - JFUNCTION(->>, 2, JSON_SQL, jsonExtractFunc), - JFUNCTION(json_insert, -1, 0, jsonSetFunc), - JFUNCTION(json_object, -1, 0, jsonObjectFunc), - JFUNCTION(json_patch, 2, 0, jsonPatchFunc), - JFUNCTION(json_quote, 1, 0, jsonQuoteFunc), - JFUNCTION(json_remove, -1, 0, jsonRemoveFunc), - JFUNCTION(json_replace, -1, 0, jsonReplaceFunc), - JFUNCTION(json_set, -1, JSON_ISSET, jsonSetFunc), - JFUNCTION(json_type, 1, 0, jsonTypeFunc), - JFUNCTION(json_type, 2, 0, jsonTypeFunc), - JFUNCTION(json_valid, 1, 0, jsonValidFunc), + /* sqlite3_result_subtype() ----, ,--- sqlite3_value_subtype() */ + /* | | */ + /* Uses cache ------, | | ,---- Returns JSONB */ + /* | | | | */ + /* Number of arguments ---, | | | | ,--- Flags */ + /* | | | | | | */ + JFUNCTION(json, 1,1,1, 0,0,0, jsonRemoveFunc), + JFUNCTION(jsonb, 1,1,0, 0,1,0, jsonRemoveFunc), + JFUNCTION(json_array, -1,0,1, 1,0,0, jsonArrayFunc), + JFUNCTION(jsonb_array, -1,0,1, 1,1,0, jsonArrayFunc), + JFUNCTION(json_array_length, 1,1,0, 0,0,0, jsonArrayLengthFunc), + JFUNCTION(json_array_length, 2,1,0, 0,0,0, jsonArrayLengthFunc), + JFUNCTION(json_error_position,1,1,0, 0,0,0, jsonErrorFunc), + JFUNCTION(json_extract, -1,1,1, 0,0,0, jsonExtractFunc), + JFUNCTION(jsonb_extract, -1,1,0, 0,1,0, jsonExtractFunc), + JFUNCTION(->, 2,1,1, 0,0,JSON_JSON, jsonExtractFunc), + JFUNCTION(->>, 2,1,0, 0,0,JSON_SQL, jsonExtractFunc), + JFUNCTION(json_insert, -1,1,1, 1,0,0, jsonSetFunc), + JFUNCTION(jsonb_insert, -1,1,0, 1,1,0, jsonSetFunc), + JFUNCTION(json_object, -1,0,1, 1,0,0, jsonObjectFunc), + JFUNCTION(jsonb_object, -1,0,1, 1,1,0, jsonObjectFunc), + JFUNCTION(json_patch, 2,1,1, 0,0,0, jsonPatchFunc), + JFUNCTION(jsonb_patch, 2,1,0, 0,1,0, jsonPatchFunc), + JFUNCTION(json_pretty, 1,1,0, 0,0,0, jsonPrettyFunc), + JFUNCTION(json_pretty, 2,1,0, 0,0,0, jsonPrettyFunc), + JFUNCTION(json_quote, 1,0,1, 1,0,0, jsonQuoteFunc), + JFUNCTION(json_remove, -1,1,1, 0,0,0, jsonRemoveFunc), + JFUNCTION(jsonb_remove, -1,1,0, 0,1,0, jsonRemoveFunc), + JFUNCTION(json_replace, -1,1,1, 1,0,0, jsonReplaceFunc), + JFUNCTION(jsonb_replace, -1,1,0, 1,1,0, jsonReplaceFunc), + JFUNCTION(json_set, -1,1,1, 1,0,JSON_ISSET, jsonSetFunc), + JFUNCTION(jsonb_set, -1,1,0, 1,1,JSON_ISSET, jsonSetFunc), + JFUNCTION(json_type, 1,1,0, 0,0,0, jsonTypeFunc), + JFUNCTION(json_type, 2,1,0, 0,0,0, jsonTypeFunc), + JFUNCTION(json_valid, 1,1,0, 0,0,0, jsonValidFunc), + JFUNCTION(json_valid, 2,1,0, 0,0,0, jsonValidFunc), #if SQLITE_DEBUG - JFUNCTION(json_parse, 1, 0, jsonParseFunc), - JFUNCTION(json_test1, 1, 0, jsonTest1Func), + JFUNCTION(json_parse, 1,1,0, 0,0,0, jsonParseFunc), #endif WAGGREGATE(json_group_array, 1, 0, 0, jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse, - SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC), + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8| + SQLITE_DETERMINISTIC), + WAGGREGATE(jsonb_group_array, 1, JSON_BLOB, 0, + jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse, + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC), WAGGREGATE(json_group_object, 2, 0, 0, jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse, - SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC) + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC), + WAGGREGATE(jsonb_group_object,2, JSON_BLOB, 0, + jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse, + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8| + SQLITE_DETERMINISTIC) }; sqlite3InsertBuiltinFuncs(aJsonFunc, ArraySize(aJsonFunc)); #endif @@ -205255,6 +210489,7 @@ struct Rtree { int iDepth; /* Current depth of the r-tree structure */ char *zDb; /* Name of database containing r-tree table */ char *zName; /* Name of r-tree table */ + char *zNodeName; /* Name of the %_node table */ u32 nBusy; /* Current number of users of this structure */ i64 nRowEst; /* Estimated number of rows in this table */ u32 nCursor; /* Number of open cursors */ @@ -205267,7 +210502,6 @@ struct Rtree { ** headed by the node (leaf nodes have RtreeNode.iNode==0). */ RtreeNode *pDeleted; - int iReinsertHeight; /* Height of sub-trees Reinsert() has run on */ /* Blob I/O on xxx_node */ sqlite3_blob *pNodeBlob; @@ -205564,15 +210798,20 @@ struct RtreeMatchArg { ** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined ** at run-time. */ -#ifndef SQLITE_BYTEORDER -# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ +#ifndef SQLITE_BYTEORDER /* Replicate changes at tag-20230904a */ +# if defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ +# define SQLITE_BYTEORDER 4321 +# elif defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define SQLITE_BYTEORDER 1234 +# elif defined(__BIG_ENDIAN__) && __BIG_ENDIAN__==1 +# define SQLITE_BYTEORDER 4321 +# elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ defined(__ARMEL__) || defined(__AARCH64EL__) || defined(_M_ARM64) -# define SQLITE_BYTEORDER 1234 -# elif defined(sparc) || defined(__ppc__) || \ - defined(__ARMEB__) || defined(__AARCH64EB__) -# define SQLITE_BYTEORDER 4321 +# define SQLITE_BYTEORDER 1234 +# elif defined(sparc) || defined(__ARMEB__) || defined(__AARCH64EB__) +# define SQLITE_BYTEORDER 4321 # else # define SQLITE_BYTEORDER 0 # endif @@ -205778,11 +211017,9 @@ static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ ** Clear the Rtree.pNodeBlob object */ static void nodeBlobReset(Rtree *pRtree){ - if( pRtree->pNodeBlob && pRtree->inWrTrans==0 && pRtree->nCursor==0 ){ - sqlite3_blob *pBlob = pRtree->pNodeBlob; - pRtree->pNodeBlob = 0; - sqlite3_blob_close(pBlob); - } + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + sqlite3_blob_close(pBlob); } /* @@ -205801,7 +211038,7 @@ static int nodeAcquire( ** increase its reference count and return it. */ if( (pNode = nodeHashLookup(pRtree, iNode))!=0 ){ - if( pParent && pParent!=pNode->pParent ){ + if( pParent && ALWAYS(pParent!=pNode->pParent) ){ RTREE_IS_CORRUPT(pRtree); return SQLITE_CORRUPT_VTAB; } @@ -205821,14 +211058,11 @@ static int nodeAcquire( } } if( pRtree->pNodeBlob==0 ){ - char *zTab = sqlite3_mprintf("%s_node", pRtree->zName); - if( zTab==0 ) return SQLITE_NOMEM; - rc = sqlite3_blob_open(pRtree->db, pRtree->zDb, zTab, "data", iNode, 0, + rc = sqlite3_blob_open(pRtree->db, pRtree->zDb, pRtree->zNodeName, + "data", iNode, 0, &pRtree->pNodeBlob); - sqlite3_free(zTab); } if( rc ){ - nodeBlobReset(pRtree); *ppNode = 0; /* If unable to open an sqlite3_blob on the desired row, that can only ** be because the shadow tables hold erroneous data. */ @@ -205888,6 +211122,7 @@ static int nodeAcquire( } *ppNode = pNode; }else{ + nodeBlobReset(pRtree); if( pNode ){ pRtree->nNodeRef--; sqlite3_free(pNode); @@ -206032,6 +211267,7 @@ static void nodeGetCoord( int iCoord, /* Which coordinate to extract */ RtreeCoord *pCoord /* OUT: Space to write result to */ ){ + assert( iCellzData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord); } @@ -206221,7 +211457,9 @@ static int rtreeClose(sqlite3_vtab_cursor *cur){ sqlite3_finalize(pCsr->pReadAux); sqlite3_free(pCsr); pRtree->nCursor--; - nodeBlobReset(pRtree); + if( pRtree->nCursor==0 && pRtree->inWrTrans==0 ){ + nodeBlobReset(pRtree); + } return SQLITE_OK; } @@ -206806,7 +212044,11 @@ static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){ int rc = SQLITE_OK; RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); if( rc==SQLITE_OK && ALWAYS(p) ){ - *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell); + if( p->iCell>=NCELL(pNode) ){ + rc = SQLITE_ABORT; + }else{ + *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell); + } } return rc; } @@ -206824,6 +212066,7 @@ static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ if( rc ) return rc; if( NEVER(p==0) ) return SQLITE_OK; + if( p->iCell>=NCELL(pNode) ) return SQLITE_ABORT; if( i==0 ){ sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell)); }else if( i<=pRtree->nDim2 ){ @@ -206921,6 +212164,8 @@ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){ return SQLITE_OK; } +SQLITE_PRIVATE int sqlite3IntFloatCompare(i64,double); + /* ** Rtree virtual table module xFilter method. */ @@ -206950,7 +212195,8 @@ static int rtreeFilter( i64 iNode = 0; int eType = sqlite3_value_numeric_type(argv[0]); if( eType==SQLITE_INTEGER - || (eType==SQLITE_FLOAT && sqlite3_value_double(argv[0])==iRowid) + || (eType==SQLITE_FLOAT + && 0==sqlite3IntFloatCompare(iRowid,sqlite3_value_double(argv[0]))) ){ rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); }else{ @@ -207166,8 +212412,12 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ pIdxInfo->idxNum = 2; pIdxInfo->needToFreeIdxStr = 1; - if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){ - return SQLITE_NOMEM; + if( iIdx>0 ){ + pIdxInfo->idxStr = sqlite3_malloc( iIdx+1 ); + if( pIdxInfo->idxStr==0 ){ + return SQLITE_NOMEM; + } + memcpy(pIdxInfo->idxStr, zIdxStr, iIdx+1); } nRow = pRtree->nRowEst >> (iIdx/2); @@ -207246,31 +212496,22 @@ static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ */ static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ int ii; - int isInt = (pRtree->eCoordType==RTREE_COORD_INT32); - for(ii=0; iinDim2; ii+=2){ - RtreeCoord *a1 = &p1->aCoord[ii]; - RtreeCoord *a2 = &p2->aCoord[ii]; - if( (!isInt && (a2[0].fa1[1].f)) - || ( isInt && (a2[0].ia1[1].i)) - ){ - return 0; + if( pRtree->eCoordType==RTREE_COORD_INT32 ){ + for(ii=0; iinDim2; ii+=2){ + RtreeCoord *a1 = &p1->aCoord[ii]; + RtreeCoord *a2 = &p2->aCoord[ii]; + if( a2[0].ia1[1].i ) return 0; + } + }else{ + for(ii=0; iinDim2; ii+=2){ + RtreeCoord *a1 = &p1->aCoord[ii]; + RtreeCoord *a2 = &p2->aCoord[ii]; + if( a2[0].fa1[1].f ) return 0; } } return 1; } -/* -** Return the amount cell p would grow by if it were unioned with pCell. -*/ -static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){ - RtreeDValue area; - RtreeCell cell; - memcpy(&cell, p, sizeof(RtreeCell)); - area = cellArea(pRtree, &cell); - cellUnion(pRtree, &cell, pCell); - return (cellArea(pRtree, &cell)-area); -} - static RtreeDValue cellOverlap( Rtree *pRtree, RtreeCell *p, @@ -207317,38 +212558,52 @@ static int ChooseLeaf( for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){ int iCell; sqlite3_int64 iBest = 0; - + int bFound = 0; RtreeDValue fMinGrowth = RTREE_ZERO; RtreeDValue fMinArea = RTREE_ZERO; - int nCell = NCELL(pNode); - RtreeCell cell; RtreeNode *pChild = 0; - RtreeCell *aCell = 0; - - /* Select the child node which will be enlarged the least if pCell - ** is inserted into it. Resolve ties by choosing the entry with - ** the smallest area. + /* First check to see if there is are any cells in pNode that completely + ** contains pCell. If two or more cells in pNode completely contain pCell + ** then pick the smallest. */ for(iCell=0; iCell1 ){ - int iLeft = 0; - int iRight = 0; - - int nLeft = nIdx/2; - int nRight = nIdx-nLeft; - int *aLeft = aIdx; - int *aRight = &aIdx[nLeft]; - - SortByDistance(aLeft, nLeft, aDistance, aSpare); - SortByDistance(aRight, nRight, aDistance, aSpare); - - memcpy(aSpare, aLeft, sizeof(int)*nLeft); - aLeft = aSpare; - - while( iLeftnDim; iDim++){ - aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2]); - aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2+1]); - } - } - for(iDim=0; iDimnDim; iDim++){ - aCenterCoord[iDim] = (aCenterCoord[iDim]/(nCell*(RtreeDValue)2)); - } - - for(ii=0; iinDim; iDim++){ - RtreeDValue coord = (DCOORD(aCell[ii].aCoord[iDim*2+1]) - - DCOORD(aCell[ii].aCoord[iDim*2])); - aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]); - } - } - - SortByDistance(aOrder, nCell, aDistance, aSpare); - nodeZero(pRtree, pNode); - - for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){ - RtreeCell *p = &aCell[aOrder[ii]]; - nodeInsertCell(pRtree, pNode, p); - if( p->iRowid==pCell->iRowid ){ - if( iHeight==0 ){ - rc = rowidWrite(pRtree, p->iRowid, pNode->iNode); - }else{ - rc = parentWrite(pRtree, p->iRowid, pNode->iNode); - } - } - } - if( rc==SQLITE_OK ){ - rc = fixBoundingBox(pRtree, pNode); - } - for(; rc==SQLITE_OK && iiiNode currently contains - ** the height of the sub-tree headed by the cell. - */ - RtreeNode *pInsert; - RtreeCell *p = &aCell[aOrder[ii]]; - rc = ChooseLeaf(pRtree, p, iHeight, &pInsert); - if( rc==SQLITE_OK ){ - int rc2; - rc = rtreeInsertCell(pRtree, pInsert, p, iHeight); - rc2 = nodeRelease(pRtree, pInsert); - if( rc==SQLITE_OK ){ - rc = rc2; - } - } - } - - sqlite3_free(aCell); - return rc; -} - /* ** Insert cell pCell into node pNode. Node pNode is the head of a ** subtree iHeight high (leaf nodes have iHeight==0). @@ -208097,12 +213180,7 @@ static int rtreeInsertCell( } } if( nodeInsertCell(pRtree, pNode, pCell) ){ - if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){ - rc = SplitNode(pRtree, pNode, pCell, iHeight); - }else{ - pRtree->iReinsertHeight = iHeight; - rc = Reinsert(pRtree, pNode, pCell, iHeight); - } + rc = SplitNode(pRtree, pNode, pCell, iHeight); }else{ rc = AdjustTree(pRtree, pNode, pCell); if( ALWAYS(rc==SQLITE_OK) ){ @@ -208445,7 +213523,6 @@ static int rtreeUpdate( } if( rc==SQLITE_OK ){ int rc2; - pRtree->iReinsertHeight = -1; rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); rc2 = nodeRelease(pRtree, pLeaf); if( rc==SQLITE_OK ){ @@ -208475,7 +213552,7 @@ static int rtreeUpdate( static int rtreeBeginTransaction(sqlite3_vtab *pVtab){ Rtree *pRtree = (Rtree *)pVtab; assert( pRtree->inWrTrans==0 ); - pRtree->inWrTrans++; + pRtree->inWrTrans = 1; return SQLITE_OK; } @@ -208489,6 +213566,9 @@ static int rtreeEndTransaction(sqlite3_vtab *pVtab){ nodeBlobReset(pRtree); return SQLITE_OK; } +static int rtreeRollback(sqlite3_vtab *pVtab){ + return rtreeEndTransaction(pVtab); +} /* ** The xRename method for rtree module virtual tables. @@ -208586,8 +213666,11 @@ static int rtreeShadowName(const char *zName){ return 0; } +/* Forward declaration */ +static int rtreeIntegrity(sqlite3_vtab*, const char*, const char*, int, char**); + static sqlite3_module rtreeModule = { - 3, /* iVersion */ + 4, /* iVersion */ rtreeCreate, /* xCreate - create a table */ rtreeConnect, /* xConnect - connect to an existing table */ rtreeBestIndex, /* xBestIndex - Determine search strategy */ @@ -208604,13 +213687,14 @@ static sqlite3_module rtreeModule = { rtreeBeginTransaction, /* xBegin - begin transaction */ rtreeEndTransaction, /* xSync - sync transaction */ rtreeEndTransaction, /* xCommit - commit transaction */ - rtreeEndTransaction, /* xRollback - rollback transaction */ + rtreeRollback, /* xRollback - rollback transaction */ 0, /* xFindFunction - function overloading */ rtreeRename, /* xRename - rename the table */ rtreeSavepoint, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - rtreeShadowName /* xShadowName */ + rtreeShadowName, /* xShadowName */ + rtreeIntegrity /* xIntegrity */ }; static int rtreeSqlInit( @@ -208703,7 +213787,7 @@ static int rtreeSqlInit( } sqlite3_free(zSql); } - if( pRtree->nAux ){ + if( pRtree->nAux && rc!=SQLITE_NOMEM ){ pRtree->zReadAuxSql = sqlite3_mprintf( "SELECT * FROM \"%w\".\"%w_rowid\" WHERE rowid=?1", zDb, zPrefix); @@ -208866,22 +213950,27 @@ static int rtreeInit( } sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); + /* Allocate the sqlite3_vtab structure */ nDb = (int)strlen(argv[1]); nName = (int)strlen(argv[2]); - pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName+2); + pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName*2+8); if( !pRtree ){ return SQLITE_NOMEM; } - memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); + memset(pRtree, 0, sizeof(Rtree)+nDb+nName*2+8); pRtree->nBusy = 1; pRtree->base.pModule = &rtreeModule; pRtree->zDb = (char *)&pRtree[1]; pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->zNodeName = &pRtree->zName[nName+1]; pRtree->eCoordType = (u8)eCoordType; memcpy(pRtree->zDb, argv[1], nDb); memcpy(pRtree->zName, argv[2], nName); + memcpy(pRtree->zNodeName, argv[2], nName); + memcpy(&pRtree->zNodeName[nName], "_node", 6); /* Create/Connect to the underlying relational database schema. If @@ -209378,7 +214467,6 @@ static int rtreeCheckTable( ){ RtreeCheck check; /* Common context for various routines */ sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */ - int bEnd = 0; /* True if transaction should be closed */ int nAux = 0; /* Number of extra columns. */ /* Initialize the context object */ @@ -209387,24 +214475,14 @@ static int rtreeCheckTable( check.zDb = zDb; check.zTab = zTab; - /* If there is not already an open transaction, open one now. This is - ** to ensure that the queries run as part of this integrity-check operate - ** on a consistent snapshot. */ - if( sqlite3_get_autocommit(db) ){ - check.rc = sqlite3_exec(db, "BEGIN", 0, 0, 0); - bEnd = 1; - } - /* Find the number of auxiliary columns */ - if( check.rc==SQLITE_OK ){ - pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab); - if( pStmt ){ - nAux = sqlite3_column_count(pStmt) - 2; - sqlite3_finalize(pStmt); - }else - if( check.rc!=SQLITE_NOMEM ){ - check.rc = SQLITE_OK; - } + pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab); + if( pStmt ){ + nAux = sqlite3_column_count(pStmt) - 2; + sqlite3_finalize(pStmt); + }else + if( check.rc!=SQLITE_NOMEM ){ + check.rc = SQLITE_OK; } /* Find number of dimensions in the rtree table. */ @@ -209435,15 +214513,35 @@ static int rtreeCheckTable( sqlite3_finalize(check.aCheckMapping[0]); sqlite3_finalize(check.aCheckMapping[1]); - /* If one was opened, close the transaction */ - if( bEnd ){ - int rc = sqlite3_exec(db, "END", 0, 0, 0); - if( check.rc==SQLITE_OK ) check.rc = rc; - } *pzReport = check.zReport; return check.rc; } +/* +** Implementation of the xIntegrity method for Rtree. +*/ +static int rtreeIntegrity( + sqlite3_vtab *pVtab, /* The virtual table to check */ + const char *zSchema, /* Schema in which the virtual table lives */ + const char *zName, /* Name of the virtual table */ + int isQuick, /* True for a quick_check */ + char **pzErr /* Write results here */ +){ + Rtree *pRtree = (Rtree*)pVtab; + int rc; + assert( pzErr!=0 && *pzErr==0 ); + UNUSED_PARAMETER(zSchema); + UNUSED_PARAMETER(zName); + UNUSED_PARAMETER(isQuick); + rc = rtreeCheckTable(pRtree->db, pRtree->zDb, pRtree->zName, pzErr); + if( rc==SQLITE_OK && *pzErr ){ + *pzErr = sqlite3_mprintf("In RTree %s.%s:\n%z", + pRtree->zDb, pRtree->zName, *pzErr); + if( (*pzErr)==0 ) rc = SQLITE_NOMEM; + } + return rc; +} + /* ** Usage: ** @@ -210765,24 +215863,28 @@ static int geopolyInit( (void)pAux; sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); /* Allocate the sqlite3_vtab structure */ nDb = strlen(argv[1]); nName = strlen(argv[2]); - pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName+2); + pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName*2+8); if( !pRtree ){ return SQLITE_NOMEM; } - memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2); + memset(pRtree, 0, sizeof(Rtree)+nDb+nName*2+8); pRtree->nBusy = 1; pRtree->base.pModule = &rtreeModule; pRtree->zDb = (char *)&pRtree[1]; pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->zNodeName = &pRtree->zName[nName+1]; pRtree->eCoordType = RTREE_COORD_REAL32; pRtree->nDim = 2; pRtree->nDim2 = 4; memcpy(pRtree->zDb, argv[1], nDb); memcpy(pRtree->zName, argv[2], nName); + memcpy(pRtree->zNodeName, argv[2], nName); + memcpy(&pRtree->zNodeName[nName], "_node", 6); /* Create/Connect to the underlying relational database schema. If @@ -211196,7 +216298,6 @@ static int geopolyUpdate( } if( rc==SQLITE_OK ){ int rc2; - pRtree->iReinsertHeight = -1; rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); rc2 = nodeRelease(pRtree, pLeaf); if( rc==SQLITE_OK ){ @@ -211293,7 +216394,8 @@ static sqlite3_module geopolyModule = { rtreeSavepoint, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - rtreeShadowName /* xShadowName */ + rtreeShadowName, /* xShadowName */ + rtreeIntegrity /* xIntegrity */ }; static int sqlite3_geopoly_init(sqlite3 *db){ @@ -212004,7 +217106,7 @@ static void icuLoadCollation( UCollator *pUCollator; /* ICU library collation object */ int rc; /* Return code from sqlite3_create_collation_x() */ - assert(nArg==2); + assert(nArg==2 || nArg==3); (void)nArg; /* Unused parameter */ zLocale = (const char *)sqlite3_value_text(apArg[0]); zName = (const char *)sqlite3_value_text(apArg[1]); @@ -212019,7 +217121,39 @@ static void icuLoadCollation( return; } assert(p); - + if(nArg==3){ + const char *zOption = (const char*)sqlite3_value_text(apArg[2]); + static const struct { + const char *zName; + UColAttributeValue val; + } aStrength[] = { + { "PRIMARY", UCOL_PRIMARY }, + { "SECONDARY", UCOL_SECONDARY }, + { "TERTIARY", UCOL_TERTIARY }, + { "DEFAULT", UCOL_DEFAULT_STRENGTH }, + { "QUARTERNARY", UCOL_QUATERNARY }, + { "IDENTICAL", UCOL_IDENTICAL }, + }; + unsigned int i; + for(i=0; i=sizeof(aStrength)/sizeof(aStrength[0]) ){ + sqlite3_str *pStr = sqlite3_str_new(sqlite3_context_db_handle(p)); + sqlite3_str_appendf(pStr, + "unknown collation strength \"%s\" - should be one of:", + zOption); + for(i=0; ipTblIter, &p->zErrmsg); pIter->zTbl = 0; + pIter->zDataTbl = 0; }else{ pIter->zTbl = (const char*)sqlite3_column_text(pIter->pTblIter, 0); pIter->zDataTbl = (const char*)sqlite3_column_text(pIter->pTblIter,1); @@ -215972,7 +221109,7 @@ static i64 rbuShmChecksum(sqlite3rbu *p){ u32 volatile *ptr; p->rc = pDb->pMethods->xShmMap(pDb, 0, 32*1024, 0, (void volatile**)&ptr); if( p->rc==SQLITE_OK ){ - iRet = ((i64)ptr[10] << 32) + ptr[11]; + iRet = (i64)(((u64)ptr[10] << 32) + ptr[11]); } } return iRet; @@ -219307,7 +224444,8 @@ SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; return sqlite3_create_module(db, "dbstat", &dbstat_module, 0); } @@ -219744,7 +224882,8 @@ SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; return sqlite3_create_module(db, "sqlite_dbpage", &dbpage_module, 0); } @@ -219875,6 +225014,18 @@ struct sqlite3_changeset_iter { ** The data associated with each hash-table entry is a structure containing ** a subset of the initial values that the modified row contained at the ** start of the session. Or no initial values if the row was inserted. +** +** pDfltStmt: +** This is only used by the sqlite3changegroup_xxx() APIs, not by +** regular sqlite3_session objects. It is a SELECT statement that +** selects the default value for each table column. For example, +** if the table is +** +** CREATE TABLE xx(a DEFAULT 1, b, c DEFAULT 'abc') +** +** then this variable is the compiled version of: +** +** SELECT 1, NULL, 'abc' */ struct SessionTable { SessionTable *pNext; @@ -219883,10 +225034,12 @@ struct SessionTable { int bStat1; /* True if this is sqlite_stat1 */ int bRowid; /* True if this table uses rowid for PK */ const char **azCol; /* Column names */ + const char **azDflt; /* Default value expressions */ u8 *abPK; /* Array of primary key flags */ int nEntry; /* Total number of entries in hash table */ int nChange; /* Size of apChange[] array */ SessionChange **apChange; /* Hash table buckets */ + sqlite3_stmt *pDfltStmt; }; /* @@ -220055,6 +225208,7 @@ struct SessionTable { struct SessionChange { u8 op; /* One of UPDATE, DELETE, INSERT */ u8 bIndirect; /* True if this change is "indirect" */ + u16 nRecordField; /* Number of fields in aRecord[] */ int nMaxSize; /* Max size of eventual changeset record */ int nRecord; /* Number of bytes in buffer aRecord[] */ u8 *aRecord; /* Buffer containing old.* record */ @@ -220080,7 +225234,7 @@ static int sessionVarintLen(int iVal){ ** Read a varint value from aBuf[] into *piVal. Return the number of ** bytes read. */ -static int sessionVarintGet(u8 *aBuf, int *piVal){ +static int sessionVarintGet(const u8 *aBuf, int *piVal){ return getVarint32(aBuf, *piVal); } @@ -220343,9 +225497,11 @@ static int sessionPreupdateHash( ** Return the number of bytes of space occupied by the value (including ** the type byte). */ -static int sessionSerialLen(u8 *a){ - int e = *a; +static int sessionSerialLen(const u8 *a){ + int e; int n; + assert( a!=0 ); + e = *a; if( e==0 || e==0xFF ) return 1; if( e==SQLITE_NULL ) return 1; if( e==SQLITE_INTEGER || e==SQLITE_FLOAT ) return 9; @@ -220750,13 +225906,14 @@ static int sessionGrowHash( ** ** For example, if the table is declared as: ** -** CREATE TABLE tbl1(w, x, y, z, PRIMARY KEY(w, z)); +** CREATE TABLE tbl1(w, x DEFAULT 'abc', y, z, PRIMARY KEY(w, z)); ** -** Then the four output variables are populated as follows: +** Then the five output variables are populated as follows: ** ** *pnCol = 4 ** *pzTab = "tbl1" ** *pazCol = {"w", "x", "y", "z"} +** *pazDflt = {NULL, 'abc', NULL, NULL} ** *pabPK = {1, 0, 0, 1} ** ** All returned buffers are part of the same single allocation, which must @@ -220770,6 +225927,7 @@ static int sessionTableInfo( int *pnCol, /* OUT: number of columns */ const char **pzTab, /* OUT: Copy of zThis */ const char ***pazCol, /* OUT: Array of column names for table */ + const char ***pazDflt, /* OUT: Array of default value expressions */ u8 **pabPK, /* OUT: Array of booleans - true for PK col */ int *pbRowid /* OUT: True if only PK is a rowid */ ){ @@ -220782,11 +225940,18 @@ static int sessionTableInfo( int i; u8 *pAlloc = 0; char **azCol = 0; + char **azDflt = 0; u8 *abPK = 0; int bRowid = 0; /* Set to true to use rowid as PK */ assert( pazCol && pabPK ); + *pazCol = 0; + *pabPK = 0; + *pnCol = 0; + if( pzTab ) *pzTab = 0; + if( pazDflt ) *pazDflt = 0; + nThis = sqlite3Strlen30(zThis); if( nThis==12 && 0==sqlite3_stricmp("sqlite_stat1", zThis) ){ rc = sqlite3_table_column_metadata(db, zDb, zThis, 0, 0, 0, 0, 0, 0); @@ -220800,39 +225965,28 @@ static int sessionTableInfo( }else if( rc==SQLITE_ERROR ){ zPragma = sqlite3_mprintf(""); }else{ - *pazCol = 0; - *pabPK = 0; - *pnCol = 0; - if( pzTab ) *pzTab = 0; return rc; } }else{ zPragma = sqlite3_mprintf("PRAGMA '%q'.table_info('%q')", zDb, zThis); } if( !zPragma ){ - *pazCol = 0; - *pabPK = 0; - *pnCol = 0; - if( pzTab ) *pzTab = 0; return SQLITE_NOMEM; } rc = sqlite3_prepare_v2(db, zPragma, -1, &pStmt, 0); sqlite3_free(zPragma); if( rc!=SQLITE_OK ){ - *pazCol = 0; - *pabPK = 0; - *pnCol = 0; - if( pzTab ) *pzTab = 0; return rc; } nByte = nThis + 1; bRowid = (pbRowid!=0); while( SQLITE_ROW==sqlite3_step(pStmt) ){ - nByte += sqlite3_column_bytes(pStmt, 1); + nByte += sqlite3_column_bytes(pStmt, 1); /* name */ + nByte += sqlite3_column_bytes(pStmt, 4); /* dflt_value */ nDbCol++; - if( sqlite3_column_int(pStmt, 5) ) bRowid = 0; + if( sqlite3_column_int(pStmt, 5) ) bRowid = 0; /* pk */ } if( nDbCol==0 ) bRowid = 0; nDbCol += bRowid; @@ -220840,15 +225994,18 @@ static int sessionTableInfo( rc = sqlite3_reset(pStmt); if( rc==SQLITE_OK ){ - nByte += nDbCol * (sizeof(const char *) + sizeof(u8) + 1); + nByte += nDbCol * (sizeof(const char *)*2 + sizeof(u8) + 1 + 1); pAlloc = sessionMalloc64(pSession, nByte); if( pAlloc==0 ){ rc = SQLITE_NOMEM; + }else{ + memset(pAlloc, 0, nByte); } } if( rc==SQLITE_OK ){ azCol = (char **)pAlloc; - pAlloc = (u8 *)&azCol[nDbCol]; + azDflt = (char**)&azCol[nDbCol]; + pAlloc = (u8 *)&azDflt[nDbCol]; abPK = (u8 *)pAlloc; pAlloc = &abPK[nDbCol]; if( pzTab ){ @@ -220868,11 +226025,21 @@ static int sessionTableInfo( } while( SQLITE_ROW==sqlite3_step(pStmt) ){ int nName = sqlite3_column_bytes(pStmt, 1); + int nDflt = sqlite3_column_bytes(pStmt, 4); const unsigned char *zName = sqlite3_column_text(pStmt, 1); + const unsigned char *zDflt = sqlite3_column_text(pStmt, 4); + if( zName==0 ) break; memcpy(pAlloc, zName, nName+1); azCol[i] = (char *)pAlloc; pAlloc += nName+1; + if( zDflt ){ + memcpy(pAlloc, zDflt, nDflt+1); + azDflt[i] = (char *)pAlloc; + pAlloc += nDflt+1; + }else{ + azDflt[i] = 0; + } abPK[i] = sqlite3_column_int(pStmt, 5); i++; } @@ -220883,14 +226050,11 @@ static int sessionTableInfo( ** free any allocation made. An error code will be returned in this case. */ if( rc==SQLITE_OK ){ - *pazCol = (const char **)azCol; + *pazCol = (const char**)azCol; + if( pazDflt ) *pazDflt = (const char**)azDflt; *pabPK = abPK; *pnCol = nDbCol; }else{ - *pazCol = 0; - *pabPK = 0; - *pnCol = 0; - if( pzTab ) *pzTab = 0; sessionFree(pSession, azCol); } if( pbRowid ) *pbRowid = bRowid; @@ -220899,10 +226063,9 @@ static int sessionTableInfo( } /* -** This function is only called from within a pre-update handler for a -** write to table pTab, part of session pSession. If this is the first -** write to this table, initalize the SessionTable.nCol, azCol[] and -** abPK[] arrays accordingly. +** This function is called to initialize the SessionTable.nCol, azCol[] +** abPK[] and azDflt[] members of SessionTable object pTab. If these +** fields are already initilialized, this function is a no-op. ** ** If an error occurs, an error code is stored in sqlite3_session.rc and ** non-zero returned. Or, if no error occurs but the table has no primary @@ -220910,15 +226073,22 @@ static int sessionTableInfo( ** indicate that updates on this table should be ignored. SessionTable.abPK ** is set to NULL in this case. */ -static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){ +static int sessionInitTable( + sqlite3_session *pSession, /* Optional session handle */ + SessionTable *pTab, /* Table object to initialize */ + sqlite3 *db, /* Database handle to read schema from */ + const char *zDb /* Name of db - "main", "temp" etc. */ +){ + int rc = SQLITE_OK; + if( pTab->nCol==0 ){ u8 *abPK; assert( pTab->azCol==0 || pTab->abPK==0 ); - pSession->rc = sessionTableInfo(pSession, pSession->db, pSession->zDb, - pTab->zName, &pTab->nCol, 0, &pTab->azCol, &abPK, - (pSession->bImplicitPK ? &pTab->bRowid : 0) + rc = sessionTableInfo(pSession, db, zDb, + pTab->zName, &pTab->nCol, 0, &pTab->azCol, &pTab->azDflt, &abPK, + ((pSession==0 || pSession->bImplicitPK) ? &pTab->bRowid : 0) ); - if( pSession->rc==SQLITE_OK ){ + if( rc==SQLITE_OK ){ int i; for(i=0; inCol; i++){ if( abPK[i] ){ @@ -220930,14 +226100,321 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){ pTab->bStat1 = 1; } - if( pSession->bEnableSize ){ + if( pSession && pSession->bEnableSize ){ pSession->nMaxChangesetSize += ( 1 + sessionVarintLen(pTab->nCol) + pTab->nCol + strlen(pTab->zName)+1 ); } } } - return (pSession->rc || pTab->abPK==0); + + if( pSession ){ + pSession->rc = rc; + return (rc || pTab->abPK==0); + } + return rc; +} + +/* +** Re-initialize table object pTab. +*/ +static int sessionReinitTable(sqlite3_session *pSession, SessionTable *pTab){ + int nCol = 0; + const char **azCol = 0; + const char **azDflt = 0; + u8 *abPK = 0; + int bRowid = 0; + + assert( pSession->rc==SQLITE_OK ); + + pSession->rc = sessionTableInfo(pSession, pSession->db, pSession->zDb, + pTab->zName, &nCol, 0, &azCol, &azDflt, &abPK, + (pSession->bImplicitPK ? &bRowid : 0) + ); + if( pSession->rc==SQLITE_OK ){ + if( pTab->nCol>nCol || pTab->bRowid!=bRowid ){ + pSession->rc = SQLITE_SCHEMA; + }else{ + int ii; + int nOldCol = pTab->nCol; + for(ii=0; iinCol ){ + if( pTab->abPK[ii]!=abPK[ii] ){ + pSession->rc = SQLITE_SCHEMA; + } + }else if( abPK[ii] ){ + pSession->rc = SQLITE_SCHEMA; + } + } + + if( pSession->rc==SQLITE_OK ){ + const char **a = pTab->azCol; + pTab->azCol = azCol; + pTab->nCol = nCol; + pTab->azDflt = azDflt; + pTab->abPK = abPK; + azCol = a; + } + if( pSession->bEnableSize ){ + pSession->nMaxChangesetSize += (nCol - nOldCol); + pSession->nMaxChangesetSize += sessionVarintLen(nCol); + pSession->nMaxChangesetSize -= sessionVarintLen(nOldCol); + } + } + } + + sqlite3_free((char*)azCol); + return pSession->rc; +} + +/* +** Session-change object (*pp) contains an old.* record with fewer than +** nCol fields. This function updates it with the default values for +** the missing fields. +*/ +static void sessionUpdateOneChange( + sqlite3_session *pSession, /* For memory accounting */ + int *pRc, /* IN/OUT: Error code */ + SessionChange **pp, /* IN/OUT: Change object to update */ + int nCol, /* Number of columns now in table */ + sqlite3_stmt *pDflt /* SELECT */ +){ + SessionChange *pOld = *pp; + + while( pOld->nRecordFieldnRecordField; + int eType = sqlite3_column_type(pDflt, iField); + switch( eType ){ + case SQLITE_NULL: + nIncr = 1; + break; + case SQLITE_INTEGER: + case SQLITE_FLOAT: + nIncr = 9; + break; + default: { + int n = sqlite3_column_bytes(pDflt, iField); + nIncr = 1 + sessionVarintLen(n) + n; + assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); + break; + } + } + + nByte = nIncr + (sizeof(SessionChange) + pOld->nRecord); + pNew = sessionMalloc64(pSession, nByte); + if( pNew==0 ){ + *pRc = SQLITE_NOMEM; + return; + }else{ + memcpy(pNew, pOld, sizeof(SessionChange)); + pNew->aRecord = (u8*)&pNew[1]; + memcpy(pNew->aRecord, pOld->aRecord, pOld->nRecord); + pNew->aRecord[pNew->nRecord++] = (u8)eType; + switch( eType ){ + case SQLITE_INTEGER: { + i64 iVal = sqlite3_column_int64(pDflt, iField); + sessionPutI64(&pNew->aRecord[pNew->nRecord], iVal); + pNew->nRecord += 8; + break; + } + + case SQLITE_FLOAT: { + double rVal = sqlite3_column_double(pDflt, iField); + i64 iVal = 0; + memcpy(&iVal, &rVal, sizeof(rVal)); + sessionPutI64(&pNew->aRecord[pNew->nRecord], iVal); + pNew->nRecord += 8; + break; + } + + case SQLITE_TEXT: { + int n = sqlite3_column_bytes(pDflt, iField); + const char *z = (const char*)sqlite3_column_text(pDflt, iField); + pNew->nRecord += sessionVarintPut(&pNew->aRecord[pNew->nRecord], n); + memcpy(&pNew->aRecord[pNew->nRecord], z, n); + pNew->nRecord += n; + break; + } + + case SQLITE_BLOB: { + int n = sqlite3_column_bytes(pDflt, iField); + const u8 *z = (const u8*)sqlite3_column_blob(pDflt, iField); + pNew->nRecord += sessionVarintPut(&pNew->aRecord[pNew->nRecord], n); + memcpy(&pNew->aRecord[pNew->nRecord], z, n); + pNew->nRecord += n; + break; + } + + default: + assert( eType==SQLITE_NULL ); + break; + } + + sessionFree(pSession, pOld); + *pp = pOld = pNew; + pNew->nRecordField++; + pNew->nMaxSize += nIncr; + if( pSession ){ + pSession->nMaxChangesetSize += nIncr; + } + } + } +} + +/* +** Ensure that there is room in the buffer to append nByte bytes of data. +** If not, use sqlite3_realloc() to grow the buffer so that there is. +** +** If successful, return zero. Otherwise, if an OOM condition is encountered, +** set *pRc to SQLITE_NOMEM and return non-zero. +*/ +static int sessionBufferGrow(SessionBuffer *p, i64 nByte, int *pRc){ +#define SESSION_MAX_BUFFER_SZ (0x7FFFFF00 - 1) + i64 nReq = p->nBuf + nByte; + if( *pRc==SQLITE_OK && nReq>p->nAlloc ){ + u8 *aNew; + i64 nNew = p->nAlloc ? p->nAlloc : 128; + + do { + nNew = nNew*2; + }while( nNewSESSION_MAX_BUFFER_SZ ){ + nNew = SESSION_MAX_BUFFER_SZ; + if( nNewaBuf, nNew); + if( 0==aNew ){ + *pRc = SQLITE_NOMEM; + }else{ + p->aBuf = aNew; + p->nAlloc = nNew; + } + } + return (*pRc!=SQLITE_OK); +} + + +/* +** This function is a no-op if *pRc is other than SQLITE_OK when it is +** called. Otherwise, append a string to the buffer. All bytes in the string +** up to (but not including) the nul-terminator are written to the buffer. +** +** If an OOM condition is encountered, set *pRc to SQLITE_NOMEM before +** returning. +*/ +static void sessionAppendStr( + SessionBuffer *p, + const char *zStr, + int *pRc +){ + int nStr = sqlite3Strlen30(zStr); + if( 0==sessionBufferGrow(p, nStr+1, pRc) ){ + memcpy(&p->aBuf[p->nBuf], zStr, nStr); + p->nBuf += nStr; + p->aBuf[p->nBuf] = 0x00; + } +} + +/* +** Format a string using printf() style formatting and then append it to the +** buffer using sessionAppendString(). +*/ +static void sessionAppendPrintf( + SessionBuffer *p, /* Buffer to append to */ + int *pRc, + const char *zFmt, + ... +){ + if( *pRc==SQLITE_OK ){ + char *zApp = 0; + va_list ap; + va_start(ap, zFmt); + zApp = sqlite3_vmprintf(zFmt, ap); + if( zApp==0 ){ + *pRc = SQLITE_NOMEM; + }else{ + sessionAppendStr(p, zApp, pRc); + } + va_end(ap); + sqlite3_free(zApp); + } +} + +/* +** Prepare a statement against database handle db that SELECTs a single +** row containing the default values for each column in table pTab. For +** example, if pTab is declared as: +** +** CREATE TABLE pTab(a PRIMARY KEY, b DEFAULT 123, c DEFAULT 'abcd'); +** +** Then this function prepares and returns the SQL statement: +** +** SELECT NULL, 123, 'abcd'; +*/ +static int sessionPrepareDfltStmt( + sqlite3 *db, /* Database handle */ + SessionTable *pTab, /* Table to prepare statement for */ + sqlite3_stmt **ppStmt /* OUT: Statement handle */ +){ + SessionBuffer sql = {0,0,0}; + int rc = SQLITE_OK; + const char *zSep = " "; + int ii = 0; + + *ppStmt = 0; + sessionAppendPrintf(&sql, &rc, "SELECT"); + for(ii=0; iinCol; ii++){ + const char *zDflt = pTab->azDflt[ii] ? pTab->azDflt[ii] : "NULL"; + sessionAppendPrintf(&sql, &rc, "%s%s", zSep, zDflt); + zSep = ", "; + } + if( rc==SQLITE_OK ){ + rc = sqlite3_prepare_v2(db, (const char*)sql.aBuf, -1, ppStmt, 0); + } + sqlite3_free(sql.aBuf); + + return rc; +} + +/* +** Table pTab has one or more existing change-records with old.* records +** with fewer than pTab->nCol columns. This function updates all such +** change-records with the default values for the missing columns. +*/ +static int sessionUpdateChanges(sqlite3_session *pSession, SessionTable *pTab){ + sqlite3_stmt *pStmt = 0; + int rc = pSession->rc; + + rc = sessionPrepareDfltStmt(pSession->db, pTab, &pStmt); + if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + int ii = 0; + SessionChange **pp = 0; + for(ii=0; iinChange; ii++){ + for(pp=&pTab->apChange[ii]; *pp; pp=&((*pp)->pNext)){ + if( (*pp)->nRecordField!=pTab->nCol ){ + sessionUpdateOneChange(pSession, &rc, pp, pTab->nCol, pStmt); + } + } + } + } + + pSession->rc = rc; + rc = sqlite3_finalize(pStmt); + if( pSession->rc==SQLITE_OK ) pSession->rc = rc; + return pSession->rc; } /* @@ -221100,16 +226577,22 @@ static void sessionPreupdateOneChange( int iHash; int bNull = 0; int rc = SQLITE_OK; + int nExpect = 0; SessionStat1Ctx stat1 = {{0,0,0,0,0},0}; if( pSession->rc ) return; /* Load table details if required */ - if( sessionInitTable(pSession, pTab) ) return; + if( sessionInitTable(pSession, pTab, pSession->db, pSession->zDb) ) return; /* Check the number of columns in this xPreUpdate call matches the ** number of columns in the table. */ - if( (pTab->nCol-pTab->bRowid)!=pSession->hook.xCount(pSession->hook.pCtx) ){ + nExpect = pSession->hook.xCount(pSession->hook.pCtx); + if( (pTab->nCol-pTab->bRowid)nCol-pTab->bRowid)!=nExpect ){ pSession->rc = SQLITE_SCHEMA; return; } @@ -221186,7 +226669,7 @@ static void sessionPreupdateOneChange( } /* Allocate the change object */ - pC = (SessionChange *)sessionMalloc64(pSession, nByte); + pC = (SessionChange*)sessionMalloc64(pSession, nByte); if( !pC ){ rc = SQLITE_NOMEM; goto error_out; @@ -221219,6 +226702,7 @@ static void sessionPreupdateOneChange( if( pSession->bIndirect || pSession->hook.xDepth(pSession->hook.pCtx) ){ pC->bIndirect = 1; } + pC->nRecordField = pTab->nCol; pC->nRecord = nByte; pC->op = op; pC->pNext = pTab->apChange[iHash]; @@ -221598,7 +227082,7 @@ SQLITE_API int sqlite3session_diff( /* Locate and if necessary initialize the target table object */ rc = sessionFindTable(pSession, zTbl, &pTo); if( pTo==0 ) goto diff_out; - if( sessionInitTable(pSession, pTo) ){ + if( sessionInitTable(pSession, pTo, pSession->db, pSession->zDb) ){ rc = pSession->rc; goto diff_out; } @@ -221611,7 +227095,7 @@ SQLITE_API int sqlite3session_diff( int bRowid = 0; u8 *abPK; const char **azCol = 0; - rc = sessionTableInfo(0, db, zFrom, zTbl, &nCol, 0, &azCol, &abPK, + rc = sessionTableInfo(0, db, zFrom, zTbl, &nCol, 0, &azCol, 0, &abPK, pSession->bImplicitPK ? &bRowid : 0 ); if( rc==SQLITE_OK ){ @@ -221726,6 +227210,7 @@ static void sessionDeleteTable(sqlite3_session *pSession, SessionTable *pList){ sessionFree(pSession, p); } } + sqlite3_finalize(pTab->pDfltStmt); sessionFree(pSession, (char*)pTab->azCol); /* cast works around VC++ bug */ sessionFree(pSession, pTab->apChange); sessionFree(pSession, pTab); @@ -221758,9 +227243,7 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession){ ** associated hash-tables. */ sessionDeleteTable(pSession, pSession->pTable); - /* Assert that all allocations have been freed and then free the - ** session object itself. */ - assert( pSession->nMalloc==0 ); + /* Free the session object. */ sqlite3_free(pSession); } @@ -221831,48 +227314,6 @@ SQLITE_API int sqlite3session_attach( return rc; } -/* -** Ensure that there is room in the buffer to append nByte bytes of data. -** If not, use sqlite3_realloc() to grow the buffer so that there is. -** -** If successful, return zero. Otherwise, if an OOM condition is encountered, -** set *pRc to SQLITE_NOMEM and return non-zero. -*/ -static int sessionBufferGrow(SessionBuffer *p, i64 nByte, int *pRc){ -#define SESSION_MAX_BUFFER_SZ (0x7FFFFF00 - 1) - i64 nReq = p->nBuf + nByte; - if( *pRc==SQLITE_OK && nReq>p->nAlloc ){ - u8 *aNew; - i64 nNew = p->nAlloc ? p->nAlloc : 128; - - do { - nNew = nNew*2; - }while( nNewSESSION_MAX_BUFFER_SZ ){ - nNew = SESSION_MAX_BUFFER_SZ; - if( nNewaBuf, nNew); - if( 0==aNew ){ - *pRc = SQLITE_NOMEM; - }else{ - p->aBuf = aNew; - p->nAlloc = nNew; - } - } - return (*pRc!=SQLITE_OK); -} - /* ** Append the value passed as the second argument to the buffer passed ** as the first. @@ -221941,27 +227382,6 @@ static void sessionAppendBlob( } } -/* -** This function is a no-op if *pRc is other than SQLITE_OK when it is -** called. Otherwise, append a string to the buffer. All bytes in the string -** up to (but not including) the nul-terminator are written to the buffer. -** -** If an OOM condition is encountered, set *pRc to SQLITE_NOMEM before -** returning. -*/ -static void sessionAppendStr( - SessionBuffer *p, - const char *zStr, - int *pRc -){ - int nStr = sqlite3Strlen30(zStr); - if( 0==sessionBufferGrow(p, nStr+1, pRc) ){ - memcpy(&p->aBuf[p->nBuf], zStr, nStr); - p->nBuf += nStr; - p->aBuf[p->nBuf] = 0x00; - } -} - /* ** This function is a no-op if *pRc is other than SQLITE_OK when it is ** called. Otherwise, append the string representation of integer iVal @@ -221980,27 +227400,6 @@ static void sessionAppendInteger( sessionAppendStr(p, aBuf, pRc); } -static void sessionAppendPrintf( - SessionBuffer *p, /* Buffer to append to */ - int *pRc, - const char *zFmt, - ... -){ - if( *pRc==SQLITE_OK ){ - char *zApp = 0; - va_list ap; - va_start(ap, zFmt); - zApp = sqlite3_vmprintf(zFmt, ap); - if( zApp==0 ){ - *pRc = SQLITE_NOMEM; - }else{ - sessionAppendStr(p, zApp, pRc); - } - va_end(ap); - sqlite3_free(zApp); - } -} - /* ** This function is a no-op if *pRc is other than SQLITE_OK when it is ** called. Otherwise, append the string zStr enclosed in quotes (") and @@ -222491,26 +227890,16 @@ static int sessionGenerateChangeset( for(pTab=pSession->pTable; rc==SQLITE_OK && pTab; pTab=pTab->pNext){ if( pTab->nEntry ){ const char *zName = pTab->zName; - int nCol = 0; /* Number of columns in table */ - u8 *abPK = 0; /* Primary key array */ - const char **azCol = 0; /* Table columns */ int i; /* Used to iterate through hash buckets */ sqlite3_stmt *pSel = 0; /* SELECT statement to query table pTab */ int nRewind = buf.nBuf; /* Initial size of write buffer */ int nNoop; /* Size of buffer after writing tbl header */ - int bRowid = 0; + int nOldCol = pTab->nCol; /* Check the table schema is still Ok. */ - rc = sessionTableInfo( - 0, db, pSession->zDb, zName, &nCol, 0, &azCol, &abPK, - (pSession->bImplicitPK ? &bRowid : 0) - ); - if( rc==SQLITE_OK && ( - pTab->nCol!=nCol - || pTab->bRowid!=bRowid - || memcmp(abPK, pTab->abPK, nCol) - )){ - rc = SQLITE_SCHEMA; + rc = sessionReinitTable(pSession, pTab); + if( rc==SQLITE_OK && pTab->nCol!=nOldCol ){ + rc = sessionUpdateChanges(pSession, pTab); } /* Write a table header */ @@ -222518,8 +227907,8 @@ static int sessionGenerateChangeset( /* Build and compile a statement to execute: */ if( rc==SQLITE_OK ){ - rc = sessionSelectStmt( - db, 0, pSession->zDb, zName, bRowid, nCol, azCol, abPK, &pSel + rc = sessionSelectStmt(db, 0, pSession->zDb, + zName, pTab->bRowid, pTab->nCol, pTab->azCol, pTab->abPK, &pSel ); } @@ -222528,22 +227917,22 @@ static int sessionGenerateChangeset( SessionChange *p; /* Used to iterate through changes */ for(p=pTab->apChange[i]; rc==SQLITE_OK && p; p=p->pNext){ - rc = sessionSelectBind(pSel, nCol, abPK, p); + rc = sessionSelectBind(pSel, pTab->nCol, pTab->abPK, p); if( rc!=SQLITE_OK ) continue; if( sqlite3_step(pSel)==SQLITE_ROW ){ if( p->op==SQLITE_INSERT ){ int iCol; sessionAppendByte(&buf, SQLITE_INSERT, &rc); sessionAppendByte(&buf, p->bIndirect, &rc); - for(iCol=0; iColnCol; iCol++){ sessionAppendCol(&buf, pSel, iCol, &rc); } }else{ - assert( abPK!=0 ); /* Because sessionSelectStmt() returned ok */ - rc = sessionAppendUpdate(&buf, bPatchset, pSel, p, abPK); + assert( pTab->abPK!=0 ); + rc = sessionAppendUpdate(&buf, bPatchset, pSel, p, pTab->abPK); } }else if( p->op!=SQLITE_INSERT ){ - rc = sessionAppendDelete(&buf, bPatchset, p, nCol, abPK); + rc = sessionAppendDelete(&buf, bPatchset, p, pTab->nCol,pTab->abPK); } if( rc==SQLITE_OK ){ rc = sqlite3_reset(pSel); @@ -222568,7 +227957,6 @@ static int sessionGenerateChangeset( if( buf.nBuf==nNoop ){ buf.nBuf = nRewind; } - sqlite3_free((char*)azCol); /* cast works around VC++ bug */ } } @@ -223192,14 +228580,14 @@ static int sessionChangesetNextOne( p->rc = sessionInputBuffer(&p->in, 2); if( p->rc!=SQLITE_OK ) return p->rc; + sessionDiscardData(&p->in); + p->in.iCurrent = p->in.iNext; + /* If the iterator is already at the end of the changeset, return DONE. */ if( p->in.iNext>=p->in.nData ){ return SQLITE_DONE; } - sessionDiscardData(&p->in); - p->in.iCurrent = p->in.iNext; - op = p->in.aData[p->in.iNext++]; while( op=='T' || op=='P' ){ if( pbNew ) *pbNew = 1; @@ -224697,7 +230085,7 @@ static int sessionChangesetApply( sqlite3changeset_pk(pIter, &abPK, 0); rc = sessionTableInfo(0, db, "main", zNew, - &sApply.nCol, &zTab, &sApply.azCol, &sApply.abPK, &sApply.bRowid + &sApply.nCol, &zTab, &sApply.azCol, 0, &sApply.abPK, &sApply.bRowid ); if( rc!=SQLITE_OK ) break; for(i=0; iflags & SQLITE_FkNoAction; + + if( flags & SQLITE_CHANGESETAPPLY_FKNOACTION ){ + db->flags |= ((u64)SQLITE_FkNoAction); + db->aDb[0].pSchema->schema_cookie -= 32; + } + if( rc==SQLITE_OK ){ rc = sessionChangesetApply( db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags ); } + + if( (flags & SQLITE_CHANGESETAPPLY_FKNOACTION) && savedFlag==0 ){ + assert( db->flags & SQLITE_FkNoAction ); + db->flags &= ~((u64)SQLITE_FkNoAction); + db->aDb[0].pSchema->schema_cookie -= 32; + } return rc; } @@ -224921,6 +230322,10 @@ struct sqlite3_changegroup { int rc; /* Error code */ int bPatch; /* True to accumulate patchsets */ SessionTable *pList; /* List of tables in current patch */ + SessionBuffer rec; + + sqlite3 *db; /* Configured by changegroup_schema() */ + char *zDb; /* Configured by changegroup_schema() */ }; /* @@ -224941,6 +230346,7 @@ static int sessionChangeMerge( ){ SessionChange *pNew = 0; int rc = SQLITE_OK; + assert( aRec!=0 ); if( !pExist ){ pNew = (SessionChange *)sqlite3_malloc64(sizeof(SessionChange) + nRec); @@ -225107,84 +230513,236 @@ static int sessionChangeMerge( } /* -** Add all changes in the changeset traversed by the iterator passed as -** the first argument to the changegroup hash tables. +** Check if a changeset entry with nCol columns and the PK array passed +** as the final argument to this function is compatible with SessionTable +** pTab. If so, return 1. Otherwise, if they are incompatible in some way, +** return 0. */ -static int sessionChangesetToHash( - sqlite3_changeset_iter *pIter, /* Iterator to read from */ - sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */ - int bRebase /* True if hash table is for rebasing */ +static int sessionChangesetCheckCompat( + SessionTable *pTab, + int nCol, + u8 *abPK ){ - u8 *aRec; - int nRec; - int rc = SQLITE_OK; - SessionTable *pTab = 0; - - while( SQLITE_ROW==sessionChangesetNext(pIter, &aRec, &nRec, 0) ){ - const char *zNew; - int nCol; - int op; - int iHash; - int bIndirect; - SessionChange *pChange; - SessionChange *pExist = 0; - SessionChange **pp; - - if( pGrp->pList==0 ){ - pGrp->bPatch = pIter->bPatchset; - }else if( pIter->bPatchset!=pGrp->bPatch ){ - rc = SQLITE_ERROR; - break; + if( pTab->azCol && nColnCol ){ + int ii; + for(ii=0; iinCol; ii++){ + u8 bPK = (ii < nCol) ? abPK[ii] : 0; + if( pTab->abPK[ii]!=bPK ) return 0; } + return 1; + } + return (pTab->nCol==nCol && 0==memcmp(abPK, pTab->abPK, nCol)); +} - sqlite3changeset_op(pIter, &zNew, &nCol, &op, &bIndirect); - if( !pTab || sqlite3_stricmp(zNew, pTab->zName) ){ - /* Search the list for a matching table */ - int nNew = (int)strlen(zNew); - u8 *abPK; +static int sessionChangesetExtendRecord( + sqlite3_changegroup *pGrp, + SessionTable *pTab, + int nCol, + int op, + const u8 *aRec, + int nRec, + SessionBuffer *pOut +){ + int rc = SQLITE_OK; + int ii = 0; - sqlite3changeset_pk(pIter, &abPK, 0); - for(pTab = pGrp->pList; pTab; pTab=pTab->pNext){ - if( 0==sqlite3_strnicmp(pTab->zName, zNew, nNew+1) ) break; - } - if( !pTab ){ - SessionTable **ppTab; + assert( pTab->azCol ); + assert( nColnCol ); - pTab = sqlite3_malloc64(sizeof(SessionTable) + nCol + nNew+1); - if( !pTab ){ - rc = SQLITE_NOMEM; + pOut->nBuf = 0; + if( op==SQLITE_INSERT || (op==SQLITE_DELETE && pGrp->bPatch==0) ){ + /* Append the missing default column values to the record. */ + sessionAppendBlob(pOut, aRec, nRec, &rc); + if( rc==SQLITE_OK && pTab->pDfltStmt==0 ){ + rc = sessionPrepareDfltStmt(pGrp->db, pTab, &pTab->pDfltStmt); + } + for(ii=nCol; rc==SQLITE_OK && iinCol; ii++){ + int eType = sqlite3_column_type(pTab->pDfltStmt, ii); + sessionAppendByte(pOut, eType, &rc); + switch( eType ){ + case SQLITE_FLOAT: + case SQLITE_INTEGER: { + i64 iVal; + if( eType==SQLITE_INTEGER ){ + iVal = sqlite3_column_int64(pTab->pDfltStmt, ii); + }else{ + double rVal = sqlite3_column_int64(pTab->pDfltStmt, ii); + memcpy(&iVal, &rVal, sizeof(i64)); + } + if( SQLITE_OK==sessionBufferGrow(pOut, 8, &rc) ){ + sessionPutI64(&pOut->aBuf[pOut->nBuf], iVal); + } break; } - memset(pTab, 0, sizeof(SessionTable)); - pTab->nCol = nCol; - pTab->abPK = (u8*)&pTab[1]; - memcpy(pTab->abPK, abPK, nCol); - pTab->zName = (char*)&pTab->abPK[nCol]; - memcpy(pTab->zName, zNew, nNew+1); - - /* The new object must be linked on to the end of the list, not - ** simply added to the start of it. This is to ensure that the - ** tables within the output of sqlite3changegroup_output() are in - ** the right order. */ - for(ppTab=&pGrp->pList; *ppTab; ppTab=&(*ppTab)->pNext); - *ppTab = pTab; - }else if( pTab->nCol!=nCol || memcmp(pTab->abPK, abPK, nCol) ){ - rc = SQLITE_SCHEMA; - break; + + case SQLITE_BLOB: + case SQLITE_TEXT: { + int n = sqlite3_column_bytes(pTab->pDfltStmt, ii); + sessionAppendVarint(pOut, n, &rc); + if( eType==SQLITE_TEXT ){ + const u8 *z = (const u8*)sqlite3_column_text(pTab->pDfltStmt, ii); + sessionAppendBlob(pOut, z, n, &rc); + }else{ + const u8 *z = (const u8*)sqlite3_column_blob(pTab->pDfltStmt, ii); + sessionAppendBlob(pOut, z, n, &rc); + } + break; + } + + default: + assert( eType==SQLITE_NULL ); + break; + } + } + }else if( op==SQLITE_UPDATE ){ + /* Append missing "undefined" entries to the old.* record. And, if this + ** is an UPDATE, to the new.* record as well. */ + int iOff = 0; + if( pGrp->bPatch==0 ){ + for(ii=0; iinCol-nCol); ii++){ + sessionAppendByte(pOut, 0x00, &rc); } } - if( sessionGrowHash(0, pIter->bPatchset, pTab) ){ - rc = SQLITE_NOMEM; - break; + sessionAppendBlob(pOut, &aRec[iOff], nRec-iOff, &rc); + for(ii=0; ii<(pTab->nCol-nCol); ii++){ + sessionAppendByte(pOut, 0x00, &rc); } + }else{ + assert( op==SQLITE_DELETE && pGrp->bPatch ); + sessionAppendBlob(pOut, aRec, nRec, &rc); + } + + return rc; +} + +/* +** Locate or create a SessionTable object that may be used to add the +** change currently pointed to by iterator pIter to changegroup pGrp. +** If successful, set output variable (*ppTab) to point to the table +** object and return SQLITE_OK. Otherwise, if some error occurs, return +** an SQLite error code and leave (*ppTab) set to NULL. +*/ +static int sessionChangesetFindTable( + sqlite3_changegroup *pGrp, + const char *zTab, + sqlite3_changeset_iter *pIter, + SessionTable **ppTab +){ + int rc = SQLITE_OK; + SessionTable *pTab = 0; + int nTab = (int)strlen(zTab); + u8 *abPK = 0; + int nCol = 0; + + *ppTab = 0; + sqlite3changeset_pk(pIter, &abPK, &nCol); + + /* Search the list for an existing table */ + for(pTab = pGrp->pList; pTab; pTab=pTab->pNext){ + if( 0==sqlite3_strnicmp(pTab->zName, zTab, nTab+1) ) break; + } + + /* If one was not found above, create a new table now */ + if( !pTab ){ + SessionTable **ppNew; + + pTab = sqlite3_malloc64(sizeof(SessionTable) + nCol + nTab+1); + if( !pTab ){ + return SQLITE_NOMEM; + } + memset(pTab, 0, sizeof(SessionTable)); + pTab->nCol = nCol; + pTab->abPK = (u8*)&pTab[1]; + memcpy(pTab->abPK, abPK, nCol); + pTab->zName = (char*)&pTab->abPK[nCol]; + memcpy(pTab->zName, zTab, nTab+1); + + if( pGrp->db ){ + pTab->nCol = 0; + rc = sessionInitTable(0, pTab, pGrp->db, pGrp->zDb); + if( rc ){ + assert( pTab->azCol==0 ); + sqlite3_free(pTab); + return rc; + } + } + + /* The new object must be linked on to the end of the list, not + ** simply added to the start of it. This is to ensure that the + ** tables within the output of sqlite3changegroup_output() are in + ** the right order. */ + for(ppNew=&pGrp->pList; *ppNew; ppNew=&(*ppNew)->pNext); + *ppNew = pTab; + } + + /* Check that the table is compatible. */ + if( !sessionChangesetCheckCompat(pTab, nCol, abPK) ){ + rc = SQLITE_SCHEMA; + } + + *ppTab = pTab; + return rc; +} + +/* +** Add the change currently indicated by iterator pIter to the hash table +** belonging to changegroup pGrp. +*/ +static int sessionOneChangeToHash( + sqlite3_changegroup *pGrp, + sqlite3_changeset_iter *pIter, + int bRebase +){ + int rc = SQLITE_OK; + int nCol = 0; + int op = 0; + int iHash = 0; + int bIndirect = 0; + SessionChange *pChange = 0; + SessionChange *pExist = 0; + SessionChange **pp = 0; + SessionTable *pTab = 0; + u8 *aRec = &pIter->in.aData[pIter->in.iCurrent + 2]; + int nRec = (pIter->in.iNext - pIter->in.iCurrent) - 2; + + /* Ensure that only changesets, or only patchsets, but not a mixture + ** of both, are being combined. It is an error to try to combine a + ** changeset and a patchset. */ + if( pGrp->pList==0 ){ + pGrp->bPatch = pIter->bPatchset; + }else if( pIter->bPatchset!=pGrp->bPatch ){ + rc = SQLITE_ERROR; + } + + if( rc==SQLITE_OK ){ + const char *zTab = 0; + sqlite3changeset_op(pIter, &zTab, &nCol, &op, &bIndirect); + rc = sessionChangesetFindTable(pGrp, zTab, pIter, &pTab); + } + + if( rc==SQLITE_OK && nColnCol ){ + SessionBuffer *pBuf = &pGrp->rec; + rc = sessionChangesetExtendRecord(pGrp, pTab, nCol, op, aRec, nRec, pBuf); + aRec = pBuf->aBuf; + nRec = pBuf->nBuf; + assert( pGrp->db ); + } + + if( rc==SQLITE_OK && sessionGrowHash(0, pIter->bPatchset, pTab) ){ + rc = SQLITE_NOMEM; + } + + if( rc==SQLITE_OK ){ + /* Search for existing entry. If found, remove it from the hash table. + ** Code below may link it back in. */ iHash = sessionChangeHash( pTab, (pIter->bPatchset && op==SQLITE_DELETE), aRec, pTab->nChange ); - - /* Search for existing entry. If found, remove it from the hash table. - ** Code below may link it back in. - */ for(pp=&pTab->apChange[iHash]; *pp; pp=&(*pp)->pNext){ int bPkOnly1 = 0; int bPkOnly2 = 0; @@ -225199,16 +230757,39 @@ static int sessionChangesetToHash( break; } } + } + if( rc==SQLITE_OK ){ rc = sessionChangeMerge(pTab, bRebase, pIter->bPatchset, pExist, op, bIndirect, aRec, nRec, &pChange ); - if( rc ) break; - if( pChange ){ - pChange->pNext = pTab->apChange[iHash]; - pTab->apChange[iHash] = pChange; - pTab->nEntry++; - } + } + if( rc==SQLITE_OK && pChange ){ + pChange->pNext = pTab->apChange[iHash]; + pTab->apChange[iHash] = pChange; + pTab->nEntry++; + } + + if( rc==SQLITE_OK ) rc = pIter->rc; + return rc; +} + +/* +** Add all changes in the changeset traversed by the iterator passed as +** the first argument to the changegroup hash tables. +*/ +static int sessionChangesetToHash( + sqlite3_changeset_iter *pIter, /* Iterator to read from */ + sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */ + int bRebase /* True if hash table is for rebasing */ +){ + u8 *aRec; + int nRec; + int rc = SQLITE_OK; + + while( SQLITE_ROW==(sessionChangesetNext(pIter, &aRec, &nRec, 0)) ){ + rc = sessionOneChangeToHash(pGrp, pIter, bRebase); + if( rc!=SQLITE_OK ) break; } if( rc==SQLITE_OK ) rc = pIter->rc; @@ -225297,6 +230878,31 @@ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp){ return rc; } +/* +** Provide a database schema to the changegroup object. +*/ +SQLITE_API int sqlite3changegroup_schema( + sqlite3_changegroup *pGrp, + sqlite3 *db, + const char *zDb +){ + int rc = SQLITE_OK; + + if( pGrp->pList || pGrp->db ){ + /* Cannot add a schema after one or more calls to sqlite3changegroup_add(), + ** or after sqlite3changegroup_schema() has already been called. */ + rc = SQLITE_MISUSE; + }else{ + pGrp->zDb = sqlite3_mprintf("%s", zDb); + if( pGrp->zDb==0 ){ + rc = SQLITE_NOMEM; + }else{ + pGrp->db = db; + } + } + return rc; +} + /* ** Add the changeset currently stored in buffer pData, size nData bytes, ** to changeset-group p. @@ -225313,6 +230919,23 @@ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup *pGrp, int nData, void return rc; } +/* +** Add a single change to a changeset-group. +*/ +SQLITE_API int sqlite3changegroup_add_change( + sqlite3_changegroup *pGrp, + sqlite3_changeset_iter *pIter +){ + if( pIter->in.iCurrent==pIter->in.iNext + || pIter->rc!=SQLITE_OK + || pIter->bInvert + ){ + /* Iterator does not point to any valid entry or is an INVERT iterator. */ + return SQLITE_ERROR; + } + return sessionOneChangeToHash(pGrp, pIter, 0); +} + /* ** Obtain a buffer containing a changeset representing the concatenation ** of all changesets added to the group so far. @@ -225360,7 +230983,9 @@ SQLITE_API int sqlite3changegroup_output_strm( */ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup *pGrp){ if( pGrp ){ + sqlite3_free(pGrp->zDb); sessionDeleteTable(0, pGrp->pList); + sqlite3_free(pGrp->rec.aBuf); sqlite3_free(pGrp); } } @@ -225762,6 +231387,7 @@ SQLITE_API int sqlite3rebaser_rebase_strm( SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p){ if( p ){ sessionDeleteTable(0, p->grp.pList); + sqlite3_free(p->grp.rec.aBuf); sqlite3_free(p); } } @@ -225859,8 +231485,8 @@ struct Fts5PhraseIter { ** EXTENSION API FUNCTIONS ** ** xUserData(pFts): -** Return a copy of the context pointer the extension function was -** registered with. +** Return a copy of the pUserData pointer passed to the xCreateFunction() +** API when the extension function was registered. ** ** xColumnTotalSize(pFts, iCol, pnToken): ** If parameter iCol is less than zero, set output variable *pnToken @@ -225892,8 +231518,11 @@ struct Fts5PhraseIter { ** created with the "columnsize=0" option. ** ** xColumnText: -** This function attempts to retrieve the text of column iCol of the -** current document. If successful, (*pz) is set to point to a buffer +** If parameter iCol is less than zero, or greater than or equal to the +** number of columns in the table, SQLITE_RANGE is returned. +** +** Otherwise, this function attempts to retrieve the text of column iCol of +** the current document. If successful, (*pz) is set to point to a buffer ** containing the text in utf-8 encoding, (*pn) is set to the size in bytes ** (not characters) of the buffer and SQLITE_OK is returned. Otherwise, ** if an error occurs, an SQLite error code is returned and the final values @@ -225903,8 +231532,10 @@ struct Fts5PhraseIter { ** Returns the number of phrases in the current query expression. ** ** xPhraseSize: -** Returns the number of tokens in phrase iPhrase of the query. Phrases -** are numbered starting from zero. +** If parameter iCol is less than zero, or greater than or equal to the +** number of phrases in the current query, as returned by xPhraseCount, +** 0 is returned. Otherwise, this function returns the number of tokens in +** phrase iPhrase of the query. Phrases are numbered starting from zero. ** ** xInstCount: ** Set *pnInst to the total number of occurrences of all phrases within @@ -225920,12 +231551,13 @@ struct Fts5PhraseIter { ** Query for the details of phrase match iIdx within the current row. ** Phrase matches are numbered starting from zero, so the iIdx argument ** should be greater than or equal to zero and smaller than the value -** output by xInstCount(). +** output by xInstCount(). If iIdx is less than zero or greater than +** or equal to the value returned by xInstCount(), SQLITE_RANGE is returned. ** -** Usually, output parameter *piPhrase is set to the phrase number, *piCol +** Otherwise, output parameter *piPhrase is set to the phrase number, *piCol ** to the column in which it occurs and *piOff the token offset of the -** first token of the phrase. Returns SQLITE_OK if successful, or an error -** code (i.e. SQLITE_NOMEM) if an error occurs. +** first token of the phrase. SQLITE_OK is returned if successful, or an +** error code (i.e. SQLITE_NOMEM) if an error occurs. ** ** This API can be quite slow if used with an FTS5 table created with the ** "detail=none" or "detail=column" option. @@ -225951,6 +231583,10 @@ struct Fts5PhraseIter { ** Invoking Api.xUserData() returns a copy of the pointer passed as ** the third argument to pUserData. ** +** If parameter iPhrase is less than zero, or greater than or equal to +** the number of phrases in the query, as returned by xPhraseCount(), +** this function returns SQLITE_RANGE. +** ** If the callback function returns any value other than SQLITE_OK, the ** query is abandoned and the xQueryPhrase function returns immediately. ** If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK. @@ -226065,9 +231701,42 @@ struct Fts5PhraseIter { ** ** xPhraseNextColumn() ** See xPhraseFirstColumn above. +** +** xQueryToken(pFts5, iPhrase, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase iPhrase of the current +** query. Before returning, output parameter *ppToken is set to point +** to a buffer containing the requested token, and *pnToken to the +** size of this buffer in bytes. +** +** If iPhrase or iToken are less than zero, or if iPhrase is greater than +** or equal to the number of phrases in the query as reported by +** xPhraseCount(), or if iToken is equal to or greater than the number of +** tokens in the phrase, SQLITE_RANGE is returned and *ppToken and *pnToken + are both zeroed. +** +** The output text is not a copy of the query text that specified the +** token. It is the output of the tokenizer module. For tokendata=1 +** tables, this includes any embedded 0x00 and trailing data. +** +** xInstToken(pFts5, iIdx, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase hit iIdx within the +** current row. If iIdx is less than zero or greater than or equal to the +** value returned by xInstCount(), SQLITE_RANGE is returned. Otherwise, +** output variable (*ppToken) is set to point to a buffer containing the +** matching document token, and (*pnToken) to the size of that buffer in +** bytes. This API is not available if the specified token matches a +** prefix query term. In that case both output variables are always set +** to 0. +** +** The output text is not a copy of the document text that was tokenized. +** It is the output of the tokenizer module. For tokendata=1 tables, this +** includes any embedded 0x00 and trailing data. +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. */ struct Fts5ExtensionApi { - int iVersion; /* Currently always set to 2 */ + int iVersion; /* Currently always set to 3 */ void *(*xUserData)(Fts5Context*); @@ -226102,6 +231771,13 @@ struct Fts5ExtensionApi { int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*); void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol); + + /* Below this point are iVersion>=3 only */ + int (*xQueryToken)(Fts5Context*, + int iPhrase, int iToken, + const char **ppToken, int *pnToken + ); + int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*); }; /* @@ -226576,6 +232252,7 @@ struct Fts5Config { char *zContent; /* content table */ char *zContentRowid; /* "content_rowid=" option value */ int bColumnsize; /* "columnsize=" option value (dflt==1) */ + int bTokendata; /* "tokendata=" option value (dflt==0) */ int eDetail; /* FTS5_DETAIL_XXX value */ char *zContentExprlist; Fts5Tokenizer *pTok; @@ -226764,17 +232441,19 @@ struct Fts5IndexIter { /* ** Values used as part of the flags argument passed to IndexQuery(). */ -#define FTS5INDEX_QUERY_PREFIX 0x0001 /* Prefix query */ -#define FTS5INDEX_QUERY_DESC 0x0002 /* Docs in descending rowid order */ -#define FTS5INDEX_QUERY_TEST_NOIDX 0x0004 /* Do not use prefix index */ -#define FTS5INDEX_QUERY_SCAN 0x0008 /* Scan query (fts5vocab) */ +#define FTS5INDEX_QUERY_PREFIX 0x0001 /* Prefix query */ +#define FTS5INDEX_QUERY_DESC 0x0002 /* Docs in descending rowid order */ +#define FTS5INDEX_QUERY_TEST_NOIDX 0x0004 /* Do not use prefix index */ +#define FTS5INDEX_QUERY_SCAN 0x0008 /* Scan query (fts5vocab) */ /* The following are used internally by the fts5_index.c module. They are ** defined here only to make it easier to avoid clashes with the flags ** above. */ -#define FTS5INDEX_QUERY_SKIPEMPTY 0x0010 -#define FTS5INDEX_QUERY_NOOUTPUT 0x0020 -#define FTS5INDEX_QUERY_SKIPHASH 0x0040 +#define FTS5INDEX_QUERY_SKIPEMPTY 0x0010 +#define FTS5INDEX_QUERY_NOOUTPUT 0x0020 +#define FTS5INDEX_QUERY_SKIPHASH 0x0040 +#define FTS5INDEX_QUERY_NOTOKENDATA 0x0080 +#define FTS5INDEX_QUERY_SCANONETERM 0x0100 /* ** Create/destroy an Fts5Index object. @@ -226843,6 +232522,10 @@ static void *sqlite3Fts5StructureRef(Fts5Index*); static void sqlite3Fts5StructureRelease(void*); static int sqlite3Fts5StructureTest(Fts5Index*, void*); +/* +** Used by xInstToken(): +*/ +static int sqlite3Fts5IterToken(Fts5IndexIter*, i64, int, int, const char**, int*); /* ** Insert or remove data to or from the index. Each time a document is @@ -226920,6 +232603,13 @@ static int sqlite3Fts5IndexLoadConfig(Fts5Index *p); static int sqlite3Fts5IndexGetOrigin(Fts5Index *p, i64 *piOrigin); static int sqlite3Fts5IndexContentlessDelete(Fts5Index *p, i64 iOrigin, i64 iRowid); +static void sqlite3Fts5IndexIterClearTokendata(Fts5IndexIter*); + +/* Used to populate hash tables for xInstToken in detail=none/column mode. */ +static int sqlite3Fts5IndexIterWriteTokendata( + Fts5IndexIter*, const char*, int, i64 iRowid, int iCol, int iOff +); + /* ** End of interface to code in fts5_index.c. **************************************************************************/ @@ -227025,6 +232715,7 @@ static void sqlite3Fts5HashScanNext(Fts5Hash*); static int sqlite3Fts5HashScanEof(Fts5Hash*); static void sqlite3Fts5HashScanEntry(Fts5Hash *, const char **pzTerm, /* OUT: term (nul-terminated) */ + int *pnTerm, /* OUT: Size of term in bytes */ const u8 **ppDoclist, /* OUT: pointer to doclist */ int *pnDoclist /* OUT: size of doclist in bytes */ ); @@ -227151,6 +232842,10 @@ static int sqlite3Fts5ExprClonePhrase(Fts5Expr*, int, Fts5Expr**); static int sqlite3Fts5ExprPhraseCollist(Fts5Expr *, int, const u8 **, int *); +static int sqlite3Fts5ExprQueryToken(Fts5Expr*, int, int, const char**, int*); +static int sqlite3Fts5ExprInstToken(Fts5Expr*, i64, int, int, int, int, const char**, int*); +static void sqlite3Fts5ExprClearTokens(Fts5Expr*); + /******************************************* ** The fts5_expr.c API above this point is used by the other hand-written ** C code in this module. The interfaces below this point are called by @@ -227387,6 +233082,9 @@ static void sqlite3Fts5UnicodeAscii(u8*, u8*); ** sqlite3Fts5ParserARG_STORE Code to store %extra_argument into fts5yypParser ** sqlite3Fts5ParserARG_FETCH Code to extract %extra_argument from fts5yypParser ** sqlite3Fts5ParserCTX_* As sqlite3Fts5ParserARG_ except for %extra_context +** fts5YYREALLOC Name of the realloc() function to use +** fts5YYFREE Name of the free() function to use +** fts5YYDYNSTACK True if stack space should be extended on heap ** fts5YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. ** fts5YYNSTATE the combined number of states. @@ -227400,6 +233098,8 @@ static void sqlite3Fts5UnicodeAscii(u8*, u8*); ** fts5YY_NO_ACTION The fts5yy_action[] code for no-op ** fts5YY_MIN_REDUCE Minimum value for reduce actions ** fts5YY_MAX_REDUCE Maximum value for reduce actions +** fts5YY_MIN_DSTRCTR Minimum symbol value that has a destructor +** fts5YY_MAX_DSTRCTR Maximum symbol value that has a destructor */ #ifndef INTERFACE # define INTERFACE 1 @@ -227426,6 +233126,9 @@ typedef union { #define sqlite3Fts5ParserARG_PARAM ,pParse #define sqlite3Fts5ParserARG_FETCH Fts5Parse *pParse=fts5yypParser->pParse; #define sqlite3Fts5ParserARG_STORE fts5yypParser->pParse=pParse; +#define fts5YYREALLOC realloc +#define fts5YYFREE free +#define fts5YYDYNSTACK 0 #define sqlite3Fts5ParserCTX_SDECL #define sqlite3Fts5ParserCTX_PDECL #define sqlite3Fts5ParserCTX_PARAM @@ -227443,6 +233146,8 @@ typedef union { #define fts5YY_NO_ACTION 82 #define fts5YY_MIN_REDUCE 83 #define fts5YY_MAX_REDUCE 110 +#define fts5YY_MIN_DSTRCTR 16 +#define fts5YY_MAX_DSTRCTR 24 /************* End control #defines *******************************************/ #define fts5YY_NLOOKAHEAD ((int)(sizeof(fts5yy_lookahead)/sizeof(fts5yy_lookahead[0]))) @@ -227458,6 +233163,22 @@ typedef union { # define fts5yytestcase(X) #endif +/* Macro to determine if stack space has the ability to grow using +** heap memory. +*/ +#if fts5YYSTACKDEPTH<=0 || fts5YYDYNSTACK +# define fts5YYGROWABLESTACK 1 +#else +# define fts5YYGROWABLESTACK 0 +#endif + +/* Guarantee a minimum number of initial stack slots. +*/ +#if fts5YYSTACKDEPTH<=0 +# undef fts5YYSTACKDEPTH +# define fts5YYSTACKDEPTH 2 /* Need a minimum stack size */ +#endif + /* Next are the tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement @@ -227618,14 +233339,9 @@ struct fts5yyParser { #endif sqlite3Fts5ParserARG_SDECL /* A place to hold %extra_argument */ sqlite3Fts5ParserCTX_SDECL /* A place to hold %extra_context */ -#if fts5YYSTACKDEPTH<=0 - int fts5yystksz; /* Current side of the stack */ - fts5yyStackEntry *fts5yystack; /* The parser's stack */ - fts5yyStackEntry fts5yystk0; /* First stack entry */ -#else - fts5yyStackEntry fts5yystack[fts5YYSTACKDEPTH]; /* The parser's stack */ - fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */ -#endif + fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */ + fts5yyStackEntry *fts5yystack; /* The parser stack */ + fts5yyStackEntry fts5yystk0[fts5YYSTACKDEPTH]; /* Initial stack space */ }; typedef struct fts5yyParser fts5yyParser; @@ -227732,37 +233448,45 @@ static const char *const fts5yyRuleName[] = { #endif /* NDEBUG */ -#if fts5YYSTACKDEPTH<=0 +#if fts5YYGROWABLESTACK /* ** Try to increase the size of the parser stack. Return the number ** of errors. Return 0 on success. */ static int fts5yyGrowStack(fts5yyParser *p){ + int oldSize = 1 + (int)(p->fts5yystackEnd - p->fts5yystack); int newSize; int idx; fts5yyStackEntry *pNew; - newSize = p->fts5yystksz*2 + 100; - idx = p->fts5yytos ? (int)(p->fts5yytos - p->fts5yystack) : 0; - if( p->fts5yystack==&p->fts5yystk0 ){ - pNew = malloc(newSize*sizeof(pNew[0])); - if( pNew ) pNew[0] = p->fts5yystk0; + newSize = oldSize*2 + 100; + idx = (int)(p->fts5yytos - p->fts5yystack); + if( p->fts5yystack==p->fts5yystk0 ){ + pNew = fts5YYREALLOC(0, newSize*sizeof(pNew[0])); + if( pNew==0 ) return 1; + memcpy(pNew, p->fts5yystack, oldSize*sizeof(pNew[0])); }else{ - pNew = realloc(p->fts5yystack, newSize*sizeof(pNew[0])); + pNew = fts5YYREALLOC(p->fts5yystack, newSize*sizeof(pNew[0])); + if( pNew==0 ) return 1; } - if( pNew ){ - p->fts5yystack = pNew; - p->fts5yytos = &p->fts5yystack[idx]; + p->fts5yystack = pNew; + p->fts5yytos = &p->fts5yystack[idx]; #ifndef NDEBUG - if( fts5yyTraceFILE ){ - fprintf(fts5yyTraceFILE,"%sStack grows from %d to %d entries.\n", - fts5yyTracePrompt, p->fts5yystksz, newSize); - } -#endif - p->fts5yystksz = newSize; + if( fts5yyTraceFILE ){ + fprintf(fts5yyTraceFILE,"%sStack grows from %d to %d entries.\n", + fts5yyTracePrompt, oldSize, newSize); } - return pNew==0; +#endif + p->fts5yystackEnd = &p->fts5yystack[newSize-1]; + return 0; } +#endif /* fts5YYGROWABLESTACK */ + +#if !fts5YYGROWABLESTACK +/* For builds that do no have a growable stack, fts5yyGrowStack always +** returns an error. +*/ +# define fts5yyGrowStack(X) 1 #endif /* Datatype of the argument to the memory allocated passed as the @@ -227782,24 +233506,14 @@ static void sqlite3Fts5ParserInit(void *fts5yypRawParser sqlite3Fts5ParserCTX_PD #ifdef fts5YYTRACKMAXSTACKDEPTH fts5yypParser->fts5yyhwm = 0; #endif -#if fts5YYSTACKDEPTH<=0 - fts5yypParser->fts5yytos = NULL; - fts5yypParser->fts5yystack = NULL; - fts5yypParser->fts5yystksz = 0; - if( fts5yyGrowStack(fts5yypParser) ){ - fts5yypParser->fts5yystack = &fts5yypParser->fts5yystk0; - fts5yypParser->fts5yystksz = 1; - } -#endif + fts5yypParser->fts5yystack = fts5yypParser->fts5yystk0; + fts5yypParser->fts5yystackEnd = &fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1]; #ifndef fts5YYNOERRORRECOVERY fts5yypParser->fts5yyerrcnt = -1; #endif fts5yypParser->fts5yytos = fts5yypParser->fts5yystack; fts5yypParser->fts5yystack[0].stateno = 0; fts5yypParser->fts5yystack[0].major = 0; -#if fts5YYSTACKDEPTH>0 - fts5yypParser->fts5yystackEnd = &fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1]; -#endif } #ifndef sqlite3Fts5Parser_ENGINEALWAYSONSTACK @@ -227913,9 +233627,26 @@ static void fts5yy_pop_parser_stack(fts5yyParser *pParser){ */ static void sqlite3Fts5ParserFinalize(void *p){ fts5yyParser *pParser = (fts5yyParser*)p; - while( pParser->fts5yytos>pParser->fts5yystack ) fts5yy_pop_parser_stack(pParser); -#if fts5YYSTACKDEPTH<=0 - if( pParser->fts5yystack!=&pParser->fts5yystk0 ) free(pParser->fts5yystack); + + /* In-lined version of calling fts5yy_pop_parser_stack() for each + ** element left in the stack */ + fts5yyStackEntry *fts5yytos = pParser->fts5yytos; + while( fts5yytos>pParser->fts5yystack ){ +#ifndef NDEBUG + if( fts5yyTraceFILE ){ + fprintf(fts5yyTraceFILE,"%sPopping %s\n", + fts5yyTracePrompt, + fts5yyTokenName[fts5yytos->major]); + } +#endif + if( fts5yytos->major>=fts5YY_MIN_DSTRCTR ){ + fts5yy_destructor(pParser, fts5yytos->major, &fts5yytos->minor); + } + fts5yytos--; + } + +#if fts5YYGROWABLESTACK + if( pParser->fts5yystack!=pParser->fts5yystk0 ) fts5YYFREE(pParser->fts5yystack); #endif } @@ -228142,25 +233873,19 @@ static void fts5yy_shift( assert( fts5yypParser->fts5yyhwm == (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack) ); } #endif -#if fts5YYSTACKDEPTH>0 - if( fts5yypParser->fts5yytos>fts5yypParser->fts5yystackEnd ){ - fts5yypParser->fts5yytos--; - fts5yyStackOverflow(fts5yypParser); - return; - } -#else - if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz] ){ + fts5yytos = fts5yypParser->fts5yytos; + if( fts5yytos>fts5yypParser->fts5yystackEnd ){ if( fts5yyGrowStack(fts5yypParser) ){ fts5yypParser->fts5yytos--; fts5yyStackOverflow(fts5yypParser); return; } + fts5yytos = fts5yypParser->fts5yytos; + assert( fts5yytos <= fts5yypParser->fts5yystackEnd ); } -#endif if( fts5yyNewState > fts5YY_MAX_SHIFT ){ fts5yyNewState += fts5YY_MIN_REDUCE - fts5YY_MIN_SHIFTREDUCE; } - fts5yytos = fts5yypParser->fts5yytos; fts5yytos->stateno = fts5yyNewState; fts5yytos->major = fts5yyMajor; fts5yytos->minor.fts5yy0 = fts5yyMinor; @@ -228597,19 +234322,12 @@ static void sqlite3Fts5Parser( (int)(fts5yypParser->fts5yytos - fts5yypParser->fts5yystack)); } #endif -#if fts5YYSTACKDEPTH>0 if( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystackEnd ){ - fts5yyStackOverflow(fts5yypParser); - break; - } -#else - if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5yypParser->fts5yystksz-1] ){ if( fts5yyGrowStack(fts5yypParser) ){ fts5yyStackOverflow(fts5yypParser); break; } } -#endif } fts5yyact = fts5yy_reduce(fts5yypParser,fts5yyruleno,fts5yymajor,fts5yyminor sqlite3Fts5ParserCTX_PARAM); }else if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){ @@ -228865,15 +234583,19 @@ static int fts5CInstIterInit( */ typedef struct HighlightContext HighlightContext; struct HighlightContext { - CInstIter iter; /* Coalesced Instance Iterator */ - int iPos; /* Current token offset in zIn[] */ + /* Constant parameters to fts5HighlightCb() */ int iRangeStart; /* First token to include */ int iRangeEnd; /* If non-zero, last token to include */ const char *zOpen; /* Opening highlight */ const char *zClose; /* Closing highlight */ const char *zIn; /* Input text */ int nIn; /* Size of input text in bytes */ - int iOff; /* Current offset within zIn[] */ + + /* Variables modified by fts5HighlightCb() */ + CInstIter iter; /* Coalesced Instance Iterator */ + int iPos; /* Current token offset in zIn[] */ + int iOff; /* Have copied up to this offset in zIn[] */ + int bOpen; /* True if highlight is open */ char *zOut; /* Output value */ }; @@ -228906,8 +234628,8 @@ static int fts5HighlightCb( int tflags, /* Mask of FTS5_TOKEN_* flags */ const char *pToken, /* Buffer containing token */ int nToken, /* Size of token in bytes */ - int iStartOff, /* Start offset of token */ - int iEndOff /* End offset of token */ + int iStartOff, /* Start byte offset of token */ + int iEndOff /* End byte offset of token */ ){ HighlightContext *p = (HighlightContext*)pContext; int rc = SQLITE_OK; @@ -228923,30 +234645,55 @@ static int fts5HighlightCb( if( p->iRangeStart && iPos==p->iRangeStart ) p->iOff = iStartOff; } - if( iPos==p->iter.iStart ){ + /* If the parenthesis is open, and this token is not part of the current + ** phrase, and the starting byte offset of this token is past the point + ** that has currently been copied into the output buffer, close the + ** parenthesis. */ + if( p->bOpen + && (iPos<=p->iter.iStart || p->iter.iStart<0) + && iStartOff>p->iOff + ){ + fts5HighlightAppend(&rc, p, p->zClose, -1); + p->bOpen = 0; + } + + /* If this is the start of a new phrase, and the highlight is not open: + ** + ** * copy text from the input up to the start of the phrase, and + ** * open the highlight. + */ + if( iPos==p->iter.iStart && p->bOpen==0 ){ fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iStartOff - p->iOff); fts5HighlightAppend(&rc, p, p->zOpen, -1); p->iOff = iStartOff; + p->bOpen = 1; } if( iPos==p->iter.iEnd ){ - if( p->iRangeEnd>=0 && p->iter.iStartiRangeStart ){ + if( p->bOpen==0 ){ + assert( p->iRangeEnd>=0 ); fts5HighlightAppend(&rc, p, p->zOpen, -1); + p->bOpen = 1; } fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); - fts5HighlightAppend(&rc, p, p->zClose, -1); p->iOff = iEndOff; + if( rc==SQLITE_OK ){ rc = fts5CInstIterNext(&p->iter); } } - if( p->iRangeEnd>=0 && iPos==p->iRangeEnd ){ - fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); - p->iOff = iEndOff; - if( iPos>=p->iter.iStart && iPositer.iEnd ){ + if( iPos==p->iRangeEnd ){ + if( p->bOpen ){ + if( p->iter.iStart>=0 && iPos>=p->iter.iStart ){ + fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); + p->iOff = iEndOff; + } fts5HighlightAppend(&rc, p, p->zClose, -1); + p->bOpen = 0; } + fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); + p->iOff = iEndOff; } return rc; @@ -228978,8 +234725,10 @@ static void fts5HighlightFunction( ctx.zClose = (const char*)sqlite3_value_text(apVal[2]); ctx.iRangeEnd = -1; rc = pApi->xColumnText(pFts, iCol, &ctx.zIn, &ctx.nIn); - - if( ctx.zIn ){ + if( rc==SQLITE_RANGE ){ + sqlite3_result_text(pCtx, "", -1, SQLITE_STATIC); + rc = SQLITE_OK; + }else if( ctx.zIn ){ if( rc==SQLITE_OK ){ rc = fts5CInstIterInit(pApi, pFts, iCol, &ctx.iter); } @@ -228987,6 +234736,9 @@ static void fts5HighlightFunction( if( rc==SQLITE_OK ){ rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb); } + if( ctx.bOpen ){ + fts5HighlightAppend(&rc, &ctx, ctx.zClose, -1); + } fts5HighlightAppend(&rc, &ctx, &ctx.zIn[ctx.iOff], ctx.nIn - ctx.iOff); if( rc==SQLITE_OK ){ @@ -229265,6 +235017,9 @@ static void fts5SnippetFunction( if( rc==SQLITE_OK ){ rc = pApi->xTokenize(pFts, ctx.zIn, ctx.nIn, (void*)&ctx,fts5HighlightCb); } + if( ctx.bOpen ){ + fts5HighlightAppend(&rc, &ctx, ctx.zClose, -1); + } if( ctx.iRangeEnd>=(nColSize-1) ){ fts5HighlightAppend(&rc, &ctx, &ctx.zIn[ctx.iOff], ctx.nIn - ctx.iOff); }else{ @@ -229540,6 +235295,7 @@ static void sqlite3Fts5BufferAppendBlob( ){ if( nData ){ if( fts5BufferGrow(pRc, pBuf, nData) ) return; + assert( pBuf->p!=0 ); memcpy(&pBuf->p[pBuf->n], pData, nData); pBuf->n += nData; } @@ -229641,6 +235397,7 @@ static int sqlite3Fts5PoslistNext64( i64 *piOff /* IN/OUT: Current offset */ ){ int i = *pi; + assert( a!=0 || i==0 ); if( i>=n ){ /* EOF */ *piOff = -1; @@ -229648,6 +235405,7 @@ static int sqlite3Fts5PoslistNext64( }else{ i64 iOff = *piOff; u32 iVal; + assert( a!=0 ); fts5FastGetVarint32(a, i, iVal); if( iVal<=1 ){ if( iVal==0 ){ @@ -230279,6 +236037,16 @@ static int fts5ConfigParseSpecial( return rc; } + if( sqlite3_strnicmp("tokendata", zCmd, nCmd)==0 ){ + if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1]!='\0' ){ + *pzErr = sqlite3_mprintf("malformed tokendata=... directive"); + rc = SQLITE_ERROR; + }else{ + pConfig->bTokendata = (zArg[0]=='1'); + } + return rc; + } + *pzErr = sqlite3_mprintf("unrecognized option: \"%.*s\"", nCmd, zCmd); return SQLITE_ERROR; } @@ -231012,7 +236780,9 @@ struct Fts5ExprNode { struct Fts5ExprTerm { u8 bPrefix; /* True for a prefix term */ u8 bFirst; /* True if token must be first in column */ - char *zTerm; /* nul-terminated term */ + char *pTerm; /* Term data */ + int nQueryTerm; /* Effective size of term in bytes */ + int nFullTerm; /* Size of term in bytes incl. tokendata */ Fts5IndexIter *pIter; /* Iterator for this term */ Fts5ExprTerm *pSynonym; /* Pointer to first in list of synonyms */ }; @@ -231879,7 +237649,7 @@ static int fts5ExprNearInitAll( p->pIter = 0; } rc = sqlite3Fts5IndexQuery( - pExpr->pIndex, p->zTerm, (int)strlen(p->zTerm), + pExpr->pIndex, p->pTerm, p->nQueryTerm, (pTerm->bPrefix ? FTS5INDEX_QUERY_PREFIX : 0) | (pExpr->bDesc ? FTS5INDEX_QUERY_DESC : 0), pNear->pColset, @@ -232516,7 +238286,7 @@ static void fts5ExprPhraseFree(Fts5ExprPhrase *pPhrase){ Fts5ExprTerm *pSyn; Fts5ExprTerm *pNext; Fts5ExprTerm *pTerm = &pPhrase->aTerm[i]; - sqlite3_free(pTerm->zTerm); + sqlite3_free(pTerm->pTerm); sqlite3Fts5IterClose(pTerm->pIter); for(pSyn=pTerm->pSynonym; pSyn; pSyn=pNext){ pNext = pSyn->pSynonym; @@ -232614,6 +238384,7 @@ static Fts5ExprNearset *sqlite3Fts5ParseNearset( typedef struct TokenCtx TokenCtx; struct TokenCtx { Fts5ExprPhrase *pPhrase; + Fts5Config *pConfig; int rc; }; @@ -232647,8 +238418,12 @@ static int fts5ParseTokenize( rc = SQLITE_NOMEM; }else{ memset(pSyn, 0, (size_t)nByte); - pSyn->zTerm = ((char*)pSyn) + sizeof(Fts5ExprTerm) + sizeof(Fts5Buffer); - memcpy(pSyn->zTerm, pToken, nToken); + pSyn->pTerm = ((char*)pSyn) + sizeof(Fts5ExprTerm) + sizeof(Fts5Buffer); + pSyn->nFullTerm = pSyn->nQueryTerm = nToken; + if( pCtx->pConfig->bTokendata ){ + pSyn->nQueryTerm = (int)strlen(pSyn->pTerm); + } + memcpy(pSyn->pTerm, pToken, nToken); pSyn->pSynonym = pPhrase->aTerm[pPhrase->nTerm-1].pSynonym; pPhrase->aTerm[pPhrase->nTerm-1].pSynonym = pSyn; } @@ -232673,7 +238448,11 @@ static int fts5ParseTokenize( if( rc==SQLITE_OK ){ pTerm = &pPhrase->aTerm[pPhrase->nTerm++]; memset(pTerm, 0, sizeof(Fts5ExprTerm)); - pTerm->zTerm = sqlite3Fts5Strndup(&rc, pToken, nToken); + pTerm->pTerm = sqlite3Fts5Strndup(&rc, pToken, nToken); + pTerm->nFullTerm = pTerm->nQueryTerm = nToken; + if( pCtx->pConfig->bTokendata && rc==SQLITE_OK ){ + pTerm->nQueryTerm = (int)strlen(pTerm->pTerm); + } } } @@ -232740,6 +238519,7 @@ static Fts5ExprPhrase *sqlite3Fts5ParseTerm( memset(&sCtx, 0, sizeof(TokenCtx)); sCtx.pPhrase = pAppend; + sCtx.pConfig = pConfig; rc = fts5ParseStringFromToken(pToken, &z); if( rc==SQLITE_OK ){ @@ -232787,12 +238567,15 @@ static int sqlite3Fts5ExprClonePhrase( Fts5Expr **ppNew ){ int rc = SQLITE_OK; /* Return code */ - Fts5ExprPhrase *pOrig; /* The phrase extracted from pExpr */ + Fts5ExprPhrase *pOrig = 0; /* The phrase extracted from pExpr */ Fts5Expr *pNew = 0; /* Expression to return via *ppNew */ - TokenCtx sCtx = {0,0}; /* Context object for fts5ParseTokenize */ - - pOrig = pExpr->apExprPhrase[iPhrase]; - pNew = (Fts5Expr*)sqlite3Fts5MallocZero(&rc, sizeof(Fts5Expr)); + TokenCtx sCtx = {0,0,0}; /* Context object for fts5ParseTokenize */ + if( iPhrase<0 || iPhrase>=pExpr->nPhrase ){ + rc = SQLITE_RANGE; + }else{ + pOrig = pExpr->apExprPhrase[iPhrase]; + pNew = (Fts5Expr*)sqlite3Fts5MallocZero(&rc, sizeof(Fts5Expr)); + } if( rc==SQLITE_OK ){ pNew->apExprPhrase = (Fts5ExprPhrase**)sqlite3Fts5MallocZero(&rc, sizeof(Fts5ExprPhrase*)); @@ -232805,7 +238588,7 @@ static int sqlite3Fts5ExprClonePhrase( pNew->pRoot->pNear = (Fts5ExprNearset*)sqlite3Fts5MallocZero(&rc, sizeof(Fts5ExprNearset) + sizeof(Fts5ExprPhrase*)); } - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK && ALWAYS(pOrig!=0) ){ Fts5Colset *pColsetOrig = pOrig->pNode->pNear->pColset; if( pColsetOrig ){ sqlite3_int64 nByte; @@ -232819,26 +238602,27 @@ static int sqlite3Fts5ExprClonePhrase( } } - if( pOrig->nTerm ){ - int i; /* Used to iterate through phrase terms */ - for(i=0; rc==SQLITE_OK && inTerm; i++){ - int tflags = 0; - Fts5ExprTerm *p; - for(p=&pOrig->aTerm[i]; p && rc==SQLITE_OK; p=p->pSynonym){ - const char *zTerm = p->zTerm; - rc = fts5ParseTokenize((void*)&sCtx, tflags, zTerm, (int)strlen(zTerm), - 0, 0); - tflags = FTS5_TOKEN_COLOCATED; - } - if( rc==SQLITE_OK ){ - sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix; - sCtx.pPhrase->aTerm[i].bFirst = pOrig->aTerm[i].bFirst; + if( rc==SQLITE_OK ){ + if( pOrig->nTerm ){ + int i; /* Used to iterate through phrase terms */ + sCtx.pConfig = pExpr->pConfig; + for(i=0; rc==SQLITE_OK && inTerm; i++){ + int tflags = 0; + Fts5ExprTerm *p; + for(p=&pOrig->aTerm[i]; p && rc==SQLITE_OK; p=p->pSynonym){ + rc = fts5ParseTokenize((void*)&sCtx,tflags,p->pTerm,p->nFullTerm,0,0); + tflags = FTS5_TOKEN_COLOCATED; + } + if( rc==SQLITE_OK ){ + sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix; + sCtx.pPhrase->aTerm[i].bFirst = pOrig->aTerm[i].bFirst; + } } + }else{ + /* This happens when parsing a token or quoted phrase that contains + ** no token characters at all. (e.g ... MATCH '""'). */ + sCtx.pPhrase = sqlite3Fts5MallocZero(&rc, sizeof(Fts5ExprPhrase)); } - }else{ - /* This happens when parsing a token or quoted phrase that contains - ** no token characters at all. (e.g ... MATCH '""'). */ - sCtx.pPhrase = sqlite3Fts5MallocZero(&rc, sizeof(Fts5ExprPhrase)); } if( rc==SQLITE_OK && ALWAYS(sCtx.pPhrase) ){ @@ -233208,11 +238992,13 @@ static Fts5ExprNode *fts5ParsePhraseToAnd( if( parseGrowPhraseArray(pParse) ){ fts5ExprPhraseFree(pPhrase); }else{ + Fts5ExprTerm *p = &pNear->apPhrase[0]->aTerm[ii]; + Fts5ExprTerm *pTo = &pPhrase->aTerm[0]; pParse->apPhrase[pParse->nPhrase++] = pPhrase; pPhrase->nTerm = 1; - pPhrase->aTerm[0].zTerm = sqlite3Fts5Strndup( - &pParse->rc, pNear->apPhrase[0]->aTerm[ii].zTerm, -1 - ); + pTo->pTerm = sqlite3Fts5Strndup(&pParse->rc, p->pTerm, p->nFullTerm); + pTo->nQueryTerm = p->nQueryTerm; + pTo->nFullTerm = p->nFullTerm; pRet->apChild[ii] = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, sqlite3Fts5ParseNearset(pParse, 0, pPhrase) ); @@ -233397,16 +239183,17 @@ static char *fts5ExprTermPrint(Fts5ExprTerm *pTerm){ /* Determine the maximum amount of space required. */ for(p=pTerm; p; p=p->pSynonym){ - nByte += (int)strlen(pTerm->zTerm) * 2 + 3 + 2; + nByte += pTerm->nQueryTerm * 2 + 3 + 2; } zQuoted = sqlite3_malloc64(nByte); if( zQuoted ){ int i = 0; for(p=pTerm; p; p=p->pSynonym){ - char *zIn = p->zTerm; + char *zIn = p->pTerm; + char *zEnd = &zIn[p->nQueryTerm]; zQuoted[i++] = '"'; - while( *zIn ){ + while( zInnTerm; iTerm++){ - char *zTerm = pPhrase->aTerm[iTerm].zTerm; - zRet = fts5PrintfAppend(zRet, "%s%s", iTerm==0?"":" ", zTerm); + Fts5ExprTerm *p = &pPhrase->aTerm[iTerm]; + zRet = fts5PrintfAppend(zRet, "%s%.*s", iTerm==0?"":" ", + p->nQueryTerm, p->pTerm + ); if( pPhrase->aTerm[iTerm].bPrefix ){ zRet = fts5PrintfAppend(zRet, "*"); } @@ -233886,6 +239675,17 @@ static int fts5ExprColsetTest(Fts5Colset *pColset, int iCol){ return 0; } +/* +** pToken is a buffer nToken bytes in size that may or may not contain +** an embedded 0x00 byte. If it does, return the number of bytes in +** the buffer before the 0x00. If it does not, return nToken. +*/ +static int fts5QueryTerm(const char *pToken, int nToken){ + int ii; + for(ii=0; iipExpr; int i; + int nQuery = nToken; + i64 iRowid = pExpr->pRoot->iRowid; UNUSED_PARAM2(iUnused1, iUnused2); - if( nToken>FTS5_MAX_TOKEN_SIZE ) nToken = FTS5_MAX_TOKEN_SIZE; + if( nQuery>FTS5_MAX_TOKEN_SIZE ) nQuery = FTS5_MAX_TOKEN_SIZE; + if( pExpr->pConfig->bTokendata ){ + nQuery = fts5QueryTerm(pToken, nQuery); + } if( (tflags & FTS5_TOKEN_COLOCATED)==0 ) p->iOff++; for(i=0; inPhrase; i++){ - Fts5ExprTerm *pTerm; + Fts5ExprTerm *pT; if( p->aPopulator[i].bOk==0 ) continue; - for(pTerm=&pExpr->apExprPhrase[i]->aTerm[0]; pTerm; pTerm=pTerm->pSynonym){ - int nTerm = (int)strlen(pTerm->zTerm); - if( (nTerm==nToken || (nTermbPrefix)) - && memcmp(pTerm->zTerm, pToken, nTerm)==0 + for(pT=&pExpr->apExprPhrase[i]->aTerm[0]; pT; pT=pT->pSynonym){ + if( (pT->nQueryTerm==nQuery || (pT->nQueryTermbPrefix)) + && memcmp(pT->pTerm, pToken, pT->nQueryTerm)==0 ){ int rc = sqlite3Fts5PoslistWriterAppend( &pExpr->apExprPhrase[i]->poslist, &p->aPopulator[i].writer, p->iOff ); + if( rc==SQLITE_OK && pExpr->pConfig->bTokendata && !pT->bPrefix ){ + int iCol = p->iOff>>32; + int iTokOff = p->iOff & 0x7FFFFFFF; + rc = sqlite3Fts5IndexIterWriteTokendata( + pT->pIter, pToken, nToken, iRowid, iCol, iTokOff + ); + } if( rc ) return rc; break; } @@ -234048,6 +239859,83 @@ static int sqlite3Fts5ExprPhraseCollist( return rc; } +/* +** Does the work of the fts5_api.xQueryToken() API method. +*/ +static int sqlite3Fts5ExprQueryToken( + Fts5Expr *pExpr, + int iPhrase, + int iToken, + const char **ppOut, + int *pnOut +){ + Fts5ExprPhrase *pPhrase = 0; + + if( iPhrase<0 || iPhrase>=pExpr->nPhrase ){ + return SQLITE_RANGE; + } + pPhrase = pExpr->apExprPhrase[iPhrase]; + if( iToken<0 || iToken>=pPhrase->nTerm ){ + return SQLITE_RANGE; + } + + *ppOut = pPhrase->aTerm[iToken].pTerm; + *pnOut = pPhrase->aTerm[iToken].nFullTerm; + return SQLITE_OK; +} + +/* +** Does the work of the fts5_api.xInstToken() API method. +*/ +static int sqlite3Fts5ExprInstToken( + Fts5Expr *pExpr, + i64 iRowid, + int iPhrase, + int iCol, + int iOff, + int iToken, + const char **ppOut, + int *pnOut +){ + Fts5ExprPhrase *pPhrase = 0; + Fts5ExprTerm *pTerm = 0; + int rc = SQLITE_OK; + + if( iPhrase<0 || iPhrase>=pExpr->nPhrase ){ + return SQLITE_RANGE; + } + pPhrase = pExpr->apExprPhrase[iPhrase]; + if( iToken<0 || iToken>=pPhrase->nTerm ){ + return SQLITE_RANGE; + } + pTerm = &pPhrase->aTerm[iToken]; + if( pTerm->bPrefix==0 ){ + if( pExpr->pConfig->bTokendata ){ + rc = sqlite3Fts5IterToken( + pTerm->pIter, iRowid, iCol, iOff+iToken, ppOut, pnOut + ); + }else{ + *ppOut = pTerm->pTerm; + *pnOut = pTerm->nFullTerm; + } + } + return rc; +} + +/* +** Clear the token mappings for all Fts5IndexIter objects mannaged by +** the expression passed as the only argument. +*/ +static void sqlite3Fts5ExprClearTokens(Fts5Expr *pExpr){ + int ii; + for(ii=0; iinPhrase; ii++){ + Fts5ExprTerm *pT; + for(pT=&pExpr->apExprPhrase[ii]->aTerm[0]; pT; pT=pT->pSynonym){ + sqlite3Fts5IndexIterClearTokendata(pT->pIter); + } + } +} + /* ** 2014 August 11 ** @@ -234086,10 +239974,15 @@ struct Fts5Hash { /* ** Each entry in the hash table is represented by an object of the -** following type. Each object, its key (a nul-terminated string) and -** its current data are stored in a single memory allocation. The -** key immediately follows the object in memory. The position list -** data immediately follows the key data in memory. +** following type. Each object, its key, and its current data are stored +** in a single memory allocation. The key immediately follows the object +** in memory. The position list data immediately follows the key data +** in memory. +** +** The key is Fts5HashEntry.nKey bytes in size. It consists of a single +** byte identifying the index (either the main term index or a prefix-index), +** followed by the term data. For example: "0token". There is no +** nul-terminator - in this case nKey=6. ** ** The data that follows the key is in a similar, but not identical format ** to the doclist data stored in the database. It is: @@ -234224,8 +240117,7 @@ static int fts5HashResize(Fts5Hash *pHash){ unsigned int iHash; Fts5HashEntry *p = apOld[i]; apOld[i] = p->pHashNext; - iHash = fts5HashKey(nNew, (u8*)fts5EntryKey(p), - (int)strlen(fts5EntryKey(p))); + iHash = fts5HashKey(nNew, (u8*)fts5EntryKey(p), p->nKey); p->pHashNext = apNew[iHash]; apNew[iHash] = p; } @@ -234309,7 +240201,7 @@ static int sqlite3Fts5HashWrite( for(p=pHash->aSlot[iHash]; p; p=p->pHashNext){ char *zKey = fts5EntryKey(p); if( zKey[0]==bByte - && p->nKey==nToken + && p->nKey==nToken+1 && memcmp(&zKey[1], pToken, nToken)==0 ){ break; @@ -234339,9 +240231,9 @@ static int sqlite3Fts5HashWrite( zKey[0] = bByte; memcpy(&zKey[1], pToken, nToken); assert( iHash==fts5HashKey(pHash->nSlot, (u8*)zKey, nToken+1) ); - p->nKey = nToken; + p->nKey = nToken+1; zKey[nToken+1] = '\0'; - p->nData = nToken+1 + 1 + sizeof(Fts5HashEntry); + p->nData = nToken+1 + sizeof(Fts5HashEntry); p->pHashNext = pHash->aSlot[iHash]; pHash->aSlot[iHash] = p; pHash->nEntry++; @@ -234458,12 +240350,17 @@ static Fts5HashEntry *fts5HashEntryMerge( *ppOut = p1; p1 = 0; }else{ - int i = 0; char *zKey1 = fts5EntryKey(p1); char *zKey2 = fts5EntryKey(p2); - while( zKey1[i]==zKey2[i] ) i++; + int nMin = MIN(p1->nKey, p2->nKey); + + int cmp = memcmp(zKey1, zKey2, nMin); + if( cmp==0 ){ + cmp = p1->nKey - p2->nKey; + } + assert( cmp!=0 ); - if( ((u8)zKey1[i])>((u8)zKey2[i]) ){ + if( cmp>0 ){ /* p2 is smaller */ *ppOut = p2; ppOut = &p2->pScanNext; @@ -234482,10 +240379,8 @@ static Fts5HashEntry *fts5HashEntryMerge( } /* -** Extract all tokens from hash table iHash and link them into a list -** in sorted order. The hash table is cleared before returning. It is -** the responsibility of the caller to free the elements of the returned -** list. +** Link all tokens from hash table iHash into a list in sorted order. The +** tokens are not removed from the hash table. */ static int fts5HashEntrySort( Fts5Hash *pHash, @@ -234507,7 +240402,7 @@ static int fts5HashEntrySort( Fts5HashEntry *pIter; for(pIter=pHash->aSlot[iSlot]; pIter; pIter=pIter->pHashNext){ if( pTerm==0 - || (pIter->nKey+1>=nTerm && 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm)) + || (pIter->nKey>=nTerm && 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm)) ){ Fts5HashEntry *pEntry = pIter; pEntry->pScanNext = 0; @@ -234546,12 +240441,11 @@ static int sqlite3Fts5HashQuery( for(p=pHash->aSlot[iHash]; p; p=p->pHashNext){ zKey = fts5EntryKey(p); - assert( p->nKey+1==(int)strlen(zKey) ); - if( nTerm==p->nKey+1 && memcmp(zKey, pTerm, nTerm)==0 ) break; + if( nTerm==p->nKey && memcmp(zKey, pTerm, nTerm)==0 ) break; } if( p ){ - int nHashPre = sizeof(Fts5HashEntry) + nTerm + 1; + int nHashPre = sizeof(Fts5HashEntry) + nTerm; int nList = p->nData - nHashPre; u8 *pRet = (u8*)(*ppOut = sqlite3_malloc64(nPre + nList + 10)); if( pRet ){ @@ -234612,19 +240506,22 @@ static int sqlite3Fts5HashScanEof(Fts5Hash *p){ static void sqlite3Fts5HashScanEntry( Fts5Hash *pHash, const char **pzTerm, /* OUT: term (nul-terminated) */ + int *pnTerm, /* OUT: Size of term in bytes */ const u8 **ppDoclist, /* OUT: pointer to doclist */ int *pnDoclist /* OUT: size of doclist in bytes */ ){ Fts5HashEntry *p; if( (p = pHash->pScan) ){ char *zKey = fts5EntryKey(p); - int nTerm = (int)strlen(zKey); + int nTerm = p->nKey; fts5HashAddPoslistSize(pHash, p, 0); *pzTerm = zKey; - *ppDoclist = (const u8*)&zKey[nTerm+1]; - *pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1); + *pnTerm = nTerm; + *ppDoclist = (const u8*)&zKey[nTerm]; + *pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm); }else{ *pzTerm = 0; + *pnTerm = 0; *ppDoclist = 0; *pnDoclist = 0; } @@ -234955,6 +240852,9 @@ typedef struct Fts5SegWriter Fts5SegWriter; typedef struct Fts5Structure Fts5Structure; typedef struct Fts5StructureLevel Fts5StructureLevel; typedef struct Fts5StructureSegment Fts5StructureSegment; +typedef struct Fts5TokenDataIter Fts5TokenDataIter; +typedef struct Fts5TokenDataMap Fts5TokenDataMap; +typedef struct Fts5TombstoneArray Fts5TombstoneArray; struct Fts5Data { u8 *p; /* Pointer to buffer containing record */ @@ -234989,6 +240889,7 @@ struct Fts5Index { /* Error state. */ int rc; /* Current error code */ + int flushRc; /* State used by the fts5DataXXX() functions. */ sqlite3_blob *pReader; /* RO incr-blob open on %_data table */ @@ -234997,6 +240898,7 @@ struct Fts5Index { sqlite3_stmt *pIdxWriter; /* "INSERT ... %_idx VALUES(?,?,?,?)" */ sqlite3_stmt *pIdxDeleter; /* "DELETE FROM %_idx WHERE segid=?" */ sqlite3_stmt *pIdxSelect; + sqlite3_stmt *pIdxNextSelect; int nRead; /* Total number of blocks read */ sqlite3_stmt *pDeleteFromIdx; @@ -235150,8 +241052,7 @@ struct Fts5SegIter { Fts5Data *pLeaf; /* Current leaf data */ Fts5Data *pNextLeaf; /* Leaf page (iLeafPgno+1) */ i64 iLeafOffset; /* Byte offset within current leaf */ - Fts5Data **apTombstone; /* Array of tombstone pages */ - int nTombstone; + Fts5TombstoneArray *pTombArray; /* Array of tombstone pages */ /* Next method */ void (*xNext)(Fts5Index*, Fts5SegIter*, int*); @@ -235178,6 +241079,15 @@ struct Fts5SegIter { u8 bDel; /* True if the delete flag is set */ }; +/* +** Array of tombstone pages. Reference counted. +*/ +struct Fts5TombstoneArray { + int nRef; /* Number of pointers to this object */ + int nTombstone; + Fts5Data *apTombstone[1]; /* Array of tombstone pages */ +}; + /* ** Argument is a pointer to an Fts5Data structure that contains a ** leaf page. @@ -235222,9 +241132,16 @@ struct Fts5SegIter { ** poslist: ** Used by sqlite3Fts5IterPoslist() when the poslist needs to be buffered. ** There is no way to tell if this is populated or not. +** +** pColset: +** If not NULL, points to an object containing a set of column indices. +** Only matches that occur in one of these columns will be returned. +** The Fts5Iter does not own the Fts5Colset object, and so it is not +** freed when the iterator is closed - it is owned by the upper layer. */ struct Fts5Iter { Fts5IndexIter base; /* Base class containing output vars */ + Fts5TokenDataIter *pTokenDataIter; Fts5Index *pIndex; /* Index that owns this iterator */ Fts5Buffer poslist; /* Buffer containing current poslist */ @@ -235242,7 +241159,6 @@ struct Fts5Iter { Fts5SegIter aSeg[1]; /* Array of segment iterators */ }; - /* ** An instance of the following type is used to iterate through the contents ** of a doclist-index record. @@ -236160,9 +242076,9 @@ static int fts5DlidxLvlNext(Fts5DlidxLvl *pLvl){ } if( iOffnn ){ - i64 iVal; + u64 iVal; pLvl->iLeafPgno += (iOff - pLvl->iOff) + 1; - iOff += fts5GetVarint(&pData->p[iOff], (u64*)&iVal); + iOff += fts5GetVarint(&pData->p[iOff], &iVal); pLvl->iRowid += iVal; pLvl->iOff = iOff; }else{ @@ -236541,18 +242457,20 @@ static void fts5SegIterSetNext(Fts5Index *p, Fts5SegIter *pIter){ } /* -** Allocate a tombstone hash page array (pIter->apTombstone) for the -** iterator passed as the second argument. If an OOM error occurs, leave -** an error in the Fts5Index object. +** Allocate a tombstone hash page array object (pIter->pTombArray) for +** the iterator passed as the second argument. If an OOM error occurs, +** leave an error in the Fts5Index object. */ static void fts5SegIterAllocTombstone(Fts5Index *p, Fts5SegIter *pIter){ const int nTomb = pIter->pSeg->nPgTombstone; if( nTomb>0 ){ - Fts5Data **apTomb = 0; - apTomb = (Fts5Data**)sqlite3Fts5MallocZero(&p->rc, sizeof(Fts5Data)*nTomb); - if( apTomb ){ - pIter->apTombstone = apTomb; - pIter->nTombstone = nTomb; + int nByte = nTomb * sizeof(Fts5Data*) + sizeof(Fts5TombstoneArray); + Fts5TombstoneArray *pNew; + pNew = (Fts5TombstoneArray*)sqlite3Fts5MallocZero(&p->rc, nByte); + if( pNew ){ + pNew->nTombstone = nTomb; + pNew->nRef = 1; + pIter->pTombArray = pNew; } } } @@ -236809,15 +242727,16 @@ static void fts5SegIterNext_None( }else{ const u8 *pList = 0; const char *zTerm = 0; + int nTerm = 0; int nList; sqlite3Fts5HashScanNext(p->pHash); - sqlite3Fts5HashScanEntry(p->pHash, &zTerm, &pList, &nList); + sqlite3Fts5HashScanEntry(p->pHash, &zTerm, &nTerm, &pList, &nList); if( pList==0 ) goto next_none_eof; pIter->pLeaf->p = (u8*)pList; pIter->pLeaf->nn = nList; pIter->pLeaf->szLeaf = nList; pIter->iEndofDoclist = nList; - sqlite3Fts5BufferSet(&p->rc,&pIter->term, (int)strlen(zTerm), (u8*)zTerm); + sqlite3Fts5BufferSet(&p->rc,&pIter->term, nTerm, (u8*)zTerm); pIter->iLeafOffset = fts5GetVarint(pList, (u64*)&pIter->iRowid); } @@ -236883,11 +242802,12 @@ static void fts5SegIterNext( }else if( pIter->pSeg==0 ){ const u8 *pList = 0; const char *zTerm = 0; + int nTerm = 0; int nList = 0; assert( (pIter->flags & FTS5_SEGITER_ONETERM) || pbNewTerm ); if( 0==(pIter->flags & FTS5_SEGITER_ONETERM) ){ sqlite3Fts5HashScanNext(p->pHash); - sqlite3Fts5HashScanEntry(p->pHash, &zTerm, &pList, &nList); + sqlite3Fts5HashScanEntry(p->pHash, &zTerm, &nTerm, &pList, &nList); } if( pList==0 ){ fts5DataRelease(pIter->pLeaf); @@ -236897,8 +242817,7 @@ static void fts5SegIterNext( pIter->pLeaf->nn = nList; pIter->pLeaf->szLeaf = nList; pIter->iEndofDoclist = nList+1; - sqlite3Fts5BufferSet(&p->rc, &pIter->term, (int)strlen(zTerm), - (u8*)zTerm); + sqlite3Fts5BufferSet(&p->rc, &pIter->term, nTerm, (u8*)zTerm); pIter->iLeafOffset = fts5GetVarint(pList, (u64*)&pIter->iRowid); *pbNewTerm = 1; } @@ -237284,7 +243203,7 @@ static void fts5SegIterSeekInit( fts5LeafSeek(p, bGe, pIter, pTerm, nTerm); } - if( p->rc==SQLITE_OK && bGe==0 ){ + if( p->rc==SQLITE_OK && (bGe==0 || (flags & FTS5INDEX_QUERY_SCANONETERM)) ){ pIter->flags |= FTS5_SEGITER_ONETERM; if( pIter->pLeaf ){ if( flags & FTS5INDEX_QUERY_DESC ){ @@ -237300,7 +243219,9 @@ static void fts5SegIterSeekInit( } fts5SegIterSetNext(p, pIter); - fts5SegIterAllocTombstone(p, pIter); + if( 0==(flags & FTS5INDEX_QUERY_SCANONETERM) ){ + fts5SegIterAllocTombstone(p, pIter); + } /* Either: ** @@ -237317,6 +243238,79 @@ static void fts5SegIterSeekInit( ); } + +/* +** SQL used by fts5SegIterNextInit() to find the page to open. +*/ +static sqlite3_stmt *fts5IdxNextStmt(Fts5Index *p){ + if( p->pIdxNextSelect==0 ){ + Fts5Config *pConfig = p->pConfig; + fts5IndexPrepareStmt(p, &p->pIdxNextSelect, sqlite3_mprintf( + "SELECT pgno FROM '%q'.'%q_idx' WHERE " + "segid=? AND term>? ORDER BY term ASC LIMIT 1", + pConfig->zDb, pConfig->zName + )); + + } + return p->pIdxNextSelect; +} + +/* +** This is similar to fts5SegIterSeekInit(), except that it initializes +** the segment iterator to point to the first term following the page +** with pToken/nToken on it. +*/ +static void fts5SegIterNextInit( + Fts5Index *p, + const char *pTerm, int nTerm, + Fts5StructureSegment *pSeg, /* Description of segment */ + Fts5SegIter *pIter /* Object to populate */ +){ + int iPg = -1; /* Page of segment to open */ + int bDlidx = 0; + sqlite3_stmt *pSel = 0; /* SELECT to find iPg */ + + pSel = fts5IdxNextStmt(p); + if( pSel ){ + assert( p->rc==SQLITE_OK ); + sqlite3_bind_int(pSel, 1, pSeg->iSegid); + sqlite3_bind_blob(pSel, 2, pTerm, nTerm, SQLITE_STATIC); + + if( sqlite3_step(pSel)==SQLITE_ROW ){ + i64 val = sqlite3_column_int64(pSel, 0); + iPg = (int)(val>>1); + bDlidx = (val & 0x0001); + } + p->rc = sqlite3_reset(pSel); + sqlite3_bind_null(pSel, 2); + if( p->rc ) return; + } + + memset(pIter, 0, sizeof(*pIter)); + pIter->pSeg = pSeg; + pIter->flags |= FTS5_SEGITER_ONETERM; + if( iPg>=0 ){ + pIter->iLeafPgno = iPg - 1; + fts5SegIterNextPage(p, pIter); + fts5SegIterSetNext(p, pIter); + } + if( pIter->pLeaf ){ + const u8 *a = pIter->pLeaf->p; + int iTermOff = 0; + + pIter->iPgidxOff = pIter->pLeaf->szLeaf; + pIter->iPgidxOff += fts5GetVarint32(&a[pIter->iPgidxOff], iTermOff); + pIter->iLeafOffset = iTermOff; + fts5SegIterLoadTerm(p, pIter, 0); + fts5SegIterLoadNPos(p, pIter); + if( bDlidx ) fts5SegIterLoadDlidx(p, pIter); + + assert( p->rc!=SQLITE_OK || + fts5BufferCompareBlob(&pIter->term, (const u8*)pTerm, nTerm)>0 + ); + } +} + /* ** Initialize the object pIter to point to term pTerm/nTerm within the ** in-memory hash table. If there is no such term in the hash-table, the @@ -237343,14 +243337,21 @@ static void fts5SegIterHashInit( const u8 *pList = 0; p->rc = sqlite3Fts5HashScanInit(p->pHash, (const char*)pTerm, nTerm); - sqlite3Fts5HashScanEntry(p->pHash, (const char**)&z, &pList, &nList); - n = (z ? (int)strlen((const char*)z) : 0); + sqlite3Fts5HashScanEntry(p->pHash, (const char**)&z, &n, &pList, &nList); if( pList ){ pLeaf = fts5IdxMalloc(p, sizeof(Fts5Data)); if( pLeaf ){ pLeaf->p = (u8*)pList; } } + + /* The call to sqlite3Fts5HashScanInit() causes the hash table to + ** fill the size field of all existing position lists. This means they + ** can no longer be appended to. Since the only scenario in which they + ** can be appended to is if the previous operation on this table was + ** a DELETE, by clearing the Fts5Index.bDelete flag we can avoid this + ** possibility altogether. */ + p->bDelete = 0; }else{ p->rc = sqlite3Fts5HashQuery(p->pHash, sizeof(Fts5Data), (const char*)pTerm, nTerm, (void**)&pLeaf, &nList @@ -237395,6 +243396,23 @@ static void fts5IndexFreeArray(Fts5Data **ap, int n){ } } +/* +** Decrement the ref-count of the object passed as the only argument. If it +** reaches 0, free it and its contents. +*/ +static void fts5TombstoneArrayDelete(Fts5TombstoneArray *p){ + if( p ){ + p->nRef--; + if( p->nRef<=0 ){ + int ii; + for(ii=0; iinTombstone; ii++){ + fts5DataRelease(p->apTombstone[ii]); + } + sqlite3_free(p); + } + } +} + /* ** Zero the iterator passed as the only argument. */ @@ -237402,7 +243420,7 @@ static void fts5SegIterClear(Fts5SegIter *pIter){ fts5BufferFree(&pIter->term); fts5DataRelease(pIter->pLeaf); fts5DataRelease(pIter->pNextLeaf); - fts5IndexFreeArray(pIter->apTombstone, pIter->nTombstone); + fts5TombstoneArrayDelete(pIter->pTombArray); fts5DlidxIterFree(pIter->pDlidx); sqlite3_free(pIter->aRowidOffset); memset(pIter, 0, sizeof(Fts5SegIter)); @@ -237536,7 +243554,6 @@ static int fts5MultiIterDoCompare(Fts5Iter *pIter, int iOut){ assert_nc( i2!=0 ); pRes->bTermEq = 1; if( p1->iRowid==p2->iRowid ){ - p1->bDel = p2->bDel; return i2; } res = ((p1->iRowid > p2->iRowid)==pIter->bRev) ? -1 : +1; @@ -237648,7 +243665,6 @@ static void fts5SegIterNextFrom( }while( p->rc==SQLITE_OK ); } - /* ** Free the iterator object passed as the second argument. */ @@ -237793,24 +243809,25 @@ static int fts5IndexTombstoneQuery( static int fts5MultiIterIsDeleted(Fts5Iter *pIter){ int iFirst = pIter->aFirst[1].iFirst; Fts5SegIter *pSeg = &pIter->aSeg[iFirst]; + Fts5TombstoneArray *pArray = pSeg->pTombArray; - if( pSeg->pLeaf && pSeg->nTombstone ){ + if( pSeg->pLeaf && pArray ){ /* Figure out which page the rowid might be present on. */ - int iPg = ((u64)pSeg->iRowid) % pSeg->nTombstone; + int iPg = ((u64)pSeg->iRowid) % pArray->nTombstone; assert( iPg>=0 ); /* If tombstone hash page iPg has not yet been loaded from the ** database, load it now. */ - if( pSeg->apTombstone[iPg]==0 ){ - pSeg->apTombstone[iPg] = fts5DataRead(pIter->pIndex, + if( pArray->apTombstone[iPg]==0 ){ + pArray->apTombstone[iPg] = fts5DataRead(pIter->pIndex, FTS5_TOMBSTONE_ROWID(pSeg->pSeg->iSegid, iPg) ); - if( pSeg->apTombstone[iPg]==0 ) return 0; + if( pArray->apTombstone[iPg]==0 ) return 0; } return fts5IndexTombstoneQuery( - pSeg->apTombstone[iPg], - pSeg->nTombstone, + pArray->apTombstone[iPg], + pArray->nTombstone, pSeg->iRowid ); } @@ -237904,7 +243921,7 @@ static Fts5Iter *fts5MultiIterAlloc( int nSeg ){ Fts5Iter *pNew; - int nSlot; /* Power of two >= nSeg */ + i64 nSlot; /* Power of two >= nSeg */ for(nSlot=2; nSlotnSeg-1; iIter>0; iIter--){ + int iEq; + if( (iEq = fts5MultiIterDoCompare(pIter, iIter)) ){ + Fts5SegIter *pSeg = &pIter->aSeg[iEq]; + if( p->rc==SQLITE_OK ) pSeg->xNext(p, pSeg, 0); + fts5MultiIterAdvanced(p, pIter, iEq, iIter); + } + } + fts5MultiIterSetEof(pIter); + fts5AssertMultiIterSetup(p, pIter); + + if( (pIter->bSkipEmpty && fts5MultiIterIsEmpty(p, pIter)) + || fts5MultiIterIsDeleted(pIter) + ){ + fts5MultiIterNext(p, pIter, 0, 0); + }else if( pIter->base.bEof==0 ){ + Fts5SegIter *pSeg = &pIter->aSeg[pIter->aFirst[1].iFirst]; + pIter->xSetOutputs(pIter, pSeg); + } +} /* ** Allocate a new Fts5Iter object. @@ -238430,31 +244473,12 @@ static void fts5MultiIterNew( assert( iIter==nSeg ); } - /* If the above was successful, each component iterators now points + /* If the above was successful, each component iterator now points ** to the first entry in its segment. In this case initialize the ** aFirst[] array. Or, if an error has occurred, free the iterator ** object and set the output variable to NULL. */ if( p->rc==SQLITE_OK ){ - for(iIter=pNew->nSeg-1; iIter>0; iIter--){ - int iEq; - if( (iEq = fts5MultiIterDoCompare(pNew, iIter)) ){ - Fts5SegIter *pSeg = &pNew->aSeg[iEq]; - if( p->rc==SQLITE_OK ) pSeg->xNext(p, pSeg, 0); - fts5MultiIterAdvanced(p, pNew, iEq, iIter); - } - } - fts5MultiIterSetEof(pNew); - fts5AssertMultiIterSetup(p, pNew); - - if( (pNew->bSkipEmpty && fts5MultiIterIsEmpty(p, pNew)) - || fts5MultiIterIsDeleted(pNew) - ){ - fts5MultiIterNext(p, pNew, 0, 0); - }else if( pNew->base.bEof==0 ){ - Fts5SegIter *pSeg = &pNew->aSeg[pNew->aFirst[1].iFirst]; - pNew->xSetOutputs(pNew, pSeg); - } - + fts5MultiIterFinishSetup(p, pNew); }else{ fts5MultiIterFree(pNew); *ppOut = 0; @@ -238479,7 +244503,6 @@ static void fts5MultiIterNew2( pNew = fts5MultiIterAlloc(p, 2); if( pNew ){ Fts5SegIter *pIter = &pNew->aSeg[1]; - pIter->flags = FTS5_SEGITER_ONETERM; if( pData->szLeaf>0 ){ pIter->pLeaf = pData; @@ -238627,6 +244650,7 @@ static void fts5IndexDiscardData(Fts5Index *p){ sqlite3Fts5HashClear(p->pHash); p->nPendingData = 0; p->nPendingRow = 0; + p->flushRc = SQLITE_OK; } p->nContentlessDelete = 0; } @@ -238842,7 +244866,7 @@ static void fts5WriteDlidxAppend( } if( pDlidx->bPrevValid ){ - iVal = iRowid - pDlidx->iPrev; + iVal = (u64)iRowid - (u64)pDlidx->iPrev; }else{ i64 iPgno = (i==0 ? pWriter->writer.pgno : pDlidx[-1].pgno); assert( pDlidx->buf.n==0 ); @@ -239029,7 +245053,7 @@ static void fts5WriteAppendPoslistData( const u8 *a = aData; int n = nData; - assert( p->pConfig->pgsz>0 ); + assert( p->pConfig->pgsz>0 || p->rc!=SQLITE_OK ); while( p->rc==SQLITE_OK && (pPage->buf.n + pPage->pgidx.n + n)>=p->pConfig->pgsz ){ @@ -239680,7 +245704,6 @@ static void fts5DoSecureDelete( int iPgIdx = pSeg->pLeaf->szLeaf; u64 iDelta = 0; - u64 iNextDelta = 0; int iNextOff = 0; int iOff = 0; int nIdx = 0; @@ -239688,8 +245711,6 @@ static void fts5DoSecureDelete( int bLastInDoclist = 0; int iIdx = 0; int iStart = 0; - int iKeyOff = 0; - int iPrevKeyOff = 0; int iDelKeyOff = 0; /* Offset of deleted key, if any */ nIdx = nPg-iPgIdx; @@ -239714,10 +245735,21 @@ static void fts5DoSecureDelete( ** This block sets the following variables: ** ** iStart: + ** The offset of the first byte of the rowid or delta-rowid + ** value for the doclist entry being removed. + ** ** iDelta: + ** The value of the rowid or delta-rowid value for the doclist + ** entry being removed. + ** + ** iNextOff: + ** The offset of the next entry following the position list + ** for the one being removed. If the position list for this + ** entry overflows onto the next leaf page, this value will be + ** greater than pLeaf->szLeaf. */ { - int iSOP; + int iSOP; /* Start-Of-Position-list */ if( pSeg->iLeafPgno==pSeg->iTermLeafPgno ){ iStart = pSeg->iTermLeafOffset; }else{ @@ -239753,47 +245785,81 @@ static void fts5DoSecureDelete( } iOff = iStart; + + /* If the position-list for the entry being removed flows over past + ** the end of this page, delete the portion of the position-list on the + ** next page and beyond. + ** + ** Set variable bLastInDoclist to true if this entry happens + ** to be the last rowid in the doclist for its term. */ if( iNextOff>=iPgIdx ){ int pgno = pSeg->iLeafPgno+1; fts5SecureDeleteOverflow(p, pSeg->pSeg, pgno, &bLastInDoclist); iNextOff = iPgIdx; - }else{ - /* Set bLastInDoclist to true if the entry being removed is the last - ** in its doclist. */ - for(iIdx=0, iKeyOff=0; iIdxbDel==0 ){ + if( iNextOff!=iPgIdx ){ + /* Loop through the page-footer. If iNextOff (offset of the + ** entry following the one we are removing) is equal to the + ** offset of a key on this page, then the entry is the last + ** in its doclist. */ + int iKeyOff = 0; + for(iIdx=0; iIdxbDel ){ + iOff += sqlite3Fts5PutVarint(&aPg[iOff], iDelta); + aPg[iOff++] = 0x01; + }else if( bLastInDoclist==0 ){ if( iNextOff!=iPgIdx ){ + u64 iNextDelta = 0; iNextOff += fts5GetVarint(&aPg[iNextOff], &iNextDelta); iOff += sqlite3Fts5PutVarint(&aPg[iOff], iDelta + iNextDelta); } }else if( - iStart==pSeg->iTermLeafOffset && pSeg->iLeafPgno==pSeg->iTermLeafPgno + pSeg->iLeafPgno==pSeg->iTermLeafPgno + && iStart==pSeg->iTermLeafOffset ){ /* The entry being removed was the only position list in its ** doclist. Therefore the term needs to be removed as well. */ int iKey = 0; - for(iIdx=0, iKeyOff=0; iIdx(u32)iStart ) break; iKeyOff += iVal; } + assert_nc( iKey>=1 ); + /* Set iDelKeyOff to the value of the footer entry to remove from + ** the page. */ iDelKeyOff = iOff = iKeyOff; + if( iNextOff!=iPgIdx ){ + /* This is the only position-list associated with the term, and there + ** is another term following it on this page. So the subsequent term + ** needs to be moved to replace the term associated with the entry + ** being removed. */ int nPrefix = 0; int nSuffix = 0; int nPrefix2 = 0; @@ -239872,6 +245938,15 @@ static void fts5DoSecureDelete( } } + /* Assuming no error has occurred, this block does final edits to the + ** leaf page before writing it back to disk. Input variables are: + ** + ** nPg: Total initial size of leaf page. + ** iPgIdx: Initial offset of page footer. + ** + ** iOff: Offset to move data to + ** iNextOff: Offset to move data from + */ if( p->rc==SQLITE_OK ){ const int nMove = nPg - iNextOff; /* Number of bytes to move */ int nShift = iNextOff - iOff; /* Distance to move them */ @@ -239914,10 +245989,10 @@ static void fts5FlushSecureDelete( Fts5Index *p, Fts5Structure *pStruct, const char *zTerm, + int nTerm, i64 iRowid ){ const int f = FTS5INDEX_QUERY_SKIPHASH; - int nTerm = (int)strlen(zTerm); Fts5Iter *pIter = 0; /* Used to find term instance */ fts5MultiIterNew(p, pStruct, f, 0, (const u8*)zTerm, nTerm, -1, 0, &pIter); @@ -239991,8 +246066,7 @@ static void fts5FlushOneHash(Fts5Index *p){ int nDoclist; /* Size of doclist in bytes */ /* Get the term and doclist for this entry. */ - sqlite3Fts5HashScanEntry(pHash, &zTerm, &pDoclist, &nDoclist); - nTerm = (int)strlen(zTerm); + sqlite3Fts5HashScanEntry(pHash, &zTerm, &nTerm, &pDoclist, &nDoclist); if( bSecureDelete==0 ){ fts5WriteAppendTerm(p, &writer, nTerm, (const u8*)zTerm); if( p->rc!=SQLITE_OK ) break; @@ -240022,7 +246096,7 @@ static void fts5FlushOneHash(Fts5Index *p){ if( bSecureDelete ){ if( eDetail==FTS5_DETAIL_NONE ){ if( iOffrc!=SQLITE_OK || pDoclist[iOff]==0x01 ){ iOff++; continue; @@ -240072,10 +246146,16 @@ static void fts5FlushOneHash(Fts5Index *p){ fts5WriteFlushLeaf(p, &writer); } }else{ - int bDummy; - int nPos; - int nCopy = fts5GetPoslistSize(&pDoclist[iOff], &nPos, &bDummy); - nCopy += nPos; + int bDel = 0; + int nPos = 0; + int nCopy = fts5GetPoslistSize(&pDoclist[iOff], &nPos, &bDel); + if( bDel && bSecureDelete ){ + fts5BufferAppendVarint(&p->rc, pBuf, nPos*2); + iOff += nCopy; + nCopy = nPos; + }else{ + nCopy += nPos; + } if( (pBuf->n + pPgidx->n + nCopy) <= pgsz ){ /* The entire poslist will fit on the current leaf. So copy ** it in one go. */ @@ -240113,7 +246193,6 @@ static void fts5FlushOneHash(Fts5Index *p){ assert( pBuf->n<=pBuf->nSpace ); if( p->rc==SQLITE_OK ) sqlite3Fts5HashScanNext(pHash); } - sqlite3Fts5HashClear(pHash); fts5WriteFinish(p, &writer, &pgnoLast); assert( p->rc!=SQLITE_OK || bSecureDelete || pgnoLast>0 ); @@ -240146,7 +246225,6 @@ static void fts5FlushOneHash(Fts5Index *p){ fts5IndexCrisismerge(p, &pStruct); fts5StructureWrite(p, pStruct); fts5StructureRelease(pStruct); - p->nContentlessDelete = 0; } /* @@ -240154,11 +246232,21 @@ static void fts5FlushOneHash(Fts5Index *p){ */ static void fts5IndexFlush(Fts5Index *p){ /* Unless it is empty, flush the hash table to disk */ + if( p->flushRc ){ + p->rc = p->flushRc; + return; + } if( p->nPendingData || p->nContentlessDelete ){ assert( p->pHash ); fts5FlushOneHash(p); - p->nPendingData = 0; - p->nPendingRow = 0; + if( p->rc==SQLITE_OK ){ + sqlite3Fts5HashClear(p->pHash); + p->nPendingData = 0; + p->nPendingRow = 0; + p->nContentlessDelete = 0; + }else if( p->nPendingData || p->nContentlessDelete ){ + p->flushRc = p->rc; + } } } @@ -240236,8 +246324,9 @@ static int sqlite3Fts5IndexOptimize(Fts5Index *p){ assert( p->rc==SQLITE_OK ); fts5IndexFlush(p); - assert( p->nContentlessDelete==0 ); + assert( p->rc!=SQLITE_OK || p->nContentlessDelete==0 ); pStruct = fts5StructureRead(p); + assert( p->rc!=SQLITE_OK || pStruct!=0 ); fts5StructureInvalidate(p); if( pStruct ){ @@ -240643,7 +246732,7 @@ static void fts5SetupPrefixIter( u8 *pToken, /* Buffer containing prefix to match */ int nToken, /* Size of buffer pToken in bytes */ Fts5Colset *pColset, /* Restrict matches to these columns */ - Fts5Iter **ppIter /* OUT: New iterator */ + Fts5Iter **ppIter /* OUT: New iterator */ ){ Fts5Structure *pStruct; Fts5Buffer *aBuf; @@ -240664,8 +246753,9 @@ static void fts5SetupPrefixIter( aBuf = (Fts5Buffer*)fts5IdxMalloc(p, sizeof(Fts5Buffer)*nBuf); pStruct = fts5StructureRead(p); + assert( p->rc!=SQLITE_OK || (aBuf && pStruct) ); - if( aBuf && pStruct ){ + if( p->rc==SQLITE_OK ){ const int flags = FTS5INDEX_QUERY_SCAN | FTS5INDEX_QUERY_SKIPEMPTY | FTS5INDEX_QUERY_NOOUTPUT; @@ -240677,6 +246767,12 @@ static void fts5SetupPrefixIter( int bNewTerm = 1; memset(&doclist, 0, sizeof(doclist)); + + /* If iIdx is non-zero, then it is the number of a prefix-index for + ** prefixes 1 character longer than the prefix being queried for. That + ** index contains all the doclists required, except for the one + ** corresponding to the prefix itself. That one is extracted from the + ** main term index here. */ if( iIdx!=0 ){ int dummy = 0; const int f2 = FTS5INDEX_QUERY_SKIPEMPTY|FTS5INDEX_QUERY_NOOUTPUT; @@ -240700,6 +246796,7 @@ static void fts5SetupPrefixIter( pToken[0] = FTS5_MAIN_PREFIX + iIdx; fts5MultiIterNew(p, pStruct, flags, pColset, pToken, nToken, -1, 0, &p1); fts5IterSetOutputCb(&p->rc, p1); + for( /* no-op */ ; fts5MultiIterEof(p, p1)==0; fts5MultiIterNext2(p, p1, &bNewTerm) @@ -240715,7 +246812,6 @@ static void fts5SetupPrefixIter( } if( p1->base.nData==0 ) continue; - if( p1->base.iRowid<=iLastRowid && doclist.n>0 ){ for(i=0; p->rc==SQLITE_OK && doclist.n; i++){ int i1 = i*nMerge; @@ -240754,7 +246850,7 @@ static void fts5SetupPrefixIter( } fts5MultiIterFree(p1); - pData = fts5IdxMalloc(p, sizeof(Fts5Data)+doclist.n+FTS5_DATA_ZERO_PADDING); + pData = fts5IdxMalloc(p, sizeof(*pData)+doclist.n+FTS5_DATA_ZERO_PADDING); if( pData ){ pData->p = (u8*)&pData[1]; pData->nn = pData->szLeaf = doclist.n; @@ -240897,6 +246993,7 @@ static int sqlite3Fts5IndexClose(Fts5Index *p){ sqlite3_finalize(p->pIdxWriter); sqlite3_finalize(p->pIdxDeleter); sqlite3_finalize(p->pIdxSelect); + sqlite3_finalize(p->pIdxNextSelect); sqlite3_finalize(p->pDataVersion); sqlite3_finalize(p->pDeleteFromIdx); sqlite3Fts5HashFree(p->pHash); @@ -240992,6 +247089,457 @@ static int sqlite3Fts5IndexWrite( return rc; } +/* +** pToken points to a buffer of size nToken bytes containing a search +** term, including the index number at the start, used on a tokendata=1 +** table. This function returns true if the term in buffer pBuf matches +** token pToken/nToken. +*/ +static int fts5IsTokendataPrefix( + Fts5Buffer *pBuf, + const u8 *pToken, + int nToken +){ + return ( + pBuf->n>=nToken + && 0==memcmp(pBuf->p, pToken, nToken) + && (pBuf->n==nToken || pBuf->p[nToken]==0x00) + ); +} + +/* +** Ensure the segment-iterator passed as the only argument points to EOF. +*/ +static void fts5SegIterSetEOF(Fts5SegIter *pSeg){ + fts5DataRelease(pSeg->pLeaf); + pSeg->pLeaf = 0; +} + +/* +** Usually, a tokendata=1 iterator (struct Fts5TokenDataIter) accumulates an +** array of these for each row it visits. Or, for an iterator used by an +** "ORDER BY rank" query, it accumulates an array of these for the entire +** query. +** +** Each instance in the array indicates the iterator (and therefore term) +** associated with position iPos of rowid iRowid. This is used by the +** xInstToken() API. +*/ +struct Fts5TokenDataMap { + i64 iRowid; /* Row this token is located in */ + i64 iPos; /* Position of token */ + int iIter; /* Iterator token was read from */ +}; + +/* +** An object used to supplement Fts5Iter for tokendata=1 iterators. +*/ +struct Fts5TokenDataIter { + int nIter; + int nIterAlloc; + + int nMap; + int nMapAlloc; + Fts5TokenDataMap *aMap; + + Fts5PoslistReader *aPoslistReader; + int *aPoslistToIter; + Fts5Iter *apIter[1]; +}; + +/* +** This function appends iterator pAppend to Fts5TokenDataIter pIn and +** returns the result. +*/ +static Fts5TokenDataIter *fts5AppendTokendataIter( + Fts5Index *p, /* Index object (for error code) */ + Fts5TokenDataIter *pIn, /* Current Fts5TokenDataIter struct */ + Fts5Iter *pAppend /* Append this iterator */ +){ + Fts5TokenDataIter *pRet = pIn; + + if( p->rc==SQLITE_OK ){ + if( pIn==0 || pIn->nIter==pIn->nIterAlloc ){ + int nAlloc = pIn ? pIn->nIterAlloc*2 : 16; + int nByte = nAlloc * sizeof(Fts5Iter*) + sizeof(Fts5TokenDataIter); + Fts5TokenDataIter *pNew = (Fts5TokenDataIter*)sqlite3_realloc(pIn, nByte); + + if( pNew==0 ){ + p->rc = SQLITE_NOMEM; + }else{ + if( pIn==0 ) memset(pNew, 0, nByte); + pRet = pNew; + pNew->nIterAlloc = nAlloc; + } + } + } + if( p->rc ){ + sqlite3Fts5IterClose((Fts5IndexIter*)pAppend); + }else{ + pRet->apIter[pRet->nIter++] = pAppend; + } + assert( pRet==0 || pRet->nIter<=pRet->nIterAlloc ); + + return pRet; +} + +/* +** Delete an Fts5TokenDataIter structure and its contents. +*/ +static void fts5TokendataIterDelete(Fts5TokenDataIter *pSet){ + if( pSet ){ + int ii; + for(ii=0; iinIter; ii++){ + fts5MultiIterFree(pSet->apIter[ii]); + } + sqlite3_free(pSet->aPoslistReader); + sqlite3_free(pSet->aMap); + sqlite3_free(pSet); + } +} + +/* +** Append a mapping to the token-map belonging to object pT. +*/ +static void fts5TokendataIterAppendMap( + Fts5Index *p, + Fts5TokenDataIter *pT, + int iIter, + i64 iRowid, + i64 iPos +){ + if( p->rc==SQLITE_OK ){ + if( pT->nMap==pT->nMapAlloc ){ + int nNew = pT->nMapAlloc ? pT->nMapAlloc*2 : 64; + int nByte = nNew * sizeof(Fts5TokenDataMap); + Fts5TokenDataMap *aNew; + + aNew = (Fts5TokenDataMap*)sqlite3_realloc(pT->aMap, nByte); + if( aNew==0 ){ + p->rc = SQLITE_NOMEM; + return; + } + + pT->aMap = aNew; + pT->nMapAlloc = nNew; + } + + pT->aMap[pT->nMap].iRowid = iRowid; + pT->aMap[pT->nMap].iPos = iPos; + pT->aMap[pT->nMap].iIter = iIter; + pT->nMap++; + } +} + +/* +** The iterator passed as the only argument must be a tokendata=1 iterator +** (pIter->pTokenDataIter!=0). This function sets the iterator output +** variables (pIter->base.*) according to the contents of the current +** row. +*/ +static void fts5IterSetOutputsTokendata(Fts5Iter *pIter){ + int ii; + int nHit = 0; + i64 iRowid = SMALLEST_INT64; + int iMin = 0; + + Fts5TokenDataIter *pT = pIter->pTokenDataIter; + + pIter->base.nData = 0; + pIter->base.pData = 0; + + for(ii=0; iinIter; ii++){ + Fts5Iter *p = pT->apIter[ii]; + if( p->base.bEof==0 ){ + if( nHit==0 || p->base.iRowidbase.iRowid; + nHit = 1; + pIter->base.pData = p->base.pData; + pIter->base.nData = p->base.nData; + iMin = ii; + }else if( p->base.iRowid==iRowid ){ + nHit++; + } + } + } + + if( nHit==0 ){ + pIter->base.bEof = 1; + }else{ + int eDetail = pIter->pIndex->pConfig->eDetail; + pIter->base.bEof = 0; + pIter->base.iRowid = iRowid; + + if( nHit==1 && eDetail==FTS5_DETAIL_FULL ){ + fts5TokendataIterAppendMap(pIter->pIndex, pT, iMin, iRowid, -1); + }else + if( nHit>1 && eDetail!=FTS5_DETAIL_NONE ){ + int nReader = 0; + int nByte = 0; + i64 iPrev = 0; + + /* Allocate array of iterators if they are not already allocated. */ + if( pT->aPoslistReader==0 ){ + pT->aPoslistReader = (Fts5PoslistReader*)sqlite3Fts5MallocZero( + &pIter->pIndex->rc, + pT->nIter * (sizeof(Fts5PoslistReader) + sizeof(int)) + ); + if( pT->aPoslistReader==0 ) return; + pT->aPoslistToIter = (int*)&pT->aPoslistReader[pT->nIter]; + } + + /* Populate an iterator for each poslist that will be merged */ + for(ii=0; iinIter; ii++){ + Fts5Iter *p = pT->apIter[ii]; + if( iRowid==p->base.iRowid ){ + pT->aPoslistToIter[nReader] = ii; + sqlite3Fts5PoslistReaderInit( + p->base.pData, p->base.nData, &pT->aPoslistReader[nReader++] + ); + nByte += p->base.nData; + } + } + + /* Ensure the output buffer is large enough */ + if( fts5BufferGrow(&pIter->pIndex->rc, &pIter->poslist, nByte+nHit*10) ){ + return; + } + + /* Ensure the token-mapping is large enough */ + if( eDetail==FTS5_DETAIL_FULL && pT->nMapAlloc<(pT->nMap + nByte) ){ + int nNew = (pT->nMapAlloc + nByte) * 2; + Fts5TokenDataMap *aNew = (Fts5TokenDataMap*)sqlite3_realloc( + pT->aMap, nNew*sizeof(Fts5TokenDataMap) + ); + if( aNew==0 ){ + pIter->pIndex->rc = SQLITE_NOMEM; + return; + } + pT->aMap = aNew; + pT->nMapAlloc = nNew; + } + + pIter->poslist.n = 0; + + while( 1 ){ + i64 iMinPos = LARGEST_INT64; + + /* Find smallest position */ + iMin = 0; + for(ii=0; iiaPoslistReader[ii]; + if( pReader->bEof==0 ){ + if( pReader->iPosiPos; + iMin = ii; + } + } + } + + /* If all readers were at EOF, break out of the loop. */ + if( iMinPos==LARGEST_INT64 ) break; + + sqlite3Fts5PoslistSafeAppend(&pIter->poslist, &iPrev, iMinPos); + sqlite3Fts5PoslistReaderNext(&pT->aPoslistReader[iMin]); + + if( eDetail==FTS5_DETAIL_FULL ){ + pT->aMap[pT->nMap].iPos = iMinPos; + pT->aMap[pT->nMap].iIter = pT->aPoslistToIter[iMin]; + pT->aMap[pT->nMap].iRowid = iRowid; + pT->nMap++; + } + } + + pIter->base.pData = pIter->poslist.p; + pIter->base.nData = pIter->poslist.n; + } + } +} + +/* +** The iterator passed as the only argument must be a tokendata=1 iterator +** (pIter->pTokenDataIter!=0). This function advances the iterator. If +** argument bFrom is false, then the iterator is advanced to the next +** entry. Or, if bFrom is true, it is advanced to the first entry with +** a rowid of iFrom or greater. +*/ +static void fts5TokendataIterNext(Fts5Iter *pIter, int bFrom, i64 iFrom){ + int ii; + Fts5TokenDataIter *pT = pIter->pTokenDataIter; + Fts5Index *pIndex = pIter->pIndex; + + for(ii=0; iinIter; ii++){ + Fts5Iter *p = pT->apIter[ii]; + if( p->base.bEof==0 + && (p->base.iRowid==pIter->base.iRowid || (bFrom && p->base.iRowidbase.bEof==0 + && p->base.iRowidrc==SQLITE_OK + ){ + fts5MultiIterNext(pIndex, p, 0, 0); + } + } + } + + if( pIndex->rc==SQLITE_OK ){ + fts5IterSetOutputsTokendata(pIter); + } +} + +/* +** If the segment-iterator passed as the first argument is at EOF, then +** set pIter->term to a copy of buffer pTerm. +*/ +static void fts5TokendataSetTermIfEof(Fts5Iter *pIter, Fts5Buffer *pTerm){ + if( pIter && pIter->aSeg[0].pLeaf==0 ){ + fts5BufferSet(&pIter->pIndex->rc, &pIter->aSeg[0].term, pTerm->n, pTerm->p); + } +} + +/* +** This function sets up an iterator to use for a non-prefix query on a +** tokendata=1 table. +*/ +static Fts5Iter *fts5SetupTokendataIter( + Fts5Index *p, /* FTS index to query */ + const u8 *pToken, /* Buffer containing query term */ + int nToken, /* Size of buffer pToken in bytes */ + Fts5Colset *pColset /* Colset to filter on */ +){ + Fts5Iter *pRet = 0; + Fts5TokenDataIter *pSet = 0; + Fts5Structure *pStruct = 0; + const int flags = FTS5INDEX_QUERY_SCANONETERM | FTS5INDEX_QUERY_SCAN; + + Fts5Buffer bSeek = {0, 0, 0}; + Fts5Buffer *pSmall = 0; + + fts5IndexFlush(p); + pStruct = fts5StructureRead(p); + + while( p->rc==SQLITE_OK ){ + Fts5Iter *pPrev = pSet ? pSet->apIter[pSet->nIter-1] : 0; + Fts5Iter *pNew = 0; + Fts5SegIter *pNewIter = 0; + Fts5SegIter *pPrevIter = 0; + + int iLvl, iSeg, ii; + + pNew = fts5MultiIterAlloc(p, pStruct->nSegment); + if( pSmall ){ + fts5BufferSet(&p->rc, &bSeek, pSmall->n, pSmall->p); + fts5BufferAppendBlob(&p->rc, &bSeek, 1, (const u8*)"\0"); + }else{ + fts5BufferSet(&p->rc, &bSeek, nToken, pToken); + } + if( p->rc ){ + sqlite3Fts5IterClose((Fts5IndexIter*)pNew); + break; + } + + pNewIter = &pNew->aSeg[0]; + pPrevIter = (pPrev ? &pPrev->aSeg[0] : 0); + for(iLvl=0; iLvlnLevel; iLvl++){ + for(iSeg=pStruct->aLevel[iLvl].nSeg-1; iSeg>=0; iSeg--){ + Fts5StructureSegment *pSeg = &pStruct->aLevel[iLvl].aSeg[iSeg]; + int bDone = 0; + + if( pPrevIter ){ + if( fts5BufferCompare(pSmall, &pPrevIter->term) ){ + memcpy(pNewIter, pPrevIter, sizeof(Fts5SegIter)); + memset(pPrevIter, 0, sizeof(Fts5SegIter)); + bDone = 1; + }else if( pPrevIter->iEndofDoclist>pPrevIter->pLeaf->szLeaf ){ + fts5SegIterNextInit(p,(const char*)bSeek.p,bSeek.n-1,pSeg,pNewIter); + bDone = 1; + } + } + + if( bDone==0 ){ + fts5SegIterSeekInit(p, bSeek.p, bSeek.n, flags, pSeg, pNewIter); + } + + if( pPrevIter ){ + if( pPrevIter->pTombArray ){ + pNewIter->pTombArray = pPrevIter->pTombArray; + pNewIter->pTombArray->nRef++; + } + }else{ + fts5SegIterAllocTombstone(p, pNewIter); + } + + pNewIter++; + if( pPrevIter ) pPrevIter++; + if( p->rc ) break; + } + } + fts5TokendataSetTermIfEof(pPrev, pSmall); + + pNew->bSkipEmpty = 1; + pNew->pColset = pColset; + fts5IterSetOutputCb(&p->rc, pNew); + + /* Loop through all segments in the new iterator. Find the smallest + ** term that any segment-iterator points to. Iterator pNew will be + ** used for this term. Also, set any iterator that points to a term that + ** does not match pToken/nToken to point to EOF */ + pSmall = 0; + for(ii=0; iinSeg; ii++){ + Fts5SegIter *pII = &pNew->aSeg[ii]; + if( 0==fts5IsTokendataPrefix(&pII->term, pToken, nToken) ){ + fts5SegIterSetEOF(pII); + } + if( pII->pLeaf && (!pSmall || fts5BufferCompare(pSmall, &pII->term)>0) ){ + pSmall = &pII->term; + } + } + + /* If pSmall is still NULL at this point, then the new iterator does + ** not point to any terms that match the query. So delete it and break + ** out of the loop - all required iterators have been collected. */ + if( pSmall==0 ){ + sqlite3Fts5IterClose((Fts5IndexIter*)pNew); + break; + } + + /* Append this iterator to the set and continue. */ + pSet = fts5AppendTokendataIter(p, pSet, pNew); + } + + if( p->rc==SQLITE_OK && pSet ){ + int ii; + for(ii=0; iinIter; ii++){ + Fts5Iter *pIter = pSet->apIter[ii]; + int iSeg; + for(iSeg=0; iSegnSeg; iSeg++){ + pIter->aSeg[iSeg].flags |= FTS5_SEGITER_ONETERM; + } + fts5MultiIterFinishSetup(p, pIter); + } + } + + if( p->rc==SQLITE_OK ){ + pRet = fts5MultiIterAlloc(p, 0); + } + if( pRet ){ + pRet->pTokenDataIter = pSet; + if( pSet ){ + fts5IterSetOutputsTokendata(pRet); + }else{ + pRet->base.bEof = 1; + } + }else{ + fts5TokendataIterDelete(pSet); + } + + fts5StructureRelease(pStruct); + fts5BufferFree(&bSeek); + return pRet; +} + + /* ** Open a new iterator to iterate though all rowid that match the ** specified token or token prefix. @@ -241013,8 +247561,13 @@ static int sqlite3Fts5IndexQuery( if( sqlite3Fts5BufferSize(&p->rc, &buf, nToken+1)==0 ){ int iIdx = 0; /* Index to search */ int iPrefixIdx = 0; /* +1 prefix index */ + int bTokendata = pConfig->bTokendata; if( nToken>0 ) memcpy(&buf.p[1], pToken, nToken); + if( flags & (FTS5INDEX_QUERY_NOTOKENDATA|FTS5INDEX_QUERY_SCAN) ){ + bTokendata = 0; + } + /* Figure out which index to search and set iIdx accordingly. If this ** is a prefix query for which there is no prefix index, set iIdx to ** greater than pConfig->nPrefix to indicate that the query will be @@ -241040,7 +247593,10 @@ static int sqlite3Fts5IndexQuery( } } - if( iIdx<=pConfig->nPrefix ){ + if( bTokendata && iIdx==0 ){ + buf.p[0] = '0'; + pRet = fts5SetupTokendataIter(p, buf.p, nToken+1, pColset); + }else if( iIdx<=pConfig->nPrefix ){ /* Straight index lookup */ Fts5Structure *pStruct = fts5StructureRead(p); buf.p[0] = (u8)(FTS5_MAIN_PREFIX + iIdx); @@ -241087,7 +247643,11 @@ static int sqlite3Fts5IndexQuery( static int sqlite3Fts5IterNext(Fts5IndexIter *pIndexIter){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; assert( pIter->pIndex->rc==SQLITE_OK ); - fts5MultiIterNext(pIter->pIndex, pIter, 0, 0); + if( pIter->pTokenDataIter ){ + fts5TokendataIterNext(pIter, 0, 0); + }else{ + fts5MultiIterNext(pIter->pIndex, pIter, 0, 0); + } return fts5IndexReturn(pIter->pIndex); } @@ -241120,7 +247680,11 @@ static int sqlite3Fts5IterNextScan(Fts5IndexIter *pIndexIter){ */ static int sqlite3Fts5IterNextFrom(Fts5IndexIter *pIndexIter, i64 iMatch){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; - fts5MultiIterNextFrom(pIter->pIndex, pIter, iMatch); + if( pIter->pTokenDataIter ){ + fts5TokendataIterNext(pIter, 1, iMatch); + }else{ + fts5MultiIterNextFrom(pIter->pIndex, pIter, iMatch); + } return fts5IndexReturn(pIter->pIndex); } @@ -241135,6 +247699,99 @@ static const char *sqlite3Fts5IterTerm(Fts5IndexIter *pIndexIter, int *pn){ return (z ? &z[1] : 0); } +/* +** This is used by xInstToken() to access the token at offset iOff, column +** iCol of row iRowid. The token is returned via output variables *ppOut +** and *pnOut. The iterator passed as the first argument must be a tokendata=1 +** iterator (pIter->pTokenDataIter!=0). +*/ +static int sqlite3Fts5IterToken( + Fts5IndexIter *pIndexIter, + i64 iRowid, + int iCol, + int iOff, + const char **ppOut, int *pnOut +){ + Fts5Iter *pIter = (Fts5Iter*)pIndexIter; + Fts5TokenDataIter *pT = pIter->pTokenDataIter; + Fts5TokenDataMap *aMap = pT->aMap; + i64 iPos = (((i64)iCol)<<32) + iOff; + + int i1 = 0; + int i2 = pT->nMap; + int iTest = 0; + + while( i2>i1 ){ + iTest = (i1 + i2) / 2; + + if( aMap[iTest].iRowidiRowid ){ + i2 = iTest; + }else{ + if( aMap[iTest].iPosiPos ){ + i2 = iTest; + }else{ + break; + } + } + } + + if( i2>i1 ){ + Fts5Iter *pMap = pT->apIter[aMap[iTest].iIter]; + *ppOut = (const char*)pMap->aSeg[0].term.p+1; + *pnOut = pMap->aSeg[0].term.n-1; + } + + return SQLITE_OK; +} + +/* +** Clear any existing entries from the token-map associated with the +** iterator passed as the only argument. +*/ +static void sqlite3Fts5IndexIterClearTokendata(Fts5IndexIter *pIndexIter){ + Fts5Iter *pIter = (Fts5Iter*)pIndexIter; + if( pIter && pIter->pTokenDataIter ){ + pIter->pTokenDataIter->nMap = 0; + } +} + +/* +** Set a token-mapping for the iterator passed as the first argument. This +** is used in detail=column or detail=none mode when a token is requested +** using the xInstToken() API. In this case the caller tokenizers the +** current row and configures the token-mapping via multiple calls to this +** function. +*/ +static int sqlite3Fts5IndexIterWriteTokendata( + Fts5IndexIter *pIndexIter, + const char *pToken, int nToken, + i64 iRowid, int iCol, int iOff +){ + Fts5Iter *pIter = (Fts5Iter*)pIndexIter; + Fts5TokenDataIter *pT = pIter->pTokenDataIter; + Fts5Index *p = pIter->pIndex; + int ii; + + assert( p->pConfig->eDetail!=FTS5_DETAIL_FULL ); + assert( pIter->pTokenDataIter ); + + for(ii=0; iinIter; ii++){ + Fts5Buffer *pTerm = &pT->apIter[ii]->aSeg[0].term; + if( nToken==pTerm->n-1 && memcmp(pToken, pTerm->p+1, nToken)==0 ) break; + } + if( iinIter ){ + fts5TokendataIterAppendMap(p, pT, ii, iRowid, (((i64)iCol)<<32) + iOff); + } + return fts5IndexReturn(p); +} + /* ** Close an iterator opened by an earlier call to sqlite3Fts5IndexQuery(). */ @@ -241142,6 +247799,7 @@ static void sqlite3Fts5IterClose(Fts5IndexIter *pIndexIter){ if( pIndexIter ){ Fts5Iter *pIter = (Fts5Iter*)pIndexIter; Fts5Index *pIndex = pIter->pIndex; + fts5TokendataIterDelete(pIter->pTokenDataIter); fts5MultiIterFree(pIter); sqlite3Fts5IndexCloseReader(pIndex); } @@ -241649,7 +248307,9 @@ static int fts5QueryCksum( int eDetail = p->pConfig->eDetail; u64 cksum = *pCksum; Fts5IndexIter *pIter = 0; - int rc = sqlite3Fts5IndexQuery(p, z, n, flags, 0, &pIter); + int rc = sqlite3Fts5IndexQuery( + p, z, n, (flags | FTS5INDEX_QUERY_NOTOKENDATA), 0, &pIter + ); while( rc==SQLITE_OK && ALWAYS(pIter!=0) && 0==sqlite3Fts5IterEof(pIter) ){ i64 rowid = pIter->iRowid; @@ -241816,7 +248476,7 @@ static void fts5IndexIntegrityCheckEmpty( } static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){ - int iTermOff = 0; + i64 iTermOff = 0; int ii; Fts5Buffer buf1 = {0,0,0}; @@ -241825,7 +248485,7 @@ static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){ ii = pLeaf->szLeaf; while( iinn && p->rc==SQLITE_OK ){ int res; - int iOff; + i64 iOff; int nIncr; ii += fts5GetVarint32(&pLeaf->p[ii], nIncr); @@ -242347,6 +249007,24 @@ static void fts5DecodeRowidList( } #endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) +static void fts5BufferAppendTerm(int *pRc, Fts5Buffer *pBuf, Fts5Buffer *pTerm){ + int ii; + fts5BufferGrow(pRc, pBuf, pTerm->n*2 + 1); + if( *pRc==SQLITE_OK ){ + for(ii=0; iin; ii++){ + if( pTerm->p[ii]==0x00 ){ + pBuf->p[pBuf->n++] = '\\'; + pBuf->p[pBuf->n++] = '0'; + }else{ + pBuf->p[pBuf->n++] = pTerm->p[ii]; + } + } + pBuf->p[pBuf->n] = 0x00; + } +} +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ + #if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** The implementation of user-defined scalar function fts5_decode(). @@ -242454,9 +249132,8 @@ static void fts5DecodeFunction( iOff += fts5GetVarint32(&a[iOff], nAppend); term.n = nKeep; fts5BufferAppendBlob(&rc, &term, nAppend, &a[iOff]); - sqlite3Fts5BufferAppendPrintf( - &rc, &s, " term=%.*s", term.n, (const char*)term.p - ); + sqlite3Fts5BufferAppendPrintf(&rc, &s, " term="); + fts5BufferAppendTerm(&rc, &s, &term); iOff += nAppend; /* Figure out where the doclist for this term ends */ @@ -242564,9 +249241,8 @@ static void fts5DecodeFunction( fts5BufferAppendBlob(&rc, &term, nByte, &a[iOff]); iOff += nByte; - sqlite3Fts5BufferAppendPrintf( - &rc, &s, " term=%.*s", term.n, (const char*)term.p - ); + sqlite3Fts5BufferAppendPrintf(&rc, &s, " term="); + fts5BufferAppendTerm(&rc, &s, &term); iOff += fts5DecodeDoclist(&rc, &s, &a[iOff], iEnd-iOff); } @@ -242900,7 +249576,8 @@ static int sqlite3Fts5IndexInit(sqlite3 *db){ 0, /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ - 0 /* xShadowName */ + 0, /* xShadowName */ + 0 /* xIntegrity */ }; rc = sqlite3_create_module(db, "fts5_structure", &fts5structure_module, 0); } @@ -243039,6 +249716,8 @@ struct Fts5FullTable { Fts5Storage *pStorage; /* Document store */ Fts5Global *pGlobal; /* Global (connection wide) data */ Fts5Cursor *pSortCsr; /* Sort data from this cursor */ + int iSavepoint; /* Successful xSavepoint()+1 */ + #ifdef SQLITE_DEBUG struct Fts5TransactionState ts; #endif @@ -243327,6 +250006,13 @@ static int fts5InitVtab( pConfig->pzErrmsg = 0; } + if( rc==SQLITE_OK && pConfig->eContent==FTS5_CONTENT_NORMAL ){ + rc = sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, (int)1); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); + } + if( rc!=SQLITE_OK ){ fts5FreeVtab(pTab); pTab = 0; @@ -243569,12 +250255,15 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ } idxStr[iIdxStr] = '\0'; - /* Set idxFlags flags for the ORDER BY clause */ + /* Set idxFlags flags for the ORDER BY clause + ** + ** Note that tokendata=1 tables cannot currently handle "ORDER BY rowid DESC". + */ if( pInfo->nOrderBy==1 ){ int iSort = pInfo->aOrderBy[0].iColumn; if( iSort==(pConfig->nCol+1) && bSeenMatch ){ idxFlags |= FTS5_BI_ORDER_RANK; - }else if( iSort==-1 ){ + }else if( iSort==-1 && (!pInfo->aOrderBy[0].desc || !pConfig->bTokendata) ){ idxFlags |= FTS5_BI_ORDER_ROWID; } if( BitFlagTest(idxFlags, FTS5_BI_ORDER_RANK|FTS5_BI_ORDER_ROWID) ){ @@ -243826,6 +250515,16 @@ static int fts5NextMethod(sqlite3_vtab_cursor *pCursor){ ); assert( !CsrFlagTest(pCsr, FTS5CSR_EOF) ); + /* If this cursor uses FTS5_PLAN_MATCH and this is a tokendata=1 table, + ** clear any token mappings accumulated at the fts5_index.c level. In + ** other cases, specifically FTS5_PLAN_SOURCE and FTS5_PLAN_SORTED_MATCH, + ** we need to retain the mappings for the entire query. */ + if( pCsr->ePlan==FTS5_PLAN_MATCH + && ((Fts5Table*)pCursor->pVtab)->pConfig->bTokendata + ){ + sqlite3Fts5ExprClearTokens(pCsr->pExpr); + } + if( pCsr->ePlan<3 ){ int bSkip = 0; if( (rc = fts5CursorReseek(pCsr, &bSkip)) || bSkip ) return rc; @@ -244251,6 +250950,9 @@ static int fts5FilterMethod( pCsr->iFirstRowid = fts5GetRowidLimit(pRowidGe, SMALLEST_INT64); } + rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex); + if( rc!=SQLITE_OK ) goto filter_out; + if( pTab->pSortCsr ){ /* If pSortCsr is non-NULL, then this call is being made as part of ** processing for a "... MATCH ORDER BY rank" query (ePlan is @@ -244273,6 +250975,7 @@ static int fts5FilterMethod( pCsr->pExpr = pTab->pSortCsr->pExpr; rc = fts5CursorFirst(pTab, pCsr, bDesc); }else if( pCsr->pExpr ){ + assert( rc==SQLITE_OK ); rc = fts5CursorParseRank(pConfig, pCsr, pRank); if( rc==SQLITE_OK ){ if( bOrderByRank ){ @@ -244444,6 +251147,7 @@ static int fts5SpecialInsert( Fts5Config *pConfig = pTab->p.pConfig; int rc = SQLITE_OK; int bError = 0; + int bLoadConfig = 0; if( 0==sqlite3_stricmp("delete-all", zCmd) ){ if( pConfig->eContent==FTS5_CONTENT_NORMAL ){ @@ -244455,6 +251159,7 @@ static int fts5SpecialInsert( }else{ rc = sqlite3Fts5StorageDeleteAll(pTab->pStorage); } + bLoadConfig = 1; }else if( 0==sqlite3_stricmp("rebuild", zCmd) ){ if( pConfig->eContent==FTS5_CONTENT_NONE ){ fts5SetVtabError(pTab, @@ -244464,6 +251169,7 @@ static int fts5SpecialInsert( }else{ rc = sqlite3Fts5StorageRebuild(pTab->pStorage); } + bLoadConfig = 1; }else if( 0==sqlite3_stricmp("optimize", zCmd) ){ rc = sqlite3Fts5StorageOptimize(pTab->pStorage); }else if( 0==sqlite3_stricmp("merge", zCmd) ){ @@ -244476,8 +251182,13 @@ static int fts5SpecialInsert( }else if( 0==sqlite3_stricmp("prefix-index", zCmd) ){ pConfig->bPrefixIndex = sqlite3_value_int(pVal); #endif + }else if( 0==sqlite3_stricmp("flush", zCmd) ){ + rc = sqlite3Fts5FlushToDisk(&pTab->p); }else{ - rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex); + rc = sqlite3Fts5FlushToDisk(&pTab->p); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex); + } if( rc==SQLITE_OK ){ rc = sqlite3Fts5ConfigSetValue(pTab->p.pConfig, zCmd, pVal, &bError); } @@ -244489,6 +251200,12 @@ static int fts5SpecialInsert( } } } + + if( rc==SQLITE_OK && bLoadConfig ){ + pTab->p.pConfig->iCookie--; + rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex); + } + return rc; } @@ -244607,7 +251324,7 @@ static int fts5UpdateMethod( assert( nArg!=1 || eType0==SQLITE_INTEGER ); /* Filter out attempts to run UPDATE or DELETE on contentless tables. - ** This is not suported. Except - DELETE is supported if the CREATE + ** This is not suported. Except - they are both supported if the CREATE ** VIRTUAL TABLE statement contained "contentless_delete=1". */ if( eType0==SQLITE_INTEGER && pConfig->eContent==FTS5_CONTENT_NONE @@ -244636,7 +251353,8 @@ static int fts5UpdateMethod( } else if( eType0!=SQLITE_INTEGER ){ - /* If this is a REPLACE, first remove the current entry (if any) */ + /* An INSERT statement. If the conflict-mode is REPLACE, first remove + ** the current entry (if any). */ if( eConflict==SQLITE_REPLACE && eType1==SQLITE_INTEGER ){ i64 iNew = sqlite3_value_int64(apVal[1]); /* Rowid to delete */ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iNew, 0); @@ -244795,7 +251513,10 @@ static int fts5ApiColumnText( ){ int rc = SQLITE_OK; Fts5Cursor *pCsr = (Fts5Cursor*)pCtx; - if( fts5IsContentless((Fts5FullTable*)(pCsr->base.pVtab)) + Fts5Table *pTab = (Fts5Table*)(pCsr->base.pVtab); + if( iCol<0 || iCol>=pTab->pConfig->nCol ){ + rc = SQLITE_RANGE; + }else if( fts5IsContentless((Fts5FullTable*)(pCsr->base.pVtab)) || pCsr->ePlan==FTS5_PLAN_SPECIAL ){ *pz = 0; @@ -244820,8 +251541,9 @@ static int fts5CsrPoslist( int rc = SQLITE_OK; int bLive = (pCsr->pSorter==0); - if( CsrFlagTest(pCsr, FTS5CSR_REQUIRE_POSLIST) ){ - + if( iPhrase<0 || iPhrase>=sqlite3Fts5ExprPhraseCount(pCsr->pExpr) ){ + rc = SQLITE_RANGE; + }else if( CsrFlagTest(pCsr, FTS5CSR_REQUIRE_POSLIST) ){ if( pConfig->eDetail!=FTS5_DETAIL_FULL ){ Fts5PoslistPopulator *aPopulator; int i; @@ -244845,15 +251567,21 @@ static int fts5CsrPoslist( CsrFlagClear(pCsr, FTS5CSR_REQUIRE_POSLIST); } - if( pCsr->pSorter && pConfig->eDetail==FTS5_DETAIL_FULL ){ - Fts5Sorter *pSorter = pCsr->pSorter; - int i1 = (iPhrase==0 ? 0 : pSorter->aIdx[iPhrase-1]); - *pn = pSorter->aIdx[iPhrase] - i1; - *pa = &pSorter->aPoslist[i1]; + if( rc==SQLITE_OK ){ + if( pCsr->pSorter && pConfig->eDetail==FTS5_DETAIL_FULL ){ + Fts5Sorter *pSorter = pCsr->pSorter; + int i1 = (iPhrase==0 ? 0 : pSorter->aIdx[iPhrase-1]); + *pn = pSorter->aIdx[iPhrase] - i1; + *pa = &pSorter->aPoslist[i1]; + }else{ + *pn = sqlite3Fts5ExprPoslist(pCsr->pExpr, iPhrase, pa); + } }else{ - *pn = sqlite3Fts5ExprPoslist(pCsr->pExpr, iPhrase, pa); + *pa = 0; + *pn = 0; } + return rc; } @@ -244960,12 +251688,6 @@ static int fts5ApiInst( ){ if( iIdx<0 || iIdx>=pCsr->nInstCount ){ rc = SQLITE_RANGE; -#if 0 - }else if( fts5IsOffsetless((Fts5Table*)pCsr->base.pVtab) ){ - *piPhrase = pCsr->aInst[iIdx*3]; - *piCol = pCsr->aInst[iIdx*3 + 2]; - *piOff = -1; -#endif }else{ *piPhrase = pCsr->aInst[iIdx*3]; *piCol = pCsr->aInst[iIdx*3 + 1]; @@ -245220,13 +251942,56 @@ static int fts5ApiPhraseFirstColumn( return rc; } +/* +** xQueryToken() API implemenetation. +*/ +static int fts5ApiQueryToken( + Fts5Context* pCtx, + int iPhrase, + int iToken, + const char **ppOut, + int *pnOut +){ + Fts5Cursor *pCsr = (Fts5Cursor*)pCtx; + return sqlite3Fts5ExprQueryToken(pCsr->pExpr, iPhrase, iToken, ppOut, pnOut); +} + +/* +** xInstToken() API implemenetation. +*/ +static int fts5ApiInstToken( + Fts5Context *pCtx, + int iIdx, + int iToken, + const char **ppOut, int *pnOut +){ + Fts5Cursor *pCsr = (Fts5Cursor*)pCtx; + int rc = SQLITE_OK; + if( CsrFlagTest(pCsr, FTS5CSR_REQUIRE_INST)==0 + || SQLITE_OK==(rc = fts5CacheInstArray(pCsr)) + ){ + if( iIdx<0 || iIdx>=pCsr->nInstCount ){ + rc = SQLITE_RANGE; + }else{ + int iPhrase = pCsr->aInst[iIdx*3]; + int iCol = pCsr->aInst[iIdx*3 + 1]; + int iOff = pCsr->aInst[iIdx*3 + 2]; + i64 iRowid = fts5CursorRowid(pCsr); + rc = sqlite3Fts5ExprInstToken( + pCsr->pExpr, iRowid, iPhrase, iCol, iOff, iToken, ppOut, pnOut + ); + } + } + return rc; +} + static int fts5ApiQueryPhrase(Fts5Context*, int, void*, int(*)(const Fts5ExtensionApi*, Fts5Context*, void*) ); static const Fts5ExtensionApi sFts5Api = { - 2, /* iVersion */ + 3, /* iVersion */ fts5ApiUserData, fts5ApiColumnCount, fts5ApiRowCount, @@ -245246,6 +252011,8 @@ static const Fts5ExtensionApi sFts5Api = { fts5ApiPhraseNext, fts5ApiPhraseFirstColumn, fts5ApiPhraseNextColumn, + fts5ApiQueryToken, + fts5ApiInstToken }; /* @@ -245510,8 +252277,10 @@ static int fts5RenameMethod( sqlite3_vtab *pVtab, /* Virtual table handle */ const char *zName /* New name of table */ ){ + int rc; Fts5FullTable *pTab = (Fts5FullTable*)pVtab; - return sqlite3Fts5StorageRename(pTab->pStorage, zName); + rc = sqlite3Fts5StorageRename(pTab->pStorage, zName); + return rc; } static int sqlite3Fts5FlushToDisk(Fts5Table *pTab){ @@ -245525,9 +252294,15 @@ static int sqlite3Fts5FlushToDisk(Fts5Table *pTab){ ** Flush the contents of the pending-terms table to disk. */ static int fts5SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ - UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */ - fts5CheckTransactionState((Fts5FullTable*)pVtab, FTS5_SAVEPOINT, iSavepoint); - return sqlite3Fts5FlushToDisk((Fts5Table*)pVtab); + Fts5FullTable *pTab = (Fts5FullTable*)pVtab; + int rc = SQLITE_OK; + + fts5CheckTransactionState(pTab, FTS5_SAVEPOINT, iSavepoint); + rc = sqlite3Fts5FlushToDisk((Fts5Table*)pVtab); + if( rc==SQLITE_OK ){ + pTab->iSavepoint = iSavepoint+1; + } + return rc; } /* @@ -245536,9 +252311,16 @@ static int fts5SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ ** This is a no-op. */ static int fts5ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ - UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */ - fts5CheckTransactionState((Fts5FullTable*)pVtab, FTS5_RELEASE, iSavepoint); - return sqlite3Fts5FlushToDisk((Fts5Table*)pVtab); + Fts5FullTable *pTab = (Fts5FullTable*)pVtab; + int rc = SQLITE_OK; + fts5CheckTransactionState(pTab, FTS5_RELEASE, iSavepoint); + if( (iSavepoint+1)iSavepoint ){ + rc = sqlite3Fts5FlushToDisk(&pTab->p); + if( rc==SQLITE_OK ){ + pTab->iSavepoint = iSavepoint; + } + } + return rc; } /* @@ -245548,11 +252330,14 @@ static int fts5ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ */ static int fts5RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){ Fts5FullTable *pTab = (Fts5FullTable*)pVtab; - UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */ + int rc = SQLITE_OK; fts5CheckTransactionState(pTab, FTS5_ROLLBACKTO, iSavepoint); fts5TripCursors(pTab); - pTab->p.pConfig->pgsz = 0; - return sqlite3Fts5StorageRollback(pTab->pStorage); + if( (iSavepoint+1)<=pTab->iSavepoint ){ + pTab->p.pConfig->pgsz = 0; + rc = sqlite3Fts5StorageRollback(pTab->pStorage); + } + return rc; } /* @@ -245754,7 +252539,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e", -1, SQLITE_TRANSIENT); } /* @@ -245772,9 +252557,41 @@ static int fts5ShadowName(const char *zName){ return 0; } +/* +** Run an integrity check on the FTS5 data structures. Return a string +** if anything is found amiss. Return a NULL pointer if everything is +** OK. +*/ +static int fts5IntegrityMethod( + sqlite3_vtab *pVtab, /* the FTS5 virtual table to check */ + const char *zSchema, /* Name of schema in which this table lives */ + const char *zTabname, /* Name of the table itself */ + int isQuick, /* True if this is a quick-check */ + char **pzErr /* Write error message here */ +){ + Fts5FullTable *pTab = (Fts5FullTable*)pVtab; + int rc; + + assert( pzErr!=0 && *pzErr==0 ); + UNUSED_PARAM(isQuick); + rc = sqlite3Fts5StorageIntegrity(pTab->pStorage, 0); + if( (rc&0xff)==SQLITE_CORRUPT ){ + *pzErr = sqlite3_mprintf("malformed inverted index for FTS5 table %s.%s", + zSchema, zTabname); + rc = (*pzErr) ? SQLITE_OK : SQLITE_NOMEM; + }else if( rc!=SQLITE_OK ){ + *pzErr = sqlite3_mprintf("unable to validate the inverted index for" + " FTS5 table %s.%s: %s", + zSchema, zTabname, sqlite3_errstr(rc)); + } + sqlite3Fts5IndexCloseReader(pTab->p.pIndex); + + return rc; +} + static int fts5Init(sqlite3 *db){ static const sqlite3_module fts5Mod = { - /* iVersion */ 3, + /* iVersion */ 4, /* xCreate */ fts5CreateMethod, /* xConnect */ fts5ConnectMethod, /* xBestIndex */ fts5BestIndexMethod, @@ -245797,7 +252614,8 @@ static int fts5Init(sqlite3 *db){ /* xSavepoint */ fts5SavepointMethod, /* xRelease */ fts5ReleaseMethod, /* xRollbackTo */ fts5RollbackToMethod, - /* xShadowName */ fts5ShadowName + /* xShadowName */ fts5ShadowName, + /* xIntegrity */ fts5IntegrityMethod }; int rc; @@ -246563,7 +253381,7 @@ static int sqlite3Fts5StorageRebuild(Fts5Storage *p){ } if( rc==SQLITE_OK ){ - rc = fts5StorageGetStmt(p, FTS5_STMT_SCAN, &pScan, 0); + rc = fts5StorageGetStmt(p, FTS5_STMT_SCAN, &pScan, pConfig->pzErrmsg); } while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pScan) ){ @@ -247074,7 +253892,9 @@ static int sqlite3Fts5StorageSync(Fts5Storage *p){ i64 iLastRowid = sqlite3_last_insert_rowid(p->pConfig->db); if( p->bTotalsValid ){ rc = fts5StorageSaveTotals(p); - p->bTotalsValid = 0; + if( rc==SQLITE_OK ){ + p->bTotalsValid = 0; + } } if( rc==SQLITE_OK ){ rc = sqlite3Fts5IndexSync(p->pIndex); @@ -247348,6 +254168,12 @@ static const unsigned char sqlite3Utf8Trans1[] = { #endif /* ifndef SQLITE_AMALGAMATION */ +#define FTS5_SKIP_UTF8(zIn) { \ + if( ((unsigned char)(*(zIn++)))>=0xc0 ){ \ + while( (((unsigned char)*zIn) & 0xc0)==0x80 ){ zIn++; } \ + } \ +} + typedef struct Unicode61Tokenizer Unicode61Tokenizer; struct Unicode61Tokenizer { unsigned char aTokenChar[128]; /* ASCII range token characters */ @@ -248383,6 +255209,7 @@ static int fts5PorterTokenize( typedef struct TrigramTokenizer TrigramTokenizer; struct TrigramTokenizer { int bFold; /* True to fold to lower-case */ + int iFoldParam; /* Parameter to pass to Fts5UnicodeFold() */ }; /* @@ -248409,6 +255236,7 @@ static int fts5TriCreate( }else{ int i; pNew->bFold = 1; + pNew->iFoldParam = 0; for(i=0; rc==SQLITE_OK && ibFold = (zArg[0]=='0'); } + }else if( 0==sqlite3_stricmp(azArg[i], "remove_diacritics") ){ + if( (zArg[0]!='0' && zArg[0]!='1' && zArg[0]!='2') || zArg[1] ){ + rc = SQLITE_ERROR; + }else{ + pNew->iFoldParam = (zArg[0]!='0') ? 2 : 0; + } }else{ rc = SQLITE_ERROR; } } + + if( pNew->iFoldParam!=0 && pNew->bFold==0 ){ + rc = SQLITE_ERROR; + } + if( rc!=SQLITE_OK ){ fts5TriDelete((Fts5Tokenizer*)pNew); pNew = 0; @@ -248443,40 +255282,62 @@ static int fts5TriTokenize( TrigramTokenizer *p = (TrigramTokenizer*)pTok; int rc = SQLITE_OK; char aBuf[32]; + char *zOut = aBuf; + int ii; const unsigned char *zIn = (const unsigned char*)pText; const unsigned char *zEof = &zIn[nText]; u32 iCode; + int aStart[3]; /* Input offset of each character in aBuf[] */ UNUSED_PARAM(unusedFlags); - while( 1 ){ - char *zOut = aBuf; - int iStart = zIn - (const unsigned char*)pText; - const unsigned char *zNext; - - READ_UTF8(zIn, zEof, iCode); - if( iCode==0 ) break; - zNext = zIn; - if( zInbFold ) iCode = sqlite3Fts5UnicodeFold(iCode, 0); - WRITE_UTF8(zOut, iCode); + + /* Populate aBuf[] with the characters for the first trigram. */ + for(ii=0; ii<3; ii++){ + do { + aStart[ii] = zIn - (const unsigned char*)pText; READ_UTF8(zIn, zEof, iCode); - if( iCode==0 ) break; - }else{ - break; - } - if( zInbFold ) iCode = sqlite3Fts5UnicodeFold(iCode, 0); - WRITE_UTF8(zOut, iCode); + if( iCode==0 ) return SQLITE_OK; + if( p->bFold ) iCode = sqlite3Fts5UnicodeFold(iCode, p->iFoldParam); + }while( iCode==0 ); + WRITE_UTF8(zOut, iCode); + } + + /* At the start of each iteration of this loop: + ** + ** aBuf: Contains 3 characters. The 3 characters of the next trigram. + ** zOut: Points to the byte following the last character in aBuf. + ** aStart[3]: Contains the byte offset in the input text corresponding + ** to the start of each of the three characters in the buffer. + */ + assert( zIn<=zEof ); + while( 1 ){ + int iNext; /* Start of character following current tri */ + const char *z1; + + /* Read characters from the input up until the first non-diacritic */ + do { + iNext = zIn - (const unsigned char*)pText; READ_UTF8(zIn, zEof, iCode); if( iCode==0 ) break; - if( p->bFold ) iCode = sqlite3Fts5UnicodeFold(iCode, 0); - WRITE_UTF8(zOut, iCode); - }else{ - break; - } - rc = xToken(pCtx, 0, aBuf, zOut-aBuf, iStart, iStart + zOut-aBuf); - if( rc!=SQLITE_OK ) break; - zIn = zNext; + if( p->bFold ) iCode = sqlite3Fts5UnicodeFold(iCode, p->iFoldParam); + }while( iCode==0 ); + + /* Pass the current trigram back to fts5 */ + rc = xToken(pCtx, 0, aBuf, zOut-aBuf, aStart[0], iNext); + if( iCode==0 || rc!=SQLITE_OK ) break; + + /* Remove the first character from buffer aBuf[]. Append the character + ** with codepoint iCode. */ + z1 = aBuf; + FTS5_SKIP_UTF8(z1); + memmove(aBuf, z1, zOut - z1); + zOut -= (z1 - aBuf); + WRITE_UTF8(zOut, iCode); + + /* Update the aStart[] array */ + aStart[0] = aStart[1]; + aStart[1] = aStart[2]; + aStart[2] = iNext; } return rc; @@ -248499,7 +255360,9 @@ static int sqlite3Fts5TokenizerPattern( ){ if( xCreate==fts5TriCreate ){ TrigramTokenizer *p = (TrigramTokenizer*)pTok; - return p->bFold ? FTS5_PATTERN_LIKE : FTS5_PATTERN_GLOB; + if( p->iFoldParam==0 ){ + return p->bFold ? FTS5_PATTERN_LIKE : FTS5_PATTERN_GLOB; + } } return FTS5_PATTERN_NONE; } @@ -250288,7 +257151,7 @@ static int fts5VocabFilterMethod( if( pEq ){ zTerm = (const char *)sqlite3_value_text(pEq); nTerm = sqlite3_value_bytes(pEq); - f = 0; + f = FTS5INDEX_QUERY_NOTOKENDATA; }else{ if( pGe ){ zTerm = (const char *)sqlite3_value_text(pGe); @@ -250442,7 +257305,8 @@ static int sqlite3Fts5VocabInit(Fts5Global *pGlobal, sqlite3 *db){ /* xSavepoint */ 0, /* xRelease */ 0, /* xRollbackTo */ 0, - /* xShadowName */ 0 + /* xShadowName */ 0, + /* xIntegrity */ 0 }; void *p = (void*)pGlobal; @@ -250771,6 +257635,7 @@ static sqlite3_module stmtModule = { 0, /* xRelease */ 0, /* xRollbackTo */ 0, /* xShadowName */ + 0 /* xIntegrity */ }; #endif /* SQLITE_OMIT_VIRTUALTABLE */ diff --git a/src/sqlite/SQLite-3.43.1/sqlite3.h b/src/sqlite/SQLite-3.46.0/sqlite3.h similarity index 96% rename from src/sqlite/SQLite-3.43.1/sqlite3.h rename to src/sqlite/SQLite-3.46.0/sqlite3.h index b9d069298..57df8dcf2 100644 --- a/src/sqlite/SQLite-3.43.1/sqlite3.h +++ b/src/sqlite/SQLite-3.46.0/sqlite3.h @@ -146,9 +146,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.43.1" -#define SQLITE_VERSION_NUMBER 3043001 -#define SQLITE_SOURCE_ID "2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0" +#define SQLITE_VERSION "3.46.0" +#define SQLITE_VERSION_NUMBER 3046000 +#define SQLITE_SOURCE_ID "2024-05-23 13:25:27 96c92aba00c8375bc32fafcdf12429c58bd8aabfcadab6683e35bbb9cdebf19e" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -420,6 +420,8 @@ typedef int (*sqlite3_callback)(void*,int,char**, char**); ** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running. **
  • The application must not modify the SQL statement text passed into ** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running. +**
  • The application must not dereference the arrays or string pointers +** passed as the 3rd and 4th callback parameters after it returns. ** */ SQLITE_API int sqlite3_exec( @@ -762,11 +764,11 @@ struct sqlite3_file { ** ** xLock() upgrades the database file lock. In other words, xLock() moves the ** database file lock in the direction NONE toward EXCLUSIVE. The argument to -** xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never +** xLock() is always one of SHARED, RESERVED, PENDING, or EXCLUSIVE, never ** SQLITE_LOCK_NONE. If the database file lock is already at or above the ** requested lock, then the call to xLock() is a no-op. ** xUnlock() downgrades the database file lock to either SHARED or NONE. -* If the lock is already at or below the requested lock state, then the call +** If the lock is already at or below the requested lock state, then the call ** to xUnlock() is a no-op. ** The xCheckReservedLock() method checks whether any database connection, ** either in this process or in some other process, is holding a RESERVED, @@ -2127,7 +2129,7 @@ struct sqlite3_mem_methods { ** is stored in each sorted record and the required column values loaded ** from the database as records are returned in sorted order. The default ** value for this option is to never use this optimization. Specifying a -** negative value for this option restores the default behaviour. +** negative value for this option restores the default behavior. ** This option is only available if SQLite is compiled with the ** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option. ** @@ -2141,6 +2143,22 @@ struct sqlite3_mem_methods { ** configuration setting is never used, then the default maximum is determined ** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that ** compile-time option is not set, then the default maximum is 1073741824. +** +** [[SQLITE_CONFIG_ROWID_IN_VIEW]] +**
    SQLITE_CONFIG_ROWID_IN_VIEW +**
    The SQLITE_CONFIG_ROWID_IN_VIEW option enables or disables the ability +** for VIEWs to have a ROWID. The capability can only be enabled if SQLite is +** compiled with -DSQLITE_ALLOW_ROWID_IN_VIEW, in which case the capability +** defaults to on. This configuration option queries the current setting or +** changes the setting to off or on. The argument is a pointer to an integer. +** If that integer initially holds a value of 1, then the ability for VIEWs to +** have ROWIDs is activated. If the integer initially holds zero, then the +** ability is deactivated. Any other initial value for the integer leaves the +** setting unchanged. After changes, if any, the integer is written with +** a 1 or 0, if the ability for VIEWs to have ROWIDs is on or off. If SQLite +** is compiled without -DSQLITE_ALLOW_ROWID_IN_VIEW (which is the usual and +** recommended case) then the integer is always filled with zero, regardless +** if its initial value. ** */ #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ @@ -2172,6 +2190,7 @@ struct sqlite3_mem_methods { #define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */ #define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */ #define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */ +#define SQLITE_CONFIG_ROWID_IN_VIEW 30 /* int* */ /* ** CAPI3REF: Database Connection Configuration Options @@ -2302,7 +2321,7 @@ struct sqlite3_mem_methods { ** database handle, SQLite checks if this will mean that there are now no ** connections at all to the database. If so, it performs a checkpoint ** operation before closing the connection. This option may be used to -** override this behaviour. The first parameter passed to this operation +** override this behavior. The first parameter passed to this operation ** is an integer - positive to disable checkpoints-on-close, or zero (the ** default) to enable them, and negative to leave the setting unchanged. ** The second parameter is a pointer to an integer @@ -3286,8 +3305,8 @@ SQLITE_API int sqlite3_set_authorizer( #define SQLITE_RECURSIVE 33 /* NULL NULL */ /* -** CAPI3REF: Tracing And Profiling Functions -** METHOD: sqlite3 +** CAPI3REF: Deprecated Tracing And Profiling Functions +** DEPRECATED ** ** These routines are deprecated. Use the [sqlite3_trace_v2()] interface ** instead of the routines described here. @@ -3954,14 +3973,17 @@ SQLITE_API void sqlite3_free_filename(sqlite3_filename); ** ** ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language -** text that describes the error, as either UTF-8 or UTF-16 respectively. +** text that describes the error, as either UTF-8 or UTF-16 respectively, +** or NULL if no error message is available. +** (See how SQLite handles [invalid UTF] for exceptions to this rule.) ** ^(Memory to hold the error message string is managed internally. ** The application does not need to worry about freeing the result. ** However, the error string might be overwritten or deallocated by ** subsequent calls to other SQLite interface functions.)^ ** -** ^The sqlite3_errstr() interface returns the English-language text -** that describes the [result code], as UTF-8. +** ^The sqlite3_errstr(E) interface returns the English-language text +** that describes the [result code] E, as UTF-8, or NULL if E is not an +** result code for which a text error message is available. ** ^(Memory to hold the error message string is managed internally ** and must not be freed by the application)^. ** @@ -5325,6 +5347,7 @@ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); */ SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt); + /* ** CAPI3REF: Create Or Redefine SQL Functions ** KEYWORDS: {function creation routines} @@ -5571,13 +5594,27 @@ SQLITE_API int sqlite3_create_window_function( **
    ** ** [[SQLITE_SUBTYPE]]
    SQLITE_SUBTYPE
    -** The SQLITE_SUBTYPE flag indicates to SQLite that a function may call +** The SQLITE_SUBTYPE flag indicates to SQLite that a function might call ** [sqlite3_value_subtype()] to inspect the sub-types of its arguments. -** Specifying this flag makes no difference for scalar or aggregate user -** functions. However, if it is not specified for a user-defined window -** function, then any sub-types belonging to arguments passed to the window -** function may be discarded before the window function is called (i.e. -** sqlite3_value_subtype() will always return 0). +** This flag instructs SQLite to omit some corner-case optimizations that +** might disrupt the operation of the [sqlite3_value_subtype()] function, +** causing it to return zero rather than the correct subtype(). +** SQL functions that invokes [sqlite3_value_subtype()] should have this +** property. If the SQLITE_SUBTYPE property is omitted, then the return +** value from [sqlite3_value_subtype()] might sometimes be zero even though +** a non-zero subtype was specified by the function argument expression. +** +** [[SQLITE_RESULT_SUBTYPE]]
    SQLITE_RESULT_SUBTYPE
    +** The SQLITE_RESULT_SUBTYPE flag indicates to SQLite that a function might call +** [sqlite3_result_subtype()] to cause a sub-type to be associated with its +** result. +** Every function that invokes [sqlite3_result_subtype()] should have this +** property. If it does not, then the call to [sqlite3_result_subtype()] +** might become a no-op if the function is used as term in an +** [expression index]. On the other hand, SQL functions that never invoke +** [sqlite3_result_subtype()] should avoid setting this property, as the +** purpose of this property is to disable certain optimizations that are +** incompatible with subtypes. **
    ** */ @@ -5585,6 +5622,7 @@ SQLITE_API int sqlite3_create_window_function( #define SQLITE_DIRECTONLY 0x000080000 #define SQLITE_SUBTYPE 0x000100000 #define SQLITE_INNOCUOUS 0x000200000 +#define SQLITE_RESULT_SUBTYPE 0x001000000 /* ** CAPI3REF: Deprecated Functions @@ -5781,6 +5819,12 @@ SQLITE_API int sqlite3_value_encoding(sqlite3_value*); ** information can be used to pass a limited amount of context from ** one SQL function to another. Use the [sqlite3_result_subtype()] ** routine to set the subtype for the return value of an SQL function. +** +** Every [application-defined SQL function] that invoke this interface +** should include the [SQLITE_SUBTYPE] property in the text +** encoding argument when the function is [sqlite3_create_function|registered]. +** If the [SQLITE_SUBTYPE] property is omitted, then sqlite3_value_subtype() +** might return zero instead of the upstream subtype in some corner cases. */ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*); @@ -5879,48 +5923,56 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** METHOD: sqlite3_context ** ** These functions may be used by (non-aggregate) SQL functions to -** associate metadata with argument values. If the same value is passed to -** multiple invocations of the same SQL function during query execution, under -** some circumstances the associated metadata may be preserved. An example -** of where this might be useful is in a regular-expression matching -** function. The compiled version of the regular expression can be stored as -** metadata associated with the pattern string. +** associate auxiliary data with argument values. If the same argument +** value is passed to multiple invocations of the same SQL function during +** query execution, under some circumstances the associated auxiliary data +** might be preserved. An example of where this might be useful is in a +** regular-expression matching function. The compiled version of the regular +** expression can be stored as auxiliary data associated with the pattern string. ** Then as long as the pattern string remains the same, ** the compiled regular expression can be reused on multiple ** invocations of the same function. ** -** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata +** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the auxiliary data ** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument ** value to the application-defined function. ^N is zero for the left-most -** function argument. ^If there is no metadata +** function argument. ^If there is no auxiliary data ** associated with the function argument, the sqlite3_get_auxdata(C,N) interface ** returns a NULL pointer. ** -** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th -** argument of the application-defined function. ^Subsequent +** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as auxiliary data for the +** N-th argument of the application-defined function. ^Subsequent ** calls to sqlite3_get_auxdata(C,N) return P from the most recent -** sqlite3_set_auxdata(C,N,P,X) call if the metadata is still valid or -** NULL if the metadata has been discarded. +** sqlite3_set_auxdata(C,N,P,X) call if the auxiliary data is still valid or +** NULL if the auxiliary data has been discarded. ** ^After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL, ** SQLite will invoke the destructor function X with parameter P exactly -** once, when the metadata is discarded. -** SQLite is free to discard the metadata at any time, including:
      +** once, when the auxiliary data is discarded. +** SQLite is free to discard the auxiliary data at any time, including:
        **
      • ^(when the corresponding function parameter changes)^, or **
      • ^(when [sqlite3_reset()] or [sqlite3_finalize()] is called for the ** SQL statement)^, or **
      • ^(when sqlite3_set_auxdata() is invoked again on the same ** parameter)^, or **
      • ^(during the original sqlite3_set_auxdata() call when a memory -** allocation error occurs.)^
      +** allocation error occurs.)^ +**
    • ^(during the original sqlite3_set_auxdata() call if the function +** is evaluated during query planning instead of during query execution, +** as sometimes happens with [SQLITE_ENABLE_STAT4].)^
    ** -** Note the last bullet in particular. The destructor X in +** Note the last two bullets in particular. The destructor X in ** sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the ** sqlite3_set_auxdata() interface even returns. Hence sqlite3_set_auxdata() ** should be called near the end of the function implementation and the ** function implementation should not make any use of P after -** sqlite3_set_auxdata() has been called. -** -** ^(In practice, metadata is preserved between function calls for +** sqlite3_set_auxdata() has been called. Furthermore, a call to +** sqlite3_get_auxdata() that occurs immediately after a corresponding call +** to sqlite3_set_auxdata() might still return NULL if an out-of-memory +** condition occurred during the sqlite3_set_auxdata() call or if the +** function is being evaluated during query planning rather than during +** query execution. +** +** ^(In practice, auxiliary data is preserved between function calls for ** function parameters that are compile-time constants, including literal ** values and [parameters] and expressions composed from the same.)^ ** @@ -5930,10 +5982,67 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** ** These routines must be called from the same thread in which ** the SQL function is running. +** +** See also: [sqlite3_get_clientdata()] and [sqlite3_set_clientdata()]. */ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N); SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*)); +/* +** CAPI3REF: Database Connection Client Data +** METHOD: sqlite3 +** +** These functions are used to associate one or more named pointers +** with a [database connection]. +** A call to sqlite3_set_clientdata(D,N,P,X) causes the pointer P +** to be attached to [database connection] D using name N. Subsequent +** calls to sqlite3_get_clientdata(D,N) will return a copy of pointer P +** or a NULL pointer if there were no prior calls to +** sqlite3_set_clientdata() with the same values of D and N. +** Names are compared using strcmp() and are thus case sensitive. +** +** If P and X are both non-NULL, then the destructor X is invoked with +** argument P on the first of the following occurrences: +**
      +**
    • An out-of-memory error occurs during the call to +** sqlite3_set_clientdata() which attempts to register pointer P. +**
    • A subsequent call to sqlite3_set_clientdata(D,N,P,X) is made +** with the same D and N parameters. +**
    • The database connection closes. SQLite does not make any guarantees +** about the order in which destructors are called, only that all +** destructors will be called exactly once at some point during the +** database connection closing process. +**
    +** +** SQLite does not do anything with client data other than invoke +** destructors on the client data at the appropriate time. The intended +** use for client data is to provide a mechanism for wrapper libraries +** to store additional information about an SQLite database connection. +** +** There is no limit (other than available memory) on the number of different +** client data pointers (with different names) that can be attached to a +** single database connection. However, the implementation is optimized +** for the case of having only one or two different client data names. +** Applications and wrapper libraries are discouraged from using more than +** one client data name each. +** +** There is no way to enumerate the client data pointers +** associated with a database connection. The N parameter can be thought +** of as a secret key such that only code that knows the secret key is able +** to access the associated data. +** +** Security Warning: These interfaces should not be exposed in scripting +** languages or in other circumstances where it might be possible for an +** an attacker to invoke them. Any agent that can invoke these interfaces +** can probably also take control of the process. +** +** Database connection client data is only available for SQLite +** version 3.44.0 ([dateof:3.44.0]) and later. +** +** See also: [sqlite3_set_auxdata()] and [sqlite3_get_auxdata()]. +*/ +SQLITE_API void *sqlite3_get_clientdata(sqlite3*,const char*); +SQLITE_API int sqlite3_set_clientdata(sqlite3*, const char*, void*, void(*)(void*)); /* ** CAPI3REF: Constants Defining Special Destructor Behavior @@ -6135,6 +6244,20 @@ SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n); ** higher order bits are discarded. ** The number of subtype bytes preserved by SQLite might increase ** in future releases of SQLite. +** +** Every [application-defined SQL function] that invokes this interface +** should include the [SQLITE_RESULT_SUBTYPE] property in its +** text encoding argument when the SQL function is +** [sqlite3_create_function|registered]. If the [SQLITE_RESULT_SUBTYPE] +** property is omitted from the function that invokes sqlite3_result_subtype(), +** then in some cases the sqlite3_result_subtype() might fail to set +** the result subtype. +** +** If SQLite is compiled with -DSQLITE_STRICT_SUBTYPE=1, then any +** SQL function that invokes the sqlite3_result_subtype() interface +** and that does not have the SQLITE_RESULT_SUBTYPE property will raise +** an error. Future versions of SQLite might enable -DSQLITE_STRICT_SUBTYPE=1 +** by default. */ SQLITE_API void sqlite3_result_subtype(sqlite3_context*,unsigned int); @@ -6566,7 +6689,7 @@ SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName); SQLITE_API int sqlite3_txn_state(sqlite3*,const char *zSchema); /* -** CAPI3REF: Allowed return values from [sqlite3_txn_state()] +** CAPI3REF: Allowed return values from sqlite3_txn_state() ** KEYWORDS: {transaction state} ** ** These constants define the current transaction state of a database file. @@ -6698,7 +6821,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ^Each call to the sqlite3_autovacuum_pages() interface overrides all ** previous invocations for that database connection. ^If the callback ** argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer, -** then the autovacuum steps callback is cancelled. The return value +** then the autovacuum steps callback is canceled. The return value ** from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might ** be some other error code if something goes wrong. The current ** implementation will only return SQLITE_OK or SQLITE_MISUSE, but other @@ -6764,6 +6887,12 @@ SQLITE_API int sqlite3_autovacuum_pages( ** The exceptions defined in this paragraph might change in a future ** release of SQLite. ** +** Whether the update hook is invoked before or after the +** corresponding change is currently unspecified and may differ +** depending on the type of change. Do not rely on the order of the +** hook call with regards to the final result of the operation which +** triggers the hook. +** ** The update hook implementation must not do anything that will modify ** the database connection that invoked the update hook. Any actions ** to modify the database connection must be deferred until after the @@ -7217,6 +7346,10 @@ struct sqlite3_module { /* The methods above are in versions 1 and 2 of the sqlite_module object. ** Those below are for version 3 and greater. */ int (*xShadowName)(const char*); + /* The methods above are in versions 1 through 3 of the sqlite_module object. + ** Those below are for version 4 and greater. */ + int (*xIntegrity)(sqlite3_vtab *pVTab, const char *zSchema, + const char *zTabName, int mFlags, char **pzErr); }; /* @@ -7704,7 +7837,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64); ** code is returned and the transaction rolled back. ** ** Calling this function with an argument that is not a NULL pointer or an -** open blob handle results in undefined behaviour. ^Calling this routine +** open blob handle results in undefined behavior. ^Calling this routine ** with a null pointer (such as would be returned by a failed call to ** [sqlite3_blob_open()]) is a harmless no-op. ^Otherwise, if this function ** is passed a valid open blob handle, the values returned by the @@ -7931,9 +8064,11 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** ** ^(Some systems (for example, Windows 95) do not support the operation ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() -** will always return SQLITE_BUSY. The SQLite core only ever uses -** sqlite3_mutex_try() as an optimization so this is acceptable -** behavior.)^ +** will always return SQLITE_BUSY. In most cases the SQLite core only uses +** sqlite3_mutex_try() as an optimization, so this is acceptable +** behavior. The exceptions are unix builds that set the +** SQLITE_ENABLE_SETLK_TIMEOUT build option. In that case a working +** sqlite3_mutex_try() is required.)^ ** ** ^The sqlite3_mutex_leave() routine exits a mutex that was ** previously entered by the same thread. The behavior @@ -8184,6 +8319,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_PRNG_SAVE 5 #define SQLITE_TESTCTRL_PRNG_RESTORE 6 #define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */ +#define SQLITE_TESTCTRL_FK_NO_ACTION 7 #define SQLITE_TESTCTRL_BITVEC_TEST 8 #define SQLITE_TESTCTRL_FAULT_INSTALL 9 #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 @@ -8191,6 +8327,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_ASSERT 12 #define SQLITE_TESTCTRL_ALWAYS 13 #define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */ +#define SQLITE_TESTCTRL_JSON_SELFCHECK 14 #define SQLITE_TESTCTRL_OPTIMIZATIONS 15 #define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */ #define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */ @@ -8226,7 +8363,7 @@ SQLITE_API int sqlite3_test_control(int op, ...); ** The sqlite3_keyword_count() interface returns the number of distinct ** keywords understood by SQLite. ** -** The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and +** The sqlite3_keyword_name(N,Z,L) interface finds the 0-based N-th keyword and ** makes *Z point to that keyword expressed as UTF8 and writes the number ** of bytes in the keyword into *L. The string that *Z points to is not ** zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns @@ -9245,8 +9382,8 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** blocked connection already has a registered unlock-notify callback, ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is cancelled. ^The blocked connections -** unlock-notify callback may also be cancelled by closing the blocked +** unlock-notify callback is canceled. ^The blocked connections +** unlock-notify callback may also be canceled by closing the blocked ** connection using [sqlite3_close()]. ** ** The unlock-notify callback is not reentrant. If an application invokes @@ -9805,24 +9942,45 @@ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int); **
  • ** ^(If the sqlite3_vtab_distinct() interface returns 2, that means ** that the query planner does not need the rows returned in any particular -** order, as long as rows with the same values in all "aOrderBy" columns -** are adjacent.)^ ^(Furthermore, only a single row for each particular -** combination of values in the columns identified by the "aOrderBy" field -** needs to be returned.)^ ^It is always ok for two or more rows with the same -** values in all "aOrderBy" columns to be returned, as long as all such rows -** are adjacent. ^The virtual table may, if it chooses, omit extra rows -** that have the same value for all columns identified by "aOrderBy". -** ^However omitting the extra rows is optional. +** order, as long as rows with the same values in all columns identified +** by "aOrderBy" are adjacent.)^ ^(Furthermore, when two or more rows +** contain the same values for all columns identified by "colUsed", all but +** one such row may optionally be omitted from the result.)^ +** The virtual table is not required to omit rows that are duplicates +** over the "colUsed" columns, but if the virtual table can do that without +** too much extra effort, it could potentially help the query to run faster. ** This mode is used for a DISTINCT query. **

  • -** ^(If the sqlite3_vtab_distinct() interface returns 3, that means -** that the query planner needs only distinct rows but it does need the -** rows to be sorted.)^ ^The virtual table implementation is free to omit -** rows that are identical in all aOrderBy columns, if it wants to, but -** it is not required to omit any rows. This mode is used for queries +** ^(If the sqlite3_vtab_distinct() interface returns 3, that means the +** virtual table must return rows in the order defined by "aOrderBy" as +** if the sqlite3_vtab_distinct() interface had returned 0. However if +** two or more rows in the result have the same values for all columns +** identified by "colUsed", then all but one such row may optionally be +** omitted.)^ Like when the return value is 2, the virtual table +** is not required to omit rows that are duplicates over the "colUsed" +** columns, but if the virtual table can do that without +** too much extra effort, it could potentially help the query to run faster. +** This mode is used for queries ** that have both DISTINCT and ORDER BY clauses. ** ** +**

    The following table summarizes the conditions under which the +** virtual table is allowed to set the "orderByConsumed" flag based on +** the value returned by sqlite3_vtab_distinct(). This table is a +** restatement of the previous four paragraphs: +** +** +** +**
    sqlite3_vtab_distinct() return value +** Rows are returned in aOrderBy order +** Rows with the same value in all aOrderBy columns are adjacent +** Duplicates over all colUsed columns may be omitted +**
    0yesyesno +**
    1noyesno +**
    2noyesyes +**
    3yesyesyes +**
    +** ** ^For the purposes of comparing virtual table output values to see if the ** values are same value for sorting purposes, two NULL values are considered ** to be the same. In other words, the comparison operator is "IS" @@ -10549,6 +10707,13 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const c ** SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy ** of the database exists. ** +** After the call, if the SQLITE_SERIALIZE_NOCOPY bit had been set, +** the returned buffer content will remain accessible and unchanged +** until either the next write operation on the connection or when +** the connection is closed, and applications must not modify the +** buffer. If the bit had been clear, the returned buffer will not +** be accessed by SQLite after the call. +** ** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the ** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory ** allocation error occurs. @@ -10597,6 +10762,9 @@ SQLITE_API unsigned char *sqlite3_serialize( ** SQLite will try to increase the buffer size using sqlite3_realloc64() ** if writes on the database cause it to grow larger than M bytes. ** +** Applications must not modify the buffer P or invalidate it before +** the database connection D is closed. +** ** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the ** database is currently in a read transaction or is involved in a backup ** operation. @@ -10605,6 +10773,13 @@ SQLITE_API unsigned char *sqlite3_serialize( ** S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the ** function returns SQLITE_ERROR. ** +** The deserialized database should not be in [WAL mode]. If the database +** is in WAL mode, then any attempt to use the database file will result +** in an [SQLITE_CANTOPEN] error. The application can set the +** [file format version numbers] (bytes 18 and 19) of the input database P +** to 0x01 prior to invoking sqlite3_deserialize(D,S,P,N,M,F) to force the +** database file into rollback mode and work around this limitation. +** ** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the ** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then ** [sqlite3_free()] is invoked on argument P prior to returning. @@ -11677,6 +11852,18 @@ SQLITE_API int sqlite3changeset_concat( ); +/* +** CAPI3REF: Upgrade the Schema of a Changeset/Patchset +*/ +SQLITE_API int sqlite3changeset_upgrade( + sqlite3 *db, + const char *zDb, + int nIn, const void *pIn, /* Input changeset */ + int *pnOut, void **ppOut /* OUT: Inverse of input */ +); + + + /* ** CAPI3REF: Changegroup Handle ** @@ -11723,6 +11910,38 @@ typedef struct sqlite3_changegroup sqlite3_changegroup; */ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); +/* +** CAPI3REF: Add a Schema to a Changegroup +** METHOD: sqlite3_changegroup_schema +** +** This method may be used to optionally enforce the rule that the changesets +** added to the changegroup handle must match the schema of database zDb +** ("main", "temp", or the name of an attached database). If +** sqlite3changegroup_add() is called to add a changeset that is not compatible +** with the configured schema, SQLITE_SCHEMA is returned and the changegroup +** object is left in an undefined state. +** +** A changeset schema is considered compatible with the database schema in +** the same way as for sqlite3changeset_apply(). Specifically, for each +** table in the changeset, there exists a database table with: +** +**

      +**
    • The name identified by the changeset, and +**
    • at least as many columns as recorded in the changeset, and +**
    • the primary key columns in the same position as recorded in +** the changeset. +**
    +** +** The output of the changegroup object always has the same schema as the +** database nominated using this function. In cases where changesets passed +** to sqlite3changegroup_add() have fewer columns than the corresponding table +** in the database schema, these are filled in using the default column +** values from the database schema. This makes it possible to combined +** changesets that have different numbers of columns for a single table +** within a changegroup, provided that they are otherwise compatible. +*/ +SQLITE_API int sqlite3changegroup_schema(sqlite3_changegroup*, sqlite3*, const char *zDb); + /* ** CAPI3REF: Add A Changeset To A Changegroup ** METHOD: sqlite3_changegroup @@ -11791,16 +12010,45 @@ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); ** If the new changeset contains changes to a table that is already present ** in the changegroup, then the number of columns and the position of the ** primary key columns for the table must be consistent. If this is not the -** case, this function fails with SQLITE_SCHEMA. If the input changeset -** appears to be corrupt and the corruption is detected, SQLITE_CORRUPT is -** returned. Or, if an out-of-memory condition occurs during processing, this -** function returns SQLITE_NOMEM. In all cases, if an error occurs the state -** of the final contents of the changegroup is undefined. +** case, this function fails with SQLITE_SCHEMA. Except, if the changegroup +** object has been configured with a database schema using the +** sqlite3changegroup_schema() API, then it is possible to combine changesets +** with different numbers of columns for a single table, provided that +** they are otherwise compatible. +** +** If the input changeset appears to be corrupt and the corruption is +** detected, SQLITE_CORRUPT is returned. Or, if an out-of-memory condition +** occurs during processing, this function returns SQLITE_NOMEM. ** -** If no error occurs, SQLITE_OK is returned. +** In all cases, if an error occurs the state of the final contents of the +** changegroup is undefined. If no error occurs, SQLITE_OK is returned. */ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); +/* +** CAPI3REF: Add A Single Change To A Changegroup +** METHOD: sqlite3_changegroup +** +** This function adds the single change currently indicated by the iterator +** passed as the second argument to the changegroup object. The rules for +** adding the change are just as described for [sqlite3changegroup_add()]. +** +** If the change is successfully added to the changegroup, SQLITE_OK is +** returned. Otherwise, an SQLite error code is returned. +** +** The iterator must point to a valid entry when this function is called. +** If it does not, SQLITE_ERROR is returned and no change is added to the +** changegroup. Additionally, the iterator must not have been opened with +** the SQLITE_CHANGESETAPPLY_INVERT flag. In this case SQLITE_ERROR is also +** returned. +*/ +SQLITE_API int sqlite3changegroup_add_change( + sqlite3_changegroup*, + sqlite3_changeset_iter* +); + + + /* ** CAPI3REF: Obtain A Composite Changeset From A Changegroup ** METHOD: sqlite3_changegroup @@ -12062,10 +12310,17 @@ SQLITE_API int sqlite3changeset_apply_v2( **
  • an insert change if all fields of the conflicting row match ** the row being inserted. ** +** +**
    SQLITE_CHANGESETAPPLY_FKNOACTION
    +** If this flag it set, then all foreign key constraints in the target +** database behave as if they were declared with "ON UPDATE NO ACTION ON +** DELETE NO ACTION", even if they are actually CASCADE, RESTRICT, SET NULL +** or SET DEFAULT. */ #define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 #define SQLITE_CHANGESETAPPLY_INVERT 0x0002 #define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 +#define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008 /* ** CAPI3REF: Constants Passed To The Conflict Handler @@ -12598,8 +12853,8 @@ struct Fts5PhraseIter { ** EXTENSION API FUNCTIONS ** ** xUserData(pFts): -** Return a copy of the context pointer the extension function was -** registered with. +** Return a copy of the pUserData pointer passed to the xCreateFunction() +** API when the extension function was registered. ** ** xColumnTotalSize(pFts, iCol, pnToken): ** If parameter iCol is less than zero, set output variable *pnToken @@ -12631,8 +12886,11 @@ struct Fts5PhraseIter { ** created with the "columnsize=0" option. ** ** xColumnText: -** This function attempts to retrieve the text of column iCol of the -** current document. If successful, (*pz) is set to point to a buffer +** If parameter iCol is less than zero, or greater than or equal to the +** number of columns in the table, SQLITE_RANGE is returned. +** +** Otherwise, this function attempts to retrieve the text of column iCol of +** the current document. If successful, (*pz) is set to point to a buffer ** containing the text in utf-8 encoding, (*pn) is set to the size in bytes ** (not characters) of the buffer and SQLITE_OK is returned. Otherwise, ** if an error occurs, an SQLite error code is returned and the final values @@ -12642,8 +12900,10 @@ struct Fts5PhraseIter { ** Returns the number of phrases in the current query expression. ** ** xPhraseSize: -** Returns the number of tokens in phrase iPhrase of the query. Phrases -** are numbered starting from zero. +** If parameter iCol is less than zero, or greater than or equal to the +** number of phrases in the current query, as returned by xPhraseCount, +** 0 is returned. Otherwise, this function returns the number of tokens in +** phrase iPhrase of the query. Phrases are numbered starting from zero. ** ** xInstCount: ** Set *pnInst to the total number of occurrences of all phrases within @@ -12659,12 +12919,13 @@ struct Fts5PhraseIter { ** Query for the details of phrase match iIdx within the current row. ** Phrase matches are numbered starting from zero, so the iIdx argument ** should be greater than or equal to zero and smaller than the value -** output by xInstCount(). +** output by xInstCount(). If iIdx is less than zero or greater than +** or equal to the value returned by xInstCount(), SQLITE_RANGE is returned. ** -** Usually, output parameter *piPhrase is set to the phrase number, *piCol +** Otherwise, output parameter *piPhrase is set to the phrase number, *piCol ** to the column in which it occurs and *piOff the token offset of the -** first token of the phrase. Returns SQLITE_OK if successful, or an error -** code (i.e. SQLITE_NOMEM) if an error occurs. +** first token of the phrase. SQLITE_OK is returned if successful, or an +** error code (i.e. SQLITE_NOMEM) if an error occurs. ** ** This API can be quite slow if used with an FTS5 table created with the ** "detail=none" or "detail=column" option. @@ -12690,6 +12951,10 @@ struct Fts5PhraseIter { ** Invoking Api.xUserData() returns a copy of the pointer passed as ** the third argument to pUserData. ** +** If parameter iPhrase is less than zero, or greater than or equal to +** the number of phrases in the query, as returned by xPhraseCount(), +** this function returns SQLITE_RANGE. +** ** If the callback function returns any value other than SQLITE_OK, the ** query is abandoned and the xQueryPhrase function returns immediately. ** If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK. @@ -12804,9 +13069,42 @@ struct Fts5PhraseIter { ** ** xPhraseNextColumn() ** See xPhraseFirstColumn above. +** +** xQueryToken(pFts5, iPhrase, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase iPhrase of the current +** query. Before returning, output parameter *ppToken is set to point +** to a buffer containing the requested token, and *pnToken to the +** size of this buffer in bytes. +** +** If iPhrase or iToken are less than zero, or if iPhrase is greater than +** or equal to the number of phrases in the query as reported by +** xPhraseCount(), or if iToken is equal to or greater than the number of +** tokens in the phrase, SQLITE_RANGE is returned and *ppToken and *pnToken + are both zeroed. +** +** The output text is not a copy of the query text that specified the +** token. It is the output of the tokenizer module. For tokendata=1 +** tables, this includes any embedded 0x00 and trailing data. +** +** xInstToken(pFts5, iIdx, iToken, ppToken, pnToken) +** This is used to access token iToken of phrase hit iIdx within the +** current row. If iIdx is less than zero or greater than or equal to the +** value returned by xInstCount(), SQLITE_RANGE is returned. Otherwise, +** output variable (*ppToken) is set to point to a buffer containing the +** matching document token, and (*pnToken) to the size of that buffer in +** bytes. This API is not available if the specified token matches a +** prefix query term. In that case both output variables are always set +** to 0. +** +** The output text is not a copy of the document text that was tokenized. +** It is the output of the tokenizer module. For tokendata=1 tables, this +** includes any embedded 0x00 and trailing data. +** +** This API can be quite slow if used with an FTS5 table created with the +** "detail=none" or "detail=column" option. */ struct Fts5ExtensionApi { - int iVersion; /* Currently always set to 2 */ + int iVersion; /* Currently always set to 3 */ void *(*xUserData)(Fts5Context*); @@ -12841,6 +13139,13 @@ struct Fts5ExtensionApi { int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*); void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol); + + /* Below this point are iVersion>=3 only */ + int (*xQueryToken)(Fts5Context*, + int iPhrase, int iToken, + const char **ppToken, int *pnToken + ); + int (*xInstToken)(Fts5Context*, int iIdx, int iToken, const char**, int*); }; /* diff --git a/src/sqlite/SQLite-3.43.1/sqlite3.pc.in b/src/sqlite/SQLite-3.46.0/sqlite3.pc.in similarity index 100% rename from src/sqlite/SQLite-3.43.1/sqlite3.pc.in rename to src/sqlite/SQLite-3.46.0/sqlite3.pc.in diff --git a/src/sqlite/SQLite-3.43.1/sqlite3.rc b/src/sqlite/SQLite-3.46.0/sqlite3.rc similarity index 100% rename from src/sqlite/SQLite-3.43.1/sqlite3.rc rename to src/sqlite/SQLite-3.46.0/sqlite3.rc diff --git a/src/sqlite/SQLite-3.43.1/sqlite3ext.h b/src/sqlite/SQLite-3.46.0/sqlite3ext.h similarity index 99% rename from src/sqlite/SQLite-3.43.1/sqlite3ext.h rename to src/sqlite/SQLite-3.46.0/sqlite3ext.h index 711638099..ae0949baf 100644 --- a/src/sqlite/SQLite-3.43.1/sqlite3ext.h +++ b/src/sqlite/SQLite-3.46.0/sqlite3ext.h @@ -363,6 +363,9 @@ struct sqlite3_api_routines { int (*is_interrupted)(sqlite3*); /* Version 3.43.0 and later */ int (*stmt_explain)(sqlite3_stmt*,int); + /* Version 3.44.0 and later */ + void *(*get_clientdata)(sqlite3*,const char*); + int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); }; /* @@ -693,6 +696,9 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_is_interrupted sqlite3_api->is_interrupted /* Version 3.43.0 and later */ #define sqlite3_stmt_explain sqlite3_api->stmt_explain +/* Version 3.44.0 and later */ +#define sqlite3_get_clientdata sqlite3_api->get_clientdata +#define sqlite3_set_clientdata sqlite3_api->set_clientdata #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) diff --git a/src/sqlite/SQLite-3.43.1/sqlite3rc.h b/src/sqlite/SQLite-3.46.0/sqlite3rc.h similarity index 50% rename from src/sqlite/SQLite-3.43.1/sqlite3rc.h rename to src/sqlite/SQLite-3.46.0/sqlite3rc.h index 9fe5a4812..eb16b8fff 100644 --- a/src/sqlite/SQLite-3.43.1/sqlite3rc.h +++ b/src/sqlite/SQLite-3.46.0/sqlite3rc.h @@ -1,3 +1,3 @@ #ifndef SQLITE_RESOURCE_VERSION -#define SQLITE_RESOURCE_VERSION 3,43,1 +#define SQLITE_RESOURCE_VERSION 3,46,0 #endif diff --git a/src/sqlite/SQLite-3.43.1/tea/Makefile.in b/src/sqlite/SQLite-3.46.0/tea/Makefile.in similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/Makefile.in rename to src/sqlite/SQLite-3.46.0/tea/Makefile.in diff --git a/src/sqlite/SQLite-3.43.1/tea/README b/src/sqlite/SQLite-3.46.0/tea/README similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/README rename to src/sqlite/SQLite-3.46.0/tea/README diff --git a/src/sqlite/SQLite-3.43.1/tea/aclocal.m4 b/src/sqlite/SQLite-3.46.0/tea/aclocal.m4 similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/aclocal.m4 rename to src/sqlite/SQLite-3.46.0/tea/aclocal.m4 diff --git a/src/sqlite/SQLite-3.43.1/tea/configure b/src/sqlite/SQLite-3.46.0/tea/configure similarity index 99% rename from src/sqlite/SQLite-3.43.1/tea/configure rename to src/sqlite/SQLite-3.46.0/tea/configure index 91d3e953e..011ef2101 100755 --- a/src/sqlite/SQLite-3.43.1/tea/configure +++ b/src/sqlite/SQLite-3.46.0/tea/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for sqlite 3.43.1. +# Generated by GNU Autoconf 2.71 for sqlite 3.46.0. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -608,8 +608,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.43.1' -PACKAGE_STRING='sqlite 3.43.1' +PACKAGE_VERSION='3.46.0' +PACKAGE_STRING='sqlite 3.46.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.43.1 to adapt to many kinds of systems. +\`configure' configures sqlite 3.46.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1393,7 +1393,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.43.1:";; + short | recursive ) echo "Configuration of sqlite 3.46.0:";; esac cat <<\_ACEOF @@ -1496,7 +1496,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.43.1 +sqlite configure 3.46.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1795,7 +1795,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.43.1, which was +It was created by sqlite $as_me 3.46.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -9560,7 +9560,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.43.1, which was +This file was extended by sqlite $as_me 3.46.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9615,7 +9615,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -sqlite config.status 3.43.1 +sqlite config.status 3.46.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" @@ -10175,3 +10175,5 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi + + diff --git a/src/sqlite/SQLite-3.43.1/tea/configure.ac b/src/sqlite/SQLite-3.46.0/tea/configure.ac similarity index 99% rename from src/sqlite/SQLite-3.43.1/tea/configure.ac rename to src/sqlite/SQLite-3.46.0/tea/configure.ac index 24c2c0577..f188f2203 100644 --- a/src/sqlite/SQLite-3.43.1/tea/configure.ac +++ b/src/sqlite/SQLite-3.46.0/tea/configure.ac @@ -19,7 +19,7 @@ dnl to configure the system for the local environment. # so that we create the export library with the dll. #----------------------------------------------------------------------- -AC_INIT([sqlite],[3.43.1]) +AC_INIT([sqlite],[3.46.0]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. diff --git a/src/sqlite/SQLite-3.43.1/tea/doc/sqlite3.n b/src/sqlite/SQLite-3.46.0/tea/doc/sqlite3.n similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/doc/sqlite3.n rename to src/sqlite/SQLite-3.46.0/tea/doc/sqlite3.n diff --git a/src/sqlite/SQLite-3.43.1/tea/generic/tclsqlite3.c b/src/sqlite/SQLite-3.46.0/tea/generic/tclsqlite3.c similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/generic/tclsqlite3.c rename to src/sqlite/SQLite-3.46.0/tea/generic/tclsqlite3.c diff --git a/src/sqlite/SQLite-3.43.1/tea/license.terms b/src/sqlite/SQLite-3.46.0/tea/license.terms similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/license.terms rename to src/sqlite/SQLite-3.46.0/tea/license.terms diff --git a/src/sqlite/SQLite-3.43.1/tea/pkgIndex.tcl.in b/src/sqlite/SQLite-3.46.0/tea/pkgIndex.tcl.in similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/pkgIndex.tcl.in rename to src/sqlite/SQLite-3.46.0/tea/pkgIndex.tcl.in diff --git a/src/sqlite/SQLite-3.43.1/tea/tclconfig/install-sh b/src/sqlite/SQLite-3.46.0/tea/tclconfig/install-sh similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/tclconfig/install-sh rename to src/sqlite/SQLite-3.46.0/tea/tclconfig/install-sh diff --git a/src/sqlite/SQLite-3.43.1/tea/tclconfig/tcl.m4 b/src/sqlite/SQLite-3.46.0/tea/tclconfig/tcl.m4 similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/tclconfig/tcl.m4 rename to src/sqlite/SQLite-3.46.0/tea/tclconfig/tcl.m4 diff --git a/src/sqlite/SQLite-3.43.1/tea/win/makefile.vc b/src/sqlite/SQLite-3.46.0/tea/win/makefile.vc similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/win/makefile.vc rename to src/sqlite/SQLite-3.46.0/tea/win/makefile.vc diff --git a/src/sqlite/SQLite-3.43.1/tea/win/nmakehlp.c b/src/sqlite/SQLite-3.46.0/tea/win/nmakehlp.c similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/win/nmakehlp.c rename to src/sqlite/SQLite-3.46.0/tea/win/nmakehlp.c diff --git a/src/sqlite/SQLite-3.43.1/tea/win/rules.vc b/src/sqlite/SQLite-3.46.0/tea/win/rules.vc similarity index 100% rename from src/sqlite/SQLite-3.43.1/tea/win/rules.vc rename to src/sqlite/SQLite-3.46.0/tea/win/rules.vc diff --git a/src/sqlite/sqlite3-3.43.1-x64.dll b/src/sqlite/sqlite3-3.43.1-x64.dll deleted file mode 100644 index e123059329dcb82c8eaa040065abcd69e435d412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2973696 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 z

    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%0DeQUW_doNY$E`w5rsc6#tQ-zOI3V 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%0Ai)-#OM+VtT1*WTgaH7`I5!%DGbmy~$S0z(p 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 z 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 +? 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

    !;m0t7S9lTg>VBCK$W^usThx{;-O7v>VS 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π8H#DMcKqbJNrKmLV}_NCNx_Wpok=BD3i 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�-oFZ!< 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 r>uK&iobx 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 z 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⪚-|SdxT>B+1?kp99aKxRbzUNltMH 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 z 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

    )d`ey?9qgz`)0$7#M<;pNfI{bH+f)S3wNSf;wEm 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%0AUqoJEwcox*J@!d@Sj$g7c%#Q1y2pZUzS(l@ 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

    ;NwoV#%$9zuG;5R$LY^ZI{C;`tJB0f_h)W9 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 Jjldoe_#YBze|-P| diff --git a/src/sqlite/sqlite3-3.43.1-x86.dll b/src/sqlite/sqlite3-3.43.1-x86.dll deleted file mode 100755 index 66280532c33a9b3690d9e7b045a4d7fa3d8b33d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1147327 zcmeFaeSB2aoj-o>%uO;$2JQp~44OjJs6nYR6qO-SCl3=M5DkQ21Y@Puv|X%4xEB&& zl8ZNKb8>ff>C?8h-Cf<^r(14f+bO>KB+p0LdK{W*6M zg8KWu_V@em_j>*C<=k`6Irnp(KId~jPv?`8b-M+-AP5rvkHrLGFP`+z$AACNKN^as z&)YX$_+9cJZrv-c{KKtlzW$9ZnVU9$>uZ}gd^7W_8(w(fTT13vp3B^DS^d=4>}!gSPI{h4|# z_ZF;PLroDFVK>ULcEU5CQ%`xG_b-#`VQzW7uY69u&098q6;=3}VeR3Y8W`#fH%Ah6p?^!P{%u)`@@G&l7tiybQ_s5y1pr0xUWvn-i|3So zG>$2+|9|rTLo-mO52lBuEDc?bxW1n%ur?-TMJ~LMDm0w@xpUc{HvHUyA7xsY)?d&M zrh8h}x8bpuXxsX>-A}9q1edWUE32Vf-TbQH`_qPo7WwaHp;(WIo|DG?ZXG}<-;{$} z1+*0bsM!1ZptO%*u-+m0x3gSmq@hJU_o^ESebgq`e}FPno`**y{Jm6xH>e+Ut$+H< ztxkar2j8KcCFtWKFHr}ceU<32XV|EajEAUE^Cq^z= z8E;gS>u*I({)REsUj(@8MK__S;iO!Dm~tCE)LkV5eiKvP!rGO*S82v6s}xzRO*bX)nQgLR zM}wE~66^Aw*?N&J&WcojH&qBHP;E4i6oI0YrzM;~^GNCMB+xi-oV>R&6d{_3ZdC35 z4xfkU-FVp@RPGdLG_Ku$+JO0T(1Qb_`jJIwEjoBD7MoZV4`rOB416P5-w1d_9K2uD z1Dcm;JE}~MxBLlqWNjI1XFd90MngB7l^roRs5NoKQOY8>0QK0;EC&I_*8&YRydzb> zjI!T1oKzC@t9JEXs==PhlBo3MiPEW=&;B(Q!zaKgo99pA1Zo9CjOhn6SOh3k*%tiW zodiDezc9(cg4mRA^-*!#-$rhq0H7S0QWjZYHHMY?y?VQTRa9T4(y5*O<0rgjvx(0q zRoN6N`o{G^(PUD$FKy?8B1m$>I`r++fR0)fKArvVpP#+OYBt(OvmNgeM@uyIo%koe zkG_r4U^5MTV*dN&lj-V8TrxIQw7v@ zn#XsSvkyT*^oJ@i!GhuiZU{q|>RI(K{b|EKYNw%Pl`@OwXFBqM)v;NPC|bRmwKjAs z$*50X#=4RC2Y3I5$j+~&3Y~3$TG_VS?rwM`|4$q6!mO0u;>d9~ypFuBNywr^Wt-sw zpqo*t40~nJO--zpCdie0eI)_oRBC~dZm13;;AAU-JZpeFQWjIPoR}?FtjwVwT)+|I ze^%W&rTSVlYb@jt2{Jmc)}=+ZR#a5;Bv4Lc|jdUQhYf4vQW!YxJUOLwC zt<~+xded*LXI0<>pN{UL2|ntDoo${L8m>i?X|z+mqoKyimT(dppA@3pOQ;r2hSham z>xp92qD=x==tGuKdBdDNmE|%j9lJiLt8<9hgw9xLx_&TgN|!4#FgAHg+p!+g=4rWc zT$ML;j)TdZtU*JvRw!1wn9teNoLuB!-+ZWi(U`RxNZ{>KQw*Q;=ae?*03Bu-%bg9K z%5-msBC$i}MHI4pXJy-~ji`Y^ft1=SWBthZ+fQYn(C|Ad4c{mYo|1Y?lHNbsradHm zL@1ty?D&MwDn`!4oTDnBCRN7nSczOdb=R{>Kby4%S)P_p)vK`T?InSSwm`WDqvUla znp}Vy6Z2t|I50>jb7E6b{>!H1Y4LRPVw!~Ee95jP7^|I_faO^YowZk3aUr1XCEg!{ zD|eulBsb@~<1JY^b|c?)Lq?jh+=YfxjC`qGatL_Pt_v;~nL}=#v1|MQz-@i9TyFlJ z?+%pqxj(MXkyEZawq1H_3Q$(F;utfD*dX{ zcAbyKWE`T&N97;35LR6w4RUicJ?39j?FDAvde&i48K4>lgVQe6)6&q5 zevkB;P7K^$Y5tlY{ul<4K@69VI)DY8T6aZ5H?OATKOS5rHnh~u1)Ny*V!2tw63fk+ z)%N#z+g)Y`^6Og^baPSDKT+P2AJeaTC@0SjoGmE4z@@*K+Ecj?B`7yKXN0K9O6m*A`jp8_Pu-NgFaN6s5*LD zIPG(s_K)@*I#uH8>pWHBI1{1|M^F3l)hLqbloHNFPghVq)J9%~gKsb_ENj;X7qjwH z*f!d@sLl>bj*ub`@AY;BQnlPfK~2zGZ01GJNpA=0 z(m5^vtW6&h_4A@Q#46tv-)HzXO>Uk&{1V}o$hwpiyE>So4s8CTxj-BLqUywJ*dL*G z%o#@IVD3G5!;27f&y@==vCBD?1DmIrv)JW$zL}!sEL0Qhm4oI0tL$Z!{X{K{lK%O9 ztfULioRR@na&XI1d4IAI7!(8jSO7h`P#;U)cIU=JDeTBwDF8omP8`=;x|qMq@OS9l zF;;%;WxKy?X8AGmjfU=;oAi#D9*79ESL>A7o)+Q)G;!g(SyztQRkxMzw4D!OSi=p&YNkG#R(Fe`_R9MkePBL(d{B6MVE%g>hf~Z`sFS+U zKR83)zu2ySyrf~6byY9YJ9+ot=G{;7biPg9H~gr~9IQgxOKYV%X*7IQWq+%FaB&>v zJL8;&lldd8e2`CXWuz%1Rc^jI{2f|HNm;s|CUN6<%E$#ik2Hhr^8Pk<{AF<{Z5-^^ zX7{!PeN@;w&F~L~QI{Bcb5@@DyZV#rAm~rTC>dmy)T1AC-oUeD$otdlPgcw9=Fru7 zdqlQQiaw7ylJ^&j^_|t}`UiF4e9l$xv4uWJNB*Oe+cb5q zey$G3d&@i_UOjX!X^)*(|AJNBE;n~tHA3g6Ctn;6Y3eP2xa-`MkCOZLNGv64VgPb; zwZzU?rJ)PcS;=7XH8wWVuA!{4q*uKOLkgKQ_9URkXe;?WwkY}r%8-pu69752a*$dY zqn2*ob%C0p4-!KclJHIPMKtu1)ey3#CttH*t6#9%uTS;4!-XeXJc|WqY0m&iqY+b{%^k|CMlGaW6i>czD%`ZNLgIL%)PySVx zq=&LYf0U^3q8ZUg<*hE{ih3yJ=pQNbl4q zz)=hudA8a)!R3Et<7~(ilYeokr(ZjlDf_!*f7ra`Euyt37@mKWjmy6t?fD}wY?b}* z(x+Qh^rLs#H+HwG66@h+%|!NNv|Dce^rl)Q)QE?@%fU=`NW3G3-*ANu6x z;uy{{P-T7;i-*3^{o9%c|H-^StN=e=%Wx(b6;5^>{O>KSixGWYsOX<}o&>#mcR$PWPy+^GXx z9I1`t+#&I)O+J_2@5&YDwA>*K#bODhmZn~Tb9}W6kRT#N{{Anq*d+JpcQJ@%hTloT z!>q`86H?jrLM!)KQLb3;11EA-sD`gF!e2(y_{-EE*UFgSIu)q z`H)!ZWEGBziJbtBCg>l6B*B||9`XN? zWQc>{0TP6LKbvM$ezL3E^Pi|h$A+gR-q$67Yz>4&ugKqFg1`s4&wg_V91-Uc`g`v$ zzVA;PPTxE+5U3uAVNzWX25ChKGU&_YS7I^m7HOwkCwX%=C$lXQ%kd1G3HwRq8n5#h z>W~g$XmVsE$^q6S6bUs9JNj&tNlc{AR*|3?aq}m{TUzId@7q_HBun0GpC(_|vW9&`h;&Nyl5PAd@YOkKsS@<&@UA+Xk*etbDd&~sa`uZv`c&&|+7Up53qY$ICac+P^)*tc>=0dx(XH@SO&4sKhxLJHFfR*=jAD{<5F8n?u24$AFU2z8UMZg;|0jZ528hp`E zIs@%ScJMs~sX}fB=T73&aI0t(JBfrU3v=>7%oeD2_9C`HHmT^?mIWqWC1f`YTVH`%Zd}+oy)Nk?;m}WVwkGVQM_g^fI@-$7 z2ctNX#K(#(J>M16SG!|+D5m$s7_v{Wimc>A>Kt@iRFc+LMjyrGt*_ii$5Qkl)M>Q; z@iA9cp^{BW;cRT=b(G;8FlOpLz$|r>TGhd~DhQ$ByFRqI_NO=lV1`3!%5ChBe*Vwe zIZ;ilVx<}8j7t5Iol^Vgn2VMIE}FEI?H`t{Vr>zK+A+hIq4!_ZJH#qhkb&7qEyz?; z*0Emn_(v$Nu)0Z74p>tnn46pvvrUxQD6%@FVXlED>4s0zeVL+OnkDE(E>U0W79z7S za-$#}`ZXubuwmzm6#uXhAJX34k*@crROzEB>P#Z6y?mkw`=UQ04eWJpsw@a;WN@*u zF5O#^zGW861Kn@|+Y-S^^qLV?>N01tRW4(lm3fq%Fnd_O%kcLSgU%=264_jlbAXJU zlt?nFl9-P@ZVm&|+`Z3Y!l2P|fO{VKBdNB4Py8I(^$f6rj1NG;;&h`FbH6+tDX1n_ zWf-OIu#X#oW6KxthUh#tda>=01@gc)Y59Og9q80#EFJy^cO@JFUhHDC1iNIU2w z3gHTtT#0;0i|N0DQynbH%|-!%bOy^D>|*2)ijX;XVuFZ3mC(s`KQQ!(wZYA__eg(# zDbi0+a#*M#rrgVxIgMowc8S?pZzPNYHpZ4Y%-O~&2Xlq<_{I+BS!_W^8$=z}F);;k zr3&@1)DiaaI$9U& zT8!!F_&jaLG(mN7?IXThoE2M@X_Q~lcFagn?2TnJn#!DwWkA(T&KJgy@eHG4jZs|6 zP9z@!Y1{KNppj>SCOEVB1|VaFlI4gz_%tx7MT8j4j>^Az4^rSEOKmqX|5~+E;2l$@ zxBHUBb_}cCmn@h!v!kHt`j{yHz=wxT{*lk2k4bn-ZmLLvE-bO#mm-*;Zu&VCh;usi zkiD@u1;Sm5R_zdiPOwf8w~AAhgyf5O47a)z2V_b~D^7K4=QEW=?U`BEOuWt#t>k(7UP(K-u!;Jw6) zEF&v25V=ltqG{u?n5F%L9_@$N*`98#dK#E+HB+mW;>wCy=sy^IL0=-)CVRT|>cxWm z!`3MxK`=Lk#t;|+QYIN+GS*92@RLwcw5U%TOZ8R<@P0HDNe`V%7ej1x*GK5Pa0mVu z#JIKf{uQ1-A zl{DVw%RFTF_p|Yt6@0Zdk@2Tda*T;&pUAZc z40w_ctLG5rt22#8>Kq6|qE>^U*c(fsG50|OjsaMQI1S5}i#8$)fjsR6DRI=~IPIwX zc?V89;+gn>%e3lbs5~w!g%AK)IH#yoNgXaq_w7x@QLlQ8r&j_?vU75jdEPQfy}8MM zc}amonW2r@tQvCFuE)|f!AvsNJI!OBmbh$a6ie+s*ceHsrBlXXJW5pfuHihgf(vi@}0x>qkaB z-STgMy{|?tm>Wj6X5oMjmWshV8;F#*OD+t>O;?=Z&<7pzn?4s*Xhzv$<{vV)XG5;e zbKc`0!Up@ZG%_N;SuovRK7=n zLT`~GJ%iBgH@Acf_>oZ+E`SV;{BVH-y%)d=%~&_d_~?TRK#G{Zm%jG*gFYG1zxYoX z{(iYRUB6n#DhIaS$$Eop9eRHq^tDAzi3U`tZBQ~n)0TYLdx>gD^)1yO%FRV^hR{dr zSZG^9ut+pFvlDW2txbNdH7V4e1ZC=%0$p0Ijdp=ievFOEY!MJber=qJQPa-+9bXD` zXtj1!dDrm2%K}ir9+TNH`i*kP@m=_E*NEWDbj6{1!dk5);MgClP7M}GP)b_LH~?j% zm|VGeZ31sR0`)QL(uRFsDv#8+u%p%JVuE=jSepo8;sjL*M9@Z}{Mw-;SWD0b&Nl#0 z6xf)|endT(0@E7MXJ9&lMM=?WoWViJhf~2iJ`EOp|5!~S=HRt)7)_Gp=B>#ff*402 zvTIn-&~`h!Xx<(yvKy7}VpJIV{TQ~uLgsX%@|fOk)2{fK8Ug2n)e1yFjEu^GWzdRM zLxt-EM+oei?rqzaeNUi&FAgdJ#rD8Jl^&Di{84;V#j0miu?kpmEt@cO)kZlm0IVd> zh^__)X>I7ZE} zvm7%%fReX>dBSfLwfKTJe zXe;*PM1NqMb;2YeH*b-GE8y$`dg@SL`X5O@fo-i0h?l&_<^1>O_sMT| z1`AW5^d!F=P7}FoKiP#ZK^b{N2WYGOk2;Vxzi%JSiP)i!+U26w|2KVsW+j*}1(#3r z5erfyc|+U&GJjH6w`yXZ?CcCp&^%hL{<@;3>3mZRu@1bY`iHzDSgFqHkF;7*2tH=3 zDWH8Ce9T_6ly+nAF{#Ew`z-iaLQS?-n}9@O%{?N9!nvF ze)I@UGiLdJFi23m5q0R(6CNk~oZeSBa8$r&1LsMZw44L1F>)7a% zR+nJeDAb-2$Ew0U_$fjfJ5*(?EG}B!SXwCW?>5%#uC8LmMMkm0N|j0@uQ>WHG@$XB zXba}fpxwIy>I)|w;_mN?*W#=~taN1+ON2OHWk_(Dh^zFu%A?9~uBw9d6f9vgskilN zw@?oGF9|ac_TfCCeyB-dpPPjDiAgfjVF(8WayPOgNB^wM4ldpsbT%4ujWlo1RtKBS z=CCnyU}6(lEN~{RnU&0f*y+OHcAd9l3{l+z@dsAk=d}-AO3B2qaBl6Y z&bs@}{taq26daKwXEAvzoWU9qrUNM4z2lo*+Y)m81Dlf}#*szeOy0F4>%cqs;FhXg zD_nxjoQa|46sHGfv`Z;M)vjXXK?0j_kZI*wWx09v3{-=38TOCTu*3dO=z%ta<)e{a zn9&XYs8Rk&C)75s;nqxL8v5_Mq#wc&UFrfiZQ0AXg$=r4m}3)4p{G3?-FE-!gbJkk zI$@3DmbjDA(|z0K^#v|e86_9AKRByc$v|IA-!})&273Fxc>!h^qw*B2n5^>H*>86B zb)Jo$?%jSj#{V8W3v0rz<3Q&+Jr>)XpkMpzwlv-kZqJK%Mu-0j$8nlwXjNt?>Dq@9 zG(C#V4k_53Q(7(mGpWBU?*ctyk_H3lyg76o)40LO!6jahUc(8BRzCpvX_BqOWO8iK}k$*d?gOu z(qX!crenxp#S(jo5@?p#k`K2g=@IAAhzVvxduCp|%i!iXy>RH`sq%M{fY7n5AFhEd zwJMzF5~a9w9wtN=qBcBuz7QS3yS!g8o%oTPpAd0;CwDRNW$41Gh9pG)8#StoCqz{E z_N7oiF>vN7FxIH*Vy$xXG8_K}AKR0=YlYCYm-=S+56vvUqF+norUSWt8>W>V=Q?!~x8VB$2@1X+ zX_oItau*C@bB6T`Nkw${Lb3j_W8#GNM3>UXd5&QI75##EG{W*gB(Mulk)ZRcJ694yQ%TV=!AamljNg~Jc-peFJR`msukJxM3m_lQ&}`ZTMVOcZgEeLn8D8gtk))LXkwMgyT6l zA`NSUI~q%;wg8z1My7as0=B@^m(PI?!K2(kW{-R)I~+3S85&_VB)Xfu#S$znn_b?8 ziUc)90u3HNF7tf+Sh7eQP7defps_`gb-av02d5DPE%;dC8V6O1jAX*aey;@P$nq-t=HE$If3iN;GEpB}eE-|iCPeYOPW z_t{|x#dLy0>#_1i;TW3Mau^?vLEq{QLgQ5khrL9u=+4c;i!)e6d5+i;T%qxKtQ1l=pB=D=tFYc!pT2}=K;rdkmuM`PPOr-j=P!H~ZG`g|Q&W3q@-*p} zggL_yoi4yCECp+Eh7IN194OLi5(H(bRwLQeTa3Vv*Q>hWw$@(QD~Wi9rCy>*SeqJY znL0Daqsqp1l%AEua6Uhm3-plFY@TGJ%BWA!92Ij>ksLiNLmfw^n9p_HEEFrAaE{~S z!3eb_udB&~{HxQ2Qp>kVK2Vxz_!i(K@nt-tJOG2tImuou4d+dNM#-)+if@B$o3+A{ z{Yc&YaHfp?7TB5ZHeK3S6Q@b= zlg-B$8HT{2Mh=7K6b_`sSKok&QsY)z06Y!k@|Z|tzT@u z%^_NS8TLtb7>P==cy}!XtMrzpTQ)1|--G4)ID7|ze@6NN!YaA&cyLQ><4L#JrjNxM z%RW(D8;9N6%7yMs?;%CfR(xWcg5F>-fs5Sx$C{Dd+=k+)Bt_sP+G9?eY{B9(ZA{!| zIbP<{4CmW&f4VIt_vI~xxvJtbrQBaCNqm~k`-k%rGp!lF+gQE;Dx2Ho1FJJVEmaNO z)#=8ga2!$6aH8XAC`^-NG-NR#+IXI_9mEF1@eCgzTyFw{$=glUuKpU!EEmF>r(LDy zD{Sndeo@q}{zNI==G3mL$``b&FDuhcpLX@9N|JWWG>K$MN0ml zm0gsZyKg;e-ptEtXUYePGegmNW{Tz9*wNMUGqiG>(v7uF10<>^xlMs*kkfcH z(@4gla&_MPjyWe7O4d60+BcQXWFOXdtEooug5WBVl`b%+gY}<@UK>By{R+U78Wx<9 zYBRezX*Mb{yeI0wwnDgO6&bo5s|cnAQ3d0h96X(!`FS@6e1Eewr*F|w>2 zhdK*~M+Qj(sYVLJ!xqbz%+w(C3fNmG$zjAAEOp%PXqsb`rfXMA)O7j4lbJc|9P0gG zQ`R}XKi1GaHQT%u)34q-QJ6l$6#;h8t0xzD*E!WBLx_9}2tPrN$}F&&_m}G2iMq4U zM7(+m^w6ONk%y*yvDR2r#twrFe<0bPc0Ec8XeW#YS)j=zbrl@M`XzgT3mW8( z$ot1QqNOi`NNJwl_a0p>=H{kDy;< z&Ezs0oM7q+04_@OT5ywaOD6+W9uIC!QWx#}K9vqdHt<5Zp7g={{?*DW;d%Rhhc~(Y z2nwPk%}kWuXLaYd*EP+iVW&ccDz5oq1*x&yL5m|wm>8*OpO=PCpkOZfsFX5 zXcDX%(UUYBRas`9{k+knSRHP-7ucY;Cr$L~Wz2m;3m+BuvI$`OevL7hU%)tPc)8p# zLKLpRweM{dSpAKAl0{!cyYX~ed6iK*9S2>z4Mt!=gRp&6^!LRg z>xXeGheXywqu9-k2cL|wGocHTeG`nf)eE7qm%yliWtz|Xpv;AN(oMOz9zu&8Nwe}3 zSLh$R%y(g~j_UzPlw4aTzge-^+Xsh|O;VND{g^6YXD8;FgE(zDp2Y=DZj8hf!g>ll z@?xpKH!|w z&{@5Jw4U$L#BP&@i>7C)x9DRJ*Ue@}LVr%sKN8uso{y3PgP`+07m_dOrp-Js0yhkw zQ9ek|!pU(B`)-FgtSln8EPdZ=*b;(zm%fkKQvqJ0`*u?fKfY?Qm-T(G(>u=GDN7D> zz$&gr`y$@6BU`Ecv zf&0j_spfVgFB_%;VI_+@%qvH6Dyy^T@26SN#|@r7OO z;Qq*qWJ<;?Wbm^=-oFs$_*?byYw9#&OXqZtbnE96&HLG9Pj~&vnlExX2CriYgM_{a zF0jC)5A5DPcyqVf;NskGYv`~z4zYDT>#|528NSLLtULmq7nlJp2YIHGTl#fh^GIK3 z-#P1l(p+p!wLH*K$4ut_>)a*X=YXgCdG4cb`J>ZqqSFaq2OG^kg!ekeaXMkslsBU^ zm-GqC;bzY|qHjY9f`M9?3YQKr%x=sXHidsMr(`hjlu>vjn=g}mpy)Q})pIH%fkILd z=l)oznU2g%Z?6j1R4|lxvtA;{MUoyE5|r8S_`@2P^hX{#Vxe)r>M&iyzUiWxQeeKB zXa4gPjE;Mwa$bse2MVjmKSCKoy0^AS8&a>9LTM5#jlH^t92egYI(K6)-iglYQOO86 zyfu_Y>8NL+lP9)6ABzV8Etv5z?#XdZX(_S!UjbAHk`{jYvwqWWS@Cyub{Q^;Z8 z{7h`+X*gH8awE&>Py=mYqCmw8Ix;TDugTn5FC#|F=F1deYkA3%~k zqQ{NGg$}N=j^WnC>4|+GM|RFvSZ&Gm8kWBSj*n7x^6R29BWFt%Hhcdk4a3!Ty~D-| zq$YdrFIBg9ONLsY2l@r|p5st{&ZL7OmyWqyJQqDaYSB1*Lhds zgSiyhWDSNJz;5hc@JWz3Yyp@US;?sh&@fz;59GK4>#+ZF{0`Lta75HD3>RekATKFN z`p$1la8xk@{l*j7bQ$aMY_{gx@Y7si>~I@}-joj`&2tl|Yb7p%`W5mpjYj%9qlB&aj68E1~v_A=Xg$58Ou|KLy}rXEjWxt!$p#)6d9W;jOwRu z-<*B>_65l!>H}E)l;Ph?N`m$Wn`zfOq26DfV$hwz>YL%2w(;mf`&!&)+de(`IQ-`u zmrtj=Yp+=Y;Nm+j7)ts%yONw-EE%gInOI^xC?FvM)*u}m6H^DEQmbN>ALAMXt_M}& zIz@1kgQ>mjB0EzBN7Kivj3;rwcd*KP71d7d%rv~W9%q4LV1{mo@h=cj6LQLrDFI$3 zaH?*OF^3($^(+gJk(g@WSRuDLrS>sBC^3q_?D3897zn8i)LN2Ug6bx45dj>c?snzGamIRXI;O0(Tg= z8k7cOa#hZ%6!^LVBcU~R@J$c^$W?SOLS|Z? z*-yEq1?Qb2mIAi5EUtCaS zRNrglI?Zn_t1we6mfxOS7IzaS zVq^G9Crx^*tHSMg_Vc4c;zp-2GQ$K%T*CC4H!^)sYT|Yao zO02wO{zDx1;sPGzB)U_O6D(WF0-U$a-FUHhxbRCJ5m&<(X|*#1uuPk~Kr<5c+J%C8 z(+!eQ^-4=J+EkpUw-%cRCdDDTZ3DUt>WCv}j!~S&QjAgrK2Z{(P-4q7!@f+ctfex= zc{&XDO;Wus;NGp*72psQdk)m0BKbKr7rJ8DmLSt~K{n|2$<2xJ7ZNsmJzX!4z-8&B z%>N$T&@@{=f3~sw&!G9B?YsMX1~+(n)JNqve;~ZljpC9&FKv1S_0$J~`{>!U78gp- zE`0)*Lbxxu_e5ZNlXJFy?(9v#$VSd3eQT;$0`?7Lo^2(;9zMuzAiDAgV7;$Z? zQGO~2i~c1j7a%+2sNnvNK~JC-;|vX)64Wo44>!8!f1X<@9?ufXc?l-w-M9oG0&T)F-o04*>Fn~KD@ zQB%nMBD8xbr=T&f;vLTHay=RH3d~6E!|KgpaT8wPHS+M=bPGUkpsS71R5TtIH&U`2 z*gZ)C-iP@J?azek1|#A-TbacN2FVi$s0&A=MQY zA4Cx!Y_tqT`sl-|BP=dPCZzY#TzdIBy_^b*OYn>es5J34$|z=*2`?o6)i>znjj;Ft zRXmOfw3-YfW&SUucPgo2@oQ8_NE;TvMfLTtIES)+$+M~``7@r}Ov&#e>FrXc7s$=- zxlkZnj{X|+CO5B{D+bq#D7g>~q6+oMT0}`j8+7Y0x|T!vDU#a5Fi?6X~@;E?N!@h$Lx8nx~xOA0ufA#MC#)s3!9V2q?*3X3nJg(hh(0rsm8 z^RC6eVO{DhJ#x?Me^u`SHJEFQ_fVOmx8YXqBoGeTf^$8$NUm?gNW1wMt;l3c$7Wf)9Yq+(A?yaG+9vfk=x5vlf8>f_n! z(uS7W2dwEW5K&=X{Cc*UtdGxEl3^n}j|BE^fh|fgm8||nXCtYPFNHV5&bi`JRVpYj z|B=+O!u2YDLF2ScoL*TQ)wXRRhBbTQ#hz~tSyNOLTnEX3y1SkYg+&_U)0NR5!)cp$ zo?i$CKHbIN)NNsrgb0qr*H_FDU$MK?gyA+(aa%pbLLt0CQtn+;dI`Ho)KA9DrvU72 z3)tP*%?H#hYa{WUXFhCw3ItkgrFc!atxYZ=<`39mb<~vg(Yw^kVNpe&p!{l^bkZV4 zBA6#Q4B`4gZ=~QVn6;8CV%x4U+O$eEm}kH{A-L-)9O&{tv?4A4LyMzTb?IX{N@|t< zPIBg%!3{a^K=NPV%RU#^Hn^VRI$uu*WWYg`)Iwry{5HA13*hSzT3}k;9Btew2Qz@( z!Tgb2QT}!slF>GlYvY-6y`A3vlfT`k+*dbK8^24gCoMI?5-5*H`Cb}duY5}ze@3Z= z4R$<7u0M(;j_#s5b>iK7Y;r>jGJ?x&O)l!gAMm1$-wkJBNSmYPAGK=nK6N^AlKEjttKy93@muhFY*7l1 zC^sM4W8?h#@Ghd~*g}hWw)9{etrU9^ZQ?b`lQgyh)+cc#Kao?n%!y%6q$qA z9>Km<=Wx6jdGG{+It0ah9fxo!anF9_xiYg5~#TMtrzaKj%I#ZTZeSq-3^W)mLrAJ zfL*`R={>`G<;U9RUnaK&-2Aj;cDhRtxdXie4JmBn4RRFc+-T_naPx6Nmc0BdhYZ*T zET4?Zz1UVrZpmglpn5^{C+_1H{U-9!wguvO!}oOpVX?Q@lcn&1-*mlzC%Lc+8`%`U zkFht=wP7U_4wb!;PjFx1AuNFge~sfYs3TY_F8@R5Hc9R;h9m>-+%#6WjGbwcrxThR zD3~92c;Ay(Ui9g$F8J%!o{M+B1AwP0H_7WC>YEaWKALL0Ows7-aOm%T{)dBz7o$Cc zhw0KIsr#Nq`x{%HO&Gv4xY!1%FJ(TInYfyHqISkNx+6dlLyY`=b1cS}ByO975FWot z3o-WlU06*}{QC@}mr|Y8caUR=p&z4FhKdPS>QrY~r$P{@n3)*kX%aQ~;&5n~C2JYp zM_cH+RUf?)!a5J8hZNJPDN-wP*zphkfDZs`infT9EY_^UK|kO&%HXU&Kz@(gQMF;X z_9lqf?2W&r?!Dbezj{4>&ADOzwA!RnD@8TvA2mly{y6Uv(#08Zj&=s!8$I2&Sgdc#p+ z2=XXyXtTEoa$~{MxUD=1o#5`p2S8x5rgB^S=XLaX)M+Zir!M1dT7ULNKYsP|GOV>a zWhi$2kcRHY`}(W}^Lk$={hF+SXP}&r?hP`BGM&s(e68p;zE-z#5EBkg)`sSuQ5J*~ zzl%c{N602JON>dL%1>lfnMVf{_#@~ZbZK)2!JkO&A~LK z8s8`K4%CTtVPs6F+qZm7l+EXyYQ_N__^H{s_C|bcnFLWMV={+CuW*R*+y5xpV zzGoF1Oa?`$Fm>}zZnv-TZn?sGHu^#Tn4ZPEhS5@3fOyxwj%rgj*^P5{`veU7(t<(I z_>4_~k#!>sBB4-6mJ`+d96Ipcf1t&HlLxN=uwr`c>gR=ERY__gCUvE{i! zUXp%TVL;FjtcYYO@)t+gyYmRlH2FQeWbfOSWJo{M?w$0XMdM($psylT_4~L<{hlWO z3b$zdgP~{=8)~$(j^GwCxeKaW#AP}Ghxeg-a2NM{T_f(8-e~*H!mT3&_nFCV4(CfW z@qEFfeMliPiHIvl6gsDG`1iQz#Zo5f;4rY5HC#@y?K&5OM;XQW=^F_NLMHCFU9U+D zLX;HisA)&d7((oPFw3ebxNs$Q5+=27K1)?%a>V6-n@V~`wJR-f4A&~s47JM$9GedYm@Q)4C4`gk4<;f0 zO_92nY!o-B)iIZ_*&QPSU*7NOj0d)gEBj!=uk7E7$V7G)4*QAt(v5_V>Izt(*MN=} zfuQ2Okp0(W|0Pk4qy+}=&`^&=COw2(wMFV%&_@_B*5a;$i=3o;?}6dvdN0c0Id}Ne z)1AyxxHZ$P`20zxa++Op$>&ckmGe1GZ}K4m8ci$W=!E(+l0$p>wYn4_X_JeeK-&2F zG9?Wxx8elXuE=1r)kjPOAhW{GamJP_jID@saJWrb(xc9zsB^d>j3{$v8pWO?Z-#_C z3O`pw*Z-_zgIgTm50)cRiwk~7IygGf4!x+Dh#SypYprWOe4F9mV(rk_Al_yENuGl)$;5q@LB1i- zS^wb6cKggSNpHDEw?FN;7h_Hf+t5%9+k)D=5jO2nH{7zIo$cD}AQcSO>b78cgdK_0 zenOMbfU^z;{6QsYe&U?9l9?bT^7)9{vMntc%vOlGhpkPnzX4pX2F-xsL``Lv?wQHP zZdoCj$wnHS`sQDnGe%}9A=1mGyFpyT#D$zMu^m#F&Kg`Go!t7C5jhJAMxwBjMr2O1 z_)@^%5_&{Kcm3Vq28%D|;a5I_Vs)PPafCKU&C$Gz;R9Q67-L>JT~4~e%$Qe7#Kjn zn{2UgsYFSD=eH&B?$Eq~0wFk0#08Z47Fx3btl4idtynYv0ADk&IuLXw?fgE`{7aE9 zV})QTL#iC9DP~H}E`b+y>eUEz1GhJ)z7(2VZ95F1xNt*iH|b+8`oVQu+^bj8^s!92@Ps)R z7;eH)gh+Zlh^I4VL-e<664dn+WKSK;H(#evUe#H+;{r2MUqUqmocQIRury9xI$e>? z)fr}4U&2n5Hk^#R)^RmEN^zK%y803{>r0~8Vd=!wFA<9IroM!Flq2Sa?sH40igC5) zYCgUNr4*{u`XVU6_B-`;%BO68WXAV39lnO|Svq?ybb8(>{`!sRWMME|$#ac`K_aim z;_DBTqOX?9L_5`A2a92hJIe zV8-uJiVG*sw0uvWr^7sd2fnYfhXgL;_7suF1^N#7?Jw1G#Ql4o@87UD;}`uK5ciB?&H$o2OZK;e*(?L+F@P``Z2Z&=vW^I&{)O^Aqu{BY;G?xaoPJjL(8$7z^YD~4wEW{Ccq3AaBaqtUp0mWAPUi5zNsgV4R`?N;_W<}tvXSPfgMnE% ze>|OrdrwfBR}^{mFF2Ii%nP(JVfct27G%Z4*SLiimiNyIZs}q}xyjoQp!d+b?>g&n zCoLr}xaQ_A+`C~iywfH{MebTnCm=tztTrKSj?1rIvWNQZ;>EP9BCb+9(t7ARUFd@S zW%;!ucFJ<6^@#7KorMAZ>dT>XcKNl-b_9d)r>7mC$VM(|BO7TJ}AG|X2)%L-W7XE|IEq(s$FCropMqW&p~nH!JELmRNq~b0u^cGYs35` zDZes#`d`r_wwFbF8W;d8WKVoY!V!qJ$pXW!k0xMI6|!^Fku!#!2&(hn7S)*t-wzwi zd!Rl4O%t4vg>`noFBST?*zs86l;zY1v&oC>DEbkWEtaF^t1Ou$MS;UBoQ-T>GAQv3~AQQkS&5wP8 zUG9v50z2R@aoxB`WB{SXF_+3W5aY-Oa<^K-W!#cp2qCN^G&&DHH9U&JsT}_xEXe)= z+`)VOntD_GsEi+kz^U1tQxHTg(u#Y6EPo#O#wEO@xAkffT{m zlYEJ|h3V{4o_=0Kgj~HxK%6E7;E4}`Fr6>x0v*_de*r5oF`ytNr}15HRy zex}@jJ9>gqgkuM>qEGOUir_FBdMJ0R%M2Mdqt>nMNUxbVv;1AgvJ8Yr0NV*Sg{@ig zZ*cX>4X>}aGVzVxGVkS)G5I$|S}rqK2eynDm?&ikpcC7 zf(vVL$$(LoffzATlX)BZ0j2r?2j&AP6mlBcbKY2yAr2+GcYzdWOGR}N;;Iqr+q_z| z&~+fP_p*hq7ULuO`vJ&XAk}GmQ!#wY@qjCxEd3(gzU?5qC}#Ax8V+uFe!Fv^+GPNHX<@L3ekh z*roT&n1u;{5_c0qUkt$5nvw?`rQw)$x%XIa1lfEscVS!A%#O)Q>b8#zO}Z6RMaGi4WU z#K-Ekf;pN(Ab}3S@=xN|up_P5v4$VFugl|Z5$ydp3dollF}bD@nXgm2GAasyV zJiaTodBfMgs(f=->?_}T{;SH@cEyzH=M?43{QWEHj9}S+Y3Ki{rf5sD-^h~-JIrS7 zY60#E?TS6W;knJK1jGE&U9k<{dcJBR{T20F&su3VPIqe&t!P|%;TzcO6bU5SfF7{W z8~M?{!P^`D0|X}ew3Q|>(bZO(z(k9X21R^MyP6+g=DNEfs9*sp7Wuphvndw}J0b@m zyqYO_<~h_QB*eVFMKU(F>%JJCJ|5Oqe!R7@DA`N{+|)SGHww+3HwrPUji6K383`p0 zXk_FmfRvj%5E(~|lp@Uz;SD79yc2hogH9U?Y>@|fr55a2F@y|z>z#=GmpCx z9AO}4Kp`eJai@Y71Z+f@MzD0K6hFrgh*>asIdLbiRjwxu%eJ}NSf=vWwrP4aSsRnK z7DjKwF3`sAQyxMnYs!wwc=4Ik|zfmD*01_><^KWNKp{z|h7Mf0paJk%)eP zpM3LYO)FiZHg>nV5S4A9hVLRfxY^$1Tu87}>*4kE7P5-WKWRG`#_m>!gKNd;SFsu> zmK**FMR0%T9i6t#A^-fy=D9G@qBH6!wXUfbo1Svnf-A^5blZohs^ua;;E7l?lR%)x zD{3WjqiJ}xx}vEWNZ9H-YYKxeRpz<}TP=Kn z-ZaxmZ*QwIy&X^;daFJ94mJU~;$LTW!mMXws}skh9l_@i0%e(-Id@}gH3_*%N@}iy zYfzNC%_n#Q1v#6fZOai<9idD{Be1;0Hnt-Q`9Nd|WOuRMJRPrc7a&=+GIr;qW)L+I z>1SgLubhg?K_yWnhGuGjXx7fJ{LrcGlhBBM6-JeEbsx9kRrXMPWk&S@f+WWJQ#44X?3#@LCbjDX@ClaoWq5Q zBJ^;13>jZ`#+FIYOy(?eAsXM7Zy1j+Hk`XqNgQf&H9q0imL#cbyoc3fkaaAxU@nW{ z7HNLdGB@Vx3+S5%F08>#BF)IM?8u$eF=rwmBY?!0og3SDt_!(hFW{psGtuBpt@pIV zmxNd_aQw@08I885z$Vxva0i|kalyDgf%`59X$^>;2``mowypZ-624BT<(NmfzT{9T!D~p zDG>bqBVD(Ss*gbhhybF=xG>CzUVzAweGyz#4muBqiB%EW^KjX?WGG&Va?H7?#LMaE zq;h=CHGc{GLNoqw)&xzV^}_y_tYhAB&4<6N#TmN^ea^c-xIv$D(?3no=QuyD&nfTw z7#^u{?kn9=6|nbK=phFrso8ybqxpT}nP^|$C%t*nna!r9XLUZ3;n z%DzIEqxTudnNIu{qCR2XPx~FG6B?m(=LrV@j#-J zL>j1z3%JlT8B4t5ffuKUteJ#a4lc6JGH0s@8vdxHjs0+|Blz3rF;T21-~0oN4G)tz zo6v#@na~;e(#a+J(~@o2w~!Dl>|2aqJeF{DD~DXVfa{J90s`AaaY(-nvwhHgVp1+9 z^%K4(#>1T3m(XD~MSBgE{}z=|_{z6Ms~U%XeRET`f|63v82Ll+{dIoyxO1+ioagOt7I&9@ZE>Vmbe_d+-cyil&HD1b4^^A zCbgVrBKJaUT?nFfH{Rgh8x)W}Q@N8tdk3RMHi+V87I`{B2)!2rB^EG(pggSS2z6c#@=G9taCU*7Cf`C^E2u*_pQCLs<1m7g zcHr*@*Z_s4wiiecEAq_Wuzc84r;_Hn8%gt|=<9$?9VeI8x##dAEF)Jr$LT3zAbeKA z1HlyeawklrhdrHgho_sA48)f;79+4@5=|4XO1~E}(;L%C72#^E5b5b?#2xw``B#_I z*?Wx@5>KKmff9#Nm>BOF#4`9=4bnYoC{svn5GO^5M=2pH2NXqRh_Io~eGD$!2vob; zrJsL9+ecws5+JCSxsBCJD1dFr6&QV4%JnF-{}aH_K>a@ljOoMWK%kD#c|G>HmEnqK zpfI0cPcu@$ZX@=}uH8V0d+4t~S&Ee){!$EF)>eXo@k82|P7lcIIYq9(i^gJnmKZC|K%jOP~@XK*a z^kCTEivd8>!fk}izZXi8I7`9&??ABv^VHs%AKj+edVzuTEtm*6egvvnyfmv$8)Q@XT=#r8z9k$(i9q9GP6w25-@82?K= z1R5AW2|9x!p|%%9zk-#}0~w%6=|*K2OIMb$QU2#I<|9@rG=6)z`r;rvJU`4vjlesQ zN7IfY(t`IaBA_Sas0X(u8UBO!ASS;Nz~5^m=|Yf;TN!eX=?9;`&ds=VLDWknc#Z-s zxMqYj3c>#(Id8wvf*VH%wfdIJzo?!m?{CrGNuYeXDhyUNt^m*nHO>=aQa)6mp+|gD z+$1L?Ls$(ig4rVfg0FC-!w2-D_XM5)^asL#g;-)|lS3P;P)gymHwJ%19Uaxi9#h=W zS9t0LB}E&nRy@(~;+3_9u@ZC!(zJ!8tRLbWgrzKU{0FfZA0zZjg*{O+kx|TF@vdMo zeEZ0=v1v}@2{_g3f6UXy6SjeBeH<+7(#Dgw{sk4U-lcA5hx5po{kn)h0%ksso62BA zp3|1z1+UlbfCGh4t6JW)T;w75;XMB+YsD4E=soZUJNH+JNQeyGloEWhOS_u94deXZ zq`eJ%ROOlfJwqli34s|PK)@(bW1AGTiBiju*bbRYh(It9B8WuADr^5}*TNivLSX0+ zo5Sg}Zq-(|c5AoVx~py7Y86o-0h$D)7+w|WzMOop#xVh3@#wHW8}&<*qf}d6DmdtsAKpT0(6wg6;nJQ;p*0 zY_RV#cqH?c?oq$@{|Wy7q3gq2!i3xv_ApCZ23)NpLz z#)@=VB+Xx?50N>iip&`mi=V@e+7X$e*io|SVT`yS$l7MAiod`NHa%vT?OiYe1d#&C zRh|~n)VKWzsCo)d0@LULIWi+$il>n%vJ(v(M&kyBZ~}009&#DrPn94!8W-L2cVx-&Q7mTZaFAzvPxZVum;5;Na@RY zW#%C!n)UGjqf)?uG9NR>$5wGwxE!-V0~Zu4vjeNLHDA$#S@<6;5qBRYUJG@18IJ*F zEcR}VLjft+r}BZueVg5Mus#Oa%<00zsH+dwVbodgZ^rU?`+)gAyHz1m_uM|> zoSG(zvrz-4`Ky&~kgS{D^}At@l%tLj9OT{!gT&qD92fewrCaY4!@lLEveU0lsdTp+ z4bMxh>rNRPU*rMUXH1~NrUqnZ9Q*xs#N=@2~#d! z{KM$lL9WO@iEMt(0wcIU@yX%PFA@~sX^R5kb}cPXeZ;r^N0iB%Vi8Ea2&7(p$gz?3 zR|WMDO*>^>Q4}gwx)?HNi>iXm*&Tt36O6ZtLNOD=ZB1uWzT5bh*{8N6M#jQ$NaU-+ zU9an+MZVWOKUD02WYfYX#z54)dnWA?MHS|Gfs&8PoRe#ibE~#DMFBXiK*F)Ws9Gex zXzl`k54bve%jD#DxU@jzfG(y`7ZmfJWi!_Jenwzf1`Yz&q{gQeSRYdV+q|`(>N5)T zqyz$za$&BqEC;$hTWsSZBXC<_NADr}_j4|dK3`;t$P?eGy8)Tv4bkGPEoeTixDw&u zSA3hZ3)a2YC~d&~*zmHzX>2?1bc3ugR6j6X@3nS-+RwNrnIkHiGa30Lrt2%O5EL7dN_-N>XBH@tlS+z+O2ku{BA)X1i>J&1 z@zg05H>JWHRdY&GDDjjnd_x(GebAUYiQRrw?BOi8<}Dhed15n)b7Tp3s{v88YOq+L z?}-%qqQJY@Qe=IoD1rdP|JA`pfKdYr1Q;8T`ebhd&bkIl#=A-OEWL)|?ABnh*olqG z$)e*XT7*fQGInDwnqwrRay}N#@z#Lq4Dv z+!aVi-wiLK-2Bizrx)4lBEws3CA5|jwRNg|gwjHT4lFT5u{pR$(GMWG8Vlh&Iadx^ zb1qCV_Pz2M zwFuH75HeR~92YPMInJt2#Va9;q07ZFEuyzfend4>&O1><5}znIy+V1kQXE7o z#osy$4{~!95@_8iQ8d=;A0!~|`HP?r^**ORai6@t^{|T7WG#Mujf`vk{k-=+%l0PT zdg7jM?m3H{Us&=AJR#qf4T13n84O=s*a$p=J$=$peNFPEXpS@|{4DJvuy z1P0F8nm$YcYty~e{u*doo4#SaiXZD*yKcMGPc1U#wsU1hzs}!F3NTX9(m4O5;9gV_ zv+#W9OamMWI)3}g$pR;NygTmtu0a3KcAw|O1q>T+g5t7I^kQ+>XMfduuV>=T( zK4d6hQs_XQ7hi`-XM!XcEGXSGJZZfY^aC=Z6$D-EOi=kmbesux4<&P=<4lke9A|>> zC7lVXyp=OSNz>ERE!h&;tB=Q-pvtG|ecPGfd-xL+XM#tK8gVB0o;VYD=MtGc(jg3?|pwQd2E>XjrV5<8!8jA3kePThyIp;=-dw5~FGiRtK{l?(eA{WF_=Z0n!tm6=eP14k8G3A$GUd-;ON zMtOm-CI(dbHvX$v+Vr0WEhr~}drqC$8|9c_=;Oe~qnaha?$D9@`Ns9tzI`4Ydu z`=5A?6>l}8UE*CY&Q0+2>wcn{LD5JU{UDC~AY$xrx%ilQD!hQ$mxlWZR~dOvz(@?Y z&V5~-GpEfnKVj>s*)Ntj;r;P@KfU-cM)ffpoft5$puALq!p8VAzkVjZtf2P=7+&Lz zp*pu}ns$2zxta?WT;j`ezp={|}e~iZYUR^c9=_W8IaGv3NM8MgMHx!jwy**yt zj{gL+<_9ztDk_XC1*I7wOoHua?rk%)UA{kR+hG7xv90b;WIMg-hqs z&-DH$uAC&{aH@jRz(kxNSDd)4Vi#dbDMcCARJ55($e5G!&s5jKvQNzbbp@ZLhC%RJ zA}i@Kp^TI^CyY$uj|hOKxH4}=s(Jn~+IrTq&~}_+gffSQ{E-5=1XB%V7AErz(pgwC zqaCMSVC@+*VXi7FS3lVMpJj@Tg6d8IsyzcaDRzE#7uBI zXQj7sQxEiNC)aJ4?Coi|=`LWPULVK1sspusK}3FZw0xjn=EQE=NR3@8j(k>kiU=#! z@$3#S!g>15lO(|#nB2BZ4+HZX$wPTfH~)um_{}T4#%_{WuE@AwHobZx7}$?cAV58m%qU=Q_gv2$glenl zS~e_D*P~_WNA-RA2dvT!L(^KHzYwt+T0^m}sC6{|koy4UPLq7EhTs*5s_jV85rN^g z-wc7J1m8>)ZhKU_^+WM&w`i`myFgs3=!$3Fpwub3hsr?9ApmfWS1(9f)!S1`l&9bt zRY3n_Q7wrfFghm&JUFJ(KjPWB)lu=ri{t8>*5bu+#W#TqDQuLyPZWhb#?ZBy+~X^{ zmJb74g-`jP;MB4AStF!;alQ`@*2Z)g&sG+n#oc3FM*qhhd=$Nhel;0&HsaF&2Q8UK z9gHroBKq0a#5*?v!ceB~C-2jvtJ!JVi$Z?i4}}A0ROJ|<+``j^XVbQFC+kT&tCgS* z=4`CaB4a-jEFiEc@TIY{>9YxXn>*Y#qGEqh-TpP{ELNaN(E&ZYdKfOKmw$|aGn7Xf zbd7}Q1-cNz*V}Z~b}qQ0H=R;}FguaIHBjx3M}~N~G0&zyrFr>KlXV$Fsh^O=OD+*V z?G&FqJ1w+8PPnw;m+~$hsY8g#b3(7m)kAseGAJF_@61RoOlM<=S51yDpDd#o%rRWe zp`g1ZG&$?tYtc8(l^I8oahA7Six&yOuI7q4nPo}=uV)Y=)>r@}e0%S6=2b{OXb8ij zKJ-3!>41nPC3EDI9Ca12cGQeUgHg(0-pFqkY}2~?xYE~MBTwTv1$?g+&+xrAd4b%( z!FSV61w5OV<576>jA?ky4R`Uh0LX_^zSk}!K$HMS(X&y&E5s|0e~BJhd7eYI_4aN`ByMVDi+xt7wJf+;o;4Q~{nut(|Aw41f^rq^0d6|gSJr`)Y>6@LE4W;| zd+kur_`mWU*T(MZR&sqPux%}l zSbLVVcovLxS*M~8-{|6Us7XMX%jM|t_8-cV*wJK%0Jx9YyXIjz%r!Ksam{CFM`R70 z@XfA1krMJu)J~*m?M$sbkP)o(nSS@4qM2TOre7;&O#+>s-{fw7DkYRPs!DbUBa|ao zF0?jhJ%u+^F?vlMQ{PpU}IOa>j;Fp2rIrELzFTl;C0Hv0T1bX)#bI$Tgv*{ZP)2=AxM!I%-ZThhbt?~@)s0T4cv1MCY?N5f5<@RGg4Qp{Z1pcLg1u*}m{XWA zt{1?_-VHQ>~L`@QccE2c~Uab^R z+XfU++s$w8fQS-OLv2%>Wf*S^MBP6S^@y3_L_Oj}-LGrUH(i*ZYcI+%8b0Ey&)}q~ zZ*+ubj`l5j#CEMt$q(0($oS?IH(+|O`%o+2!x?IJHKP;6w!KSy7=+v6nrW`4usA}c zaMuMcpw%Z5=Kmo?c%f`__`GivrY+`Nv5#rrDPMzPrL;Af6MXgSSkEnCB?f5;zo|;q zo|T~uKQAX#^^3|wNVt)mRj=M22ye&0PlIRM82M_T<-gpky?FdS0RMJ}V4M0L55K&= z;^oLq#9KRL^^HVZRv4>$g=+{l3@xG<&xVMUW@32bWe5omvt@B{*=1%(o5H(vZKGcI zrb@sVJ&zoY3SjKU?RM=r_@ZHR`ABLNfY%*1*XBz|SM62M@=6UmGS#SlmToW~Xl3z) z%?mMb%eo8H3cwEvirNu?L8Q;jnJPvXF-|19hZCdzu&=a+9_4yLubV$Z@i1P^`Y?aQ zlZX$ex+2IL1#T%a=gSl03KVz-CI+*DxuIfRGAGW`N{Q7!C-A}6{WmF~W|y_1ZmKHY z96wOv-Cr*06(^7WDcJpDe_gvU3{x`_n9(nn{_qz|?_SoQaw#e8(ick}OzgT0C8rc_ z?hvD{6$8-;kzuI2HK(|ATOm5OeO_{L!Mqf3YWC_3v_Y>dJdFApB%Bd_<~Ubm;a)bn zhsvF5a42^E7VS8HD*>k>9J0OIuo!Gv2tJ{BF>t@$hyhxH&aqn|RX=kf_5Ge$Vd^;bOex@<6bC>Q{ zt5xOa(J+HfZo%xlqD-fD)x_xbAN*}`rBcDVD6sgVKyU1(a=9>R|Hru&ZHoT>)Z&ee z{Ao#DBwzT~l6sf(9|1ets&c0-T0M z{NDi7widBkL7q1Mi!^$Z@736%-(oS}q!sZvk4J9TUb)jkp{7oecZOyE3b|>6#0}Da zLi28j74X3t8GS>3-77w3n7rC68~T0kiBhjEUBv^!cPVInBUeeq)>iitVJ6F*LJ^I5 zHP!rP6Lr~YUO~+GqCsdqMZOX(0&-Q=12wvZiFB8c*yiW3^WyVT-1P|%qTaEmRln+} z8nlbZ5v6VlWyoa#HzE+Kdm>)*Zpu(9%4(dI>0gah2vPx9*-d71@DPkjwd z{dm<75!GW?M33!cFMzQAnb_ZR^-`ugLL^rAm=_{a1QP0MOxZkB?U_;rbZWC_-GxRn z*4Q4BiU_g*lb3VEF5=m!e#csFuQD4Cp8ms`JvXD{->C1-Kgx}Jq;K=&@$urnkclf) zc%iVzdjEErq-#|k_5_A21LQGD4xIjje(cPiUf@slvo?o9QOoFl$Sm=_TKq_Sep^E| zkmJ$1URUG_EN?GV^xEKh9{qeIj2V}2^LZ?}rnZU4tksXW<9Bj091a{>o$uSc=#fFb z*Pg!YPd{UxA6lEWVbLQg(0QJzofkBXhUmWl0;otwxXkk}SRX4LPs7Q%_PQWcjg9zG?_`HI~fI>S`00=t2op^~{t zKltiDqERJm(oWfo7k3D*Aw&e!#Em^GA+dTbRH_O^qa1mprMoGLjn~>>~k~=cK zj;{w{nvEI3S*B4LiI%$=z6E8m#vEft(Dz!#ZBqOr-FoYit4qfFUTaJ#nIddKs+gEt zDV85%*SPGa*`iJK$z3LfIK2OT-SZ?b(JNc{aBoXaXBv$e6S^0Djld-F7WM`hWcFjJoCAaVcmu9 zlHitDRDSr^61va+5e-*9KWP83^iaaLt11?AmsZnUL~NF3x+ug|c&X9|mcHUCB)JxK z4eL%lP0nyF^d}@!NZe+KUfeCZ{(UyPsPIxjH$PP3}h6q zI+re|xHFj_B{W+1xGT~V4@cwG4Gts3W}1*#O?mVB^+Hg*6bMJPRwMjMAiQ2{6kf_j zIoqS6KOvPeH-9E&80sZbfT&GsdeE+!)?lkv_CB}72$kqtuW?=A^8Kz`G$z_~_)(4P zwo79NwxB9~H}@o6=+{Q**JiwrR=1naER}Ba)mN|_xfel^1E&DTIW>0HS39KeaQBUT zh&A>I0s<5&6eF!C2Xh58k*ToFSD&epw!yq^vpp!jV;}rt(#Pb}`F?@g8oBHTO_Ee24BHchIQb?r_=6F)B+K zcu@C5g?ep5cLWE71kaM9Z+l**Fv_GZrzS92*I4&g6v z6aB${;~x=fLlpkMz>w`aBlT4c!Sj7XKu-cu-(T0|TD!6(SPpND` z+NXL=machk*O4k$`1LUQ_*Q+=@J&CUAPa?Qx3WC$`ML1VrWHJO=6s-eb$WhtJo`rO zRaQpa^P2Cq?3aA6Mb3C&)-?wQxt4Cb5AV4v7a4m{SxUVdaSu-`ZD$f;}Y}^Vftk_r;)c3%kg7Z8(_|RYq^ID3@teDLix#l!g zrj|oHtWk8^<6weI28f1P#QC5AXy_tO?6+f%tt4|>i%&Khl=xtF1Osp5{hRiXw`l6h zy7lDd_nPm0dTERLJ==3R-Y1h3_Z$a(v(KRX|3vr$ihpA3`sxoNpgX`g1y4bGnVigD zsC>9nx96YzQU~LtbP9Wu=zkk_P7&`x; zfsbUII3SyQB9sdsP*Syo?w2u6UaD->7A0Y=k;*lSsT3*h>gP+nqZGvykK6-Oka-f% z{Ikpx$O|DV;~ArbtI1xa9Ecn-{{^N#n?23~h9mii79$c)H9Rj{{*=h5&(R25y9LTJ zg?_rIng3uC%pjXfCV|+hqj<*c8-8JRTT8f68UpVJgGW8QeZ#brhVUEqbsqojmBb-x zmX$8tgPQv|aPYE+FD*DUMK#-f_1~AxUS0mb6#MHcHnG4f*R}_=R_%Z=7_tavvh3_m zC23Jjt2Q`R*Xq)+IhBlmtTOg$cZ<%PRxG7{@K4URzFthTt#XPJvgEUJHfi&#?BfDf zT3<~$^x;I>rt2V^M z*tR+Rfh*RPgPm4;L--_Nn6Ng4-;dXvwDKBiPBw?%cUh+?K<*cx2{%kmzWwI2LW4;a z_DWx9ZAw9#svY|z-6h;8YU9#ct#N^Ek$h^%+sd(aHMw8X6CWs)r|!o|E&X$L30F*0 zu6LC1nNx<`d?+KbrTYQZYuE}~bcX7rtEH2+l1ffC&7nZbq%LBr-q^jBh?4QI>?q+~ zkt34gQC?$b??7qUW^QRCB=liI2_UtLn?+yje2q4mU9oOg4J%$~`u*m7qVR18cgz~T zM;64+U#s0nVH;d>N!?mp!va{pHF7oZ>lLp=vL(&cq%kU9DXQ32J1!93Rhy~kVry7Y z%`P=NZ8XBe67}r8WZwbU@2_M&h?lV@$r|0Y`3G2~id8JW1i5=MHTR($Knmv}j zSNCx{-Jr|pP1zuSwc#?oPfhTf*Mk>9E)HE(f8l`*HY0153_M!)bjZiQ;G+zC0-Vn|-TWmL` z{nu1HJP4o!K0E!sSMMAfGd)lUB7Q65Hnad7>0nCJdtUc8yacSt6-RP%fnLp!#jD)J z5w0u_fKwXE2ep(5S%`d^sLZ5`%*&m+;^&lA?fYYgv3k76STvqmQPnH-H2{`MOWrO# z9G{h*5x>=I6arz54PtDom&?eqv&Q#7m*3CP^BNuKUEP%&En#LPkC?=qOvry=v`z|& z-@A^L4@HZT$0Q^JaP@3AG9oYlvFj{5^y<6d;C`|KXE|L;@{3$)Z3Vg)O|{bz#6m^n zf8x-I9Gm9&yVSlm-2nfOuN5cqE4uL2tUTk0&!5P(taUbk6MRzk5N?Ph_Av^U=Mxm>g}EDddS4m7+(L%?M|$%w%=p7=-uLj+^|vY-8khwttTmiSzo z*erbXE2BX>k@(3@AaYQN>ZeHNgl}u*6X~h+Rf4QHhjZq3;F+T7w5Asr*hAoq9 zzg8M|(!}UVa3EFUsyX-}6H9O7u^jrtJ;=GdI?J8ybZ+b>7qMNDqW+?XQZziMO8Lpo z%};%X`Xz>Km%pQPiEBp`Oj&O2-Ki1{ZyWNGxJJJB-{#d!&opyuR7NIOPo|i2)3=*7 zJ@9CRYOg2=JSvT<^&1WM@vEonkIFBk^rNbMgx}?a%P-2i8>KyXh2POVnrvycDV!?R z=;W3u%kBxA2O#@Njkhl}+JoB+6dGjah!LClR}w|PGx~f>NDZMl7(X@8y(fy&hlgw_dqu zwc2|M+kFJrDvD~CP4N>ZtbQ7|2K`VwvOPgaNb3~`;T>Yw^F;QfOe6L=olEg!Q397( z~BhUMdos&mE65VOIuOi4~Irl|Ac9WwcP8?V$! zz@%9j-5+xTR`-ht;@UIxHvGji*t+$;5U*=g*o%72^Lq8OXxoJ{;}wlKWobjGJ?1&BFjfuILu~k{(m_xK-GR>cpuYN49*%=^g2-9W#c3$?}gm2|{Jv7Ado59XD+la_Es*0rVcTEhPGSEdDPti#ES(T?xY zD?T;r)Ku%ioKiCLxb#u_Omu3c*DtAAi-P);>Ur$yDVh%N@h&B;RKA1NBtXCmHT%IAf{WkKm``AquLYBsImV0k}vlg!TXY5q(K8|P|(Rs ze)+YXJsEeu$Q7LGL4d!crPR+TTkSE0hfVPtVoy>ePWCYQZBWmWm4~cYi;kkK6ive-gKN4cla<0b z8kcP8Z7Oq+pJ-F_}3i!~*LKUIEKU+_6?jG5@a zcu72k#8HaU#8?AXq)4j5pUO4}S}_Ofr#rg8$-d7=hv3KtUdh3}aBlSf1MrTcV$zZ# zeaVG%xbZD%(jh+S7p#vQMVjnlplqEAfgY-_c1uB|S z%p1w0?2;dyy(pV01kze(EZGTfpa-4Z6;)|$5+unRB(XPDYgAz$W_B56W*gleyCB+3 zoieD>>$Ypi=*o$MB7>vw$MMP1XN`@n;=NGlFR$Wru+_{7S~*3_vk>s3|K@o~>b!s= zcx&;zByBFk3FZLUiX7flZ8*;4hKY`#iqpbLBLIBTp3KMj565_PHEul3g9yg;0^LgJw{QkKIcNx#%>r8$k3C z=Kg2-VluV8JG#Tfy6CV{YaDlfYB2Lv6|?Os=GZ@Kf9UU(f3ytzQk{?bq;-BfO@{o? zhO48i+%Dr=5uc6Krt19{A~Nsv3+5X>zzJDA^=z7N#N3tsULM;2#4vNTfBzSW$?3hh+{Vg^zBZLn17)BzeuKn%Iyr_#> zLYMZN>Vy7%ll87p08-*rISKUFUYUslS` z#nu%{Ctl)VutpoVvMVZ230IQZfG=>u`alU_Lso0c4>O1?|GqTE%wJHbvq0=gXX;J} zJ!+%VDK?_lNHIU;ixJ9=SLLC?ha)C6C;sbG2~<;7Sz1Mu2CzR8{G)gki5xeSb z6H7jimuCicYJ;1D94j7SY@czFt4jk|jjQ!Nq`P>EKq`)s;b#nQwlg=U@%z8drCcXc z_N9@W?F%zs`YH?b$5570rbrwB57|fmCOCdLCH7=c}5G&a`a~ zWwHS|$G)1g{j+pn9{rZoGLOcR+dt|lX(iOPT2yVxdrNosX?0fi?~<{V*|6w}mV>mI zT{m*+fvhs4)UQTj3o)(trJMfDQwvq%pRvX8&Ae-aBxC5hFASO|iT_tB$ z|Gh?5%6W5{WN_5DBiD|UX{?gFE|EOy@?%G;P?2C;IF0EpCV*NwV@}e1BlakxAXUoY zo1w(G@-~vU{xMGF<%<)B#N+K7mq`18H0h6hu;-%KHQlYeQl@i(BJ0-(xCpk`KI;V| z{p-N%u+Z{=Lt?KCG_ASff7AC}G@II??+Z$YtqeRwcI^2c{g~AKR#kwy{1~HpU!d_x z90P}@(~k)y_MpcManW(s-<2d%Nzf&IL0`@lVPH(uViTQ8mHipS-meSUCoyHXQQ?5Y zxL(*X_K?S)d|EmcrKCxYt^)gNQCUIV9JcEhWQK(rrJ}zlCnL079{*h)tJ;mwezQqc z>T~l4>R05Z=6b%yt6q71yed_>fxb`dSFGQ~%d$-j~4p?yr}hel8l!c-uSXS^m0ma;~9#WMH6~P zu6t&#Eb-^aK~A1@v1VNkdkl=8nYn@1x-rJQ7>7m%=W|Kmv~Sjdpx~Io8MDnk92UrR z4hzJ0DGOwq!vP`qVh+f*Bm*S1d$e71rl!$zUu{w9l|B_kdFd81?BYWwM_Vk9$yiY*+vWsqjKAqR=MR-~!?}Wl{t#)MYMh&O`A(wvvMo^E9@ZG7+YnP&ugd<0SpM zbLpIBk>Yjlo~O03bLmIGgjn{ebYMTA5khL=7P))e2PB6PzE{UMeil(;8kVAMEYez+ec1ge4aW1Hb~Pa_ zVaW%%(6c0@_-Et?Th_x{6#m<6qh@3AL?TJ80IS4>frSiau%nsP5PmVTaOpOHYM<9z zjhg4re1OvA=J1Q|eE``$Zzy3El-#7o0R!WZT7m)eoo+uQx>SE z$^0TmRs3fpUbnR;TKD30+TAMXB~>57m)|@PU5XFcdDmXM%xmXZd-eZgg%TCdP$BZP z{?tN6X_j^MhQZ3qrmy}Udd4n}l6*hd%f?M4)g^S%^J-|?(^|Exj*nt>PqPiZ($UrN z(V-ok9i3U-cM#k6$GYcJ>Yk}jtXb)_c`UWL1;{8H$hT(Wnd5qsd!N-=JAd70Pf7*7!^a-j_|V|?)FTKEsBQOe$u@dZx^SZH7<~7w7qH^`!^wD5{_C;Cch(F$d~FxW zVjtggbO-m|MB196v5(W+hn*tO>S32DzNLMbsNh+>vBWRyh~6X7Tb$@;B*ax9A?cC< z35FiN)=$86UO(wf&Ec_Q2elHc$Q8cM_Kws%g6K&+h`abXPk#?otFxx9Gu+l$O|(fW z<>Bt-S9W%E)a_nkgm*`GWuOVTtK)%P$Lbn89@vfE54t{9q4W9Z@qZkFfr`h*#5 zgf|-1&j# z!yCKhQN}D;tLKGyMrB#gE-93Ff6Q z+eCsl-a6PJ368Bkd=tZMR;mQ`3E%oh*6=H?NQs zyE{`07+NaX-rAWZD-0!6YV7K)-q_LAnZ=^i#>MKMb*&i{t9!|{W>~E5MVj=Iul_A* zP~A)JHJ9->Wkb!22qL}PBE!Th5b0=c$fFp%IGEOS=0?0wbb-T|L zPxO_Z>0k7+4aCwA;rce?WV>JY^c(9EzOUjmF>Prg9bnxyD|L&Xca^8Tr!@EPQf}Y+ z*7J!3-^gs4+5HAD&d!5ge1Y2?obDvy zAt%(LzM%hFU;P;>kFWHR{n3HFuOl{^1uI5(rhp1UglK1KCG+H1ckOqr>s4%MJ=pM~ zU)g3ZV4jq(-DjZQR=r;l%(y{Xa!v4btku)~7|Ai5)bYS(Lwm`ndxZsy5s+T@qK^7R-Tq?_JkPoiXw_rgo$U_~iad%g zF|$JH^NAEgK<^+of8VCG#zx1QUF#0ITwWJu!U>D4=S*cPx_joS|<1zHk`;y2)uEJMvQR+ zkop|7CR-DJR7Ea^bWv}^BO`Q0@~aX>Y)Tg$R}DtUGk)duty@3 z{ia7WK)|;?fx?Dcit;WgdN6a@kFcN#)a_p}Yzg-?Z#>j)Uh%#}WY8W2^1`OdtCs}Y z7%$(Jo+{s#L#uP*RfT#};K15%#;Yd8%iTO(n~!h!ALn3UicxM(ysS{)gH7q!c-e&b z3^z}pUFV~s-=Jdbxm|Cy-Cb~P%@%P{bytUZtb6&Ij?^h^Eyuc-E&k&9(Z}@dv#0N; z9S?kZ44+I7^x0-)*4H}Qk37)TQTLDIU}uJ(z72FnRNpBB#s!u+gOMY4iCCItF1hwX z%F@Pkv3wN$Ln7Fk3b$5)Z*V~4SLG<_`VfliA2C~;WTcSe5c9vu#Of8f zklbqJCaad8;(-TJUqqNtTNOxsiQg47e=RTwvbaY~Lju2%m&CAVMJS*0>o?`gY0_8JANX#G0A zFjHTUZ7iImFUZp2Y?e$)Oq*nLuDMZ4_hlQn2rHk=Na<(u+XAi2M=3M%Pte7Y+I*tJ zol4(>ckcu$*w_qGx8j$Ku}qsn7GqI~w>B4U7L{W!k$W8$HS9&^_ZTqrQ82IRVX0fY z;}83-9YtDKBm?Yu)k?r|{`7_2M^$HvG2IiG?q4y%s4Z9$TQeNBTzFttke_N3&#jVU z2f`*nJPZYyAY){>dyfhSuUO`6ODHHm7iDjYvQcaxm2pEP4eOwGvyY6xah({-hUYvH z=69JV)|j5(ro(|Q%OJu%YN&#e`xE3&}rKsWOLXs;PB)QCNuLh^4NhkfF0?wFGb>_ z>N5AMNGhAL^sDgbR1VT}=4;6ulIInM%IF4XD|fVByc=w1#9#xC!jqCV90pWkA7YE+ z%3Eb}HmIz}T%5J&9fG}5>GH_v8~dR~TX1#MpUv;)D!XtEv+7NJ5eOtYelup;SzOA{D5q5tZ%Yzma($5+meRpKXN0A|& z?cMJnhLHn6iT9<0A&fdNyNEO@Y;*+uOw=0dIe4XgO}Wf7|4>k^pV;bqb+6vGEqdIo zomHiH&9!9G@ev?6LQW_W&G)YuDFB;m*DE(N7!kN3Rr5w}>4dAfiHHMq<(z&Ru{9xN zlT9OjTjlQWsJp;Xd%-?xKksZ<&K;i04(l=+78xqy-$-hA>+Qn#E!?}U z6CB6R_Wo9`Ak#0`0)qNZD8~^jUks&EJj9TTfzVh1i zO!GMF863$9bHqVw)RI`&$jC5EuTuZ+!+VUtBTs{hvfhk=wu>!za`#Y-L)_H^HXvw$ zvF0JMgD(BFxMw}s=i|x@_i5r=gWcu+5u8pJfz-y% zP0&xS@vajcE1a9eXV^RQzIW4X*hW>Pk{5t50faP8_HgF)qbSiqBrWr=c!-lD?JUAr z&2OIL)GR#QQl?lD*0+q=@cFRLz!)EE9jrh&L|D(G0|(cnr+~e1*{JFx)<+=pgiq9d z%!gsf@?Ikgdt#F>XxsXl%$Bk|N^`Z8<=8*D@}rmeSwTr{fW5x;VlikB2s&LHK9iJE zzz{BQ*?e&fUs0cBZFyr|gSrP3YTTO5!SDi4a@kd`zHSvThz2L5iGqw<^9cE&6C&=6 zj9VwkapHvhQiT){@*O8ckhw9VAOv9|Ics&st>|f@i8eb2PUQ*%FQpnR%8g9%F^1h#}ct2=+4R&NHX~~XgGgeHl@9REHq9m1OTUjI}UILyj zLde9eYTKgAtOw2rddxbPR)v&~nxMrYa}!^+UVBU|%Q|43ngJ|5V3`v-n z@r7QIfn*p{>l16i>IcVZ6j|(4_0R_265Ez(om9199jP_cZ%7ia+ZC_bsP9&Agv#*k z6(yHB_PU%~IJV<@v~uWsILzC>{oSs`f+YtsC(ItNuD!_(P3+{jMQw-GAOI5}GjNeX zgPb+es1LprzC$F4qGg!D6rUsV%^q`#-Bm;Et_q7-zQ?@UuD6AcTi!hOTc-gj)1#;x zX3{$b!u=l8R70&b!P1dt19h5f{d=;FYU9jXB5ZgJ@{WL;ao;=d(vTBZO~WrJ8f*Va zYTs*$B~ZA-ro&FwSgpy$!_qOw-l2x_&ghgIfN$KUWubXX?;=V53^bg*cGbdoFN_vV zikRYaLqCLmJe~F?4oD26Xw_K^1G}wbx~k?4_p+~csNqD zxV8&>;SEulA^Mr-nEYanf|))7v>wnWDDIgLRdL^b{oTdpUgTLD!YvIdV$%FowTjUe zIqutqjm~&aLVYp3OX%d&WU}hxuEpl#q^>`#r7nrx+x7Rt#wDVpO_P#~qgvop6!j)L ztP7ys{DA|AkgNRWn)5=t`PGEB?~+W>>#AQD4_eFA4>IloaSfn)OY&+>!qs3QnN$=5e>i5QHO>isvg>$Oa-1iO1 z8@?DgstS-0UK0pPsmvfu@ntqO@ z`73gjO<4z1T&`GLJG0f+(qZQy1s32HH1HinG=iMwfC{N zn#aiuAAX?>^B_;6NVsR+an_4}-DkAh&pyft`_8%#2+CQPAPB3^Xx#^se5K9o$=6&G zclf$@RkU*|TACdVNFi!6V28@4y0oL*z0X)a=}a@-<_i-4Ph)_z0y3}xWvP;LM(&LOXMO;K5%meW_3@ol?o z;28bJ*rko-DJ7o1;G}ZjdYzJ&uvV7TH?F;Ii90kVfzzty0tNEp+k$!DmWl(uEmdRk zTLW9yEH%QdOD2X7KoyU%?pTtTIfkr%5ZPr6hP{_mFhC*kR(0&4@e)3PFUdi*X?&BL zoQM=ph_;PyOZ5Rh2Da8cx@6t#bXN{XzyWLhx|tAgQCIg;THn7fZ<;6g2O?xO?=O^f zuTG*!-ljzo-fjZr-XAz>)7^Gp34vhdvL$U*UMOJ8WV*DkvB@*2+w|S$ZnO=T#8z>? z9*N#EbxKN@|I7#H^2`KK8j!MkVQvF8J>S!}6^p$zW_aJ$L6M=bDqxk?%Ocw_q&QIf z)#Ay%*h{<>7uc};wHd_|mlYLHTCu43TI<^4!pNfT7Ww>Q?U>>hd@(^AE&io%{mb(E zyT~}pU;Ibk`sd{BzkKV3V#IX*7yRHsHc*zOYU8UHrr;7~8KsP|tvcftzcD|=l|xJuSR*cQ7Od4yNs1kj2ZaCi%$KWHqubA@%RUs z=vJ9Ut|&Ylo$@=7tb>zSG=APzPITjx+Df&1hpPwMEV?H)VPN;x2A}>;L&d51{M*Dy z=L6i9ut$JX1!OsM12 zj>cdOT>zZgBVwLr?q7>_LY?zARqcWUa~5Sw zbRuBq%duZnn_2fQx~kV5yWsZSax_-ggUfYj08xxE8>l!mK}wl*u<1Qd%AH^XoZ=LT zHD;OP)tMhTDaZN3+wAcz+_6Lv+1WNX#R%fuBH{zVJ>XyMow0OprZLO!)mxL@=ig8{ z1yi=@xk2J1KGQm-KCr6RoqCh*w=pvmP-=$$1h^aU4m0)mgFL)GMtxr?VK%bH6UscW z`car+gVD;a#~PSk>nqES_PzkWyUeTF(h`o65ULxg#d>*aQLbI>C&@vctQ%r)Ng-nm z_0dpS>*1(gy&8qUfy-iq)!W%>fejv$zib~QH4oaaQ>j_5Tnq9Ad{F92!^KWfxV z{TnKtU1H3>3ZY2#E<=(%Zli51(JOvyRDemnUk^Wt^CR3o#Va0_!$Z|TH?o*T=&j@= z>(Xjaoq4%HmbSq{&vv4f;=x8WT-~@z0sdEpKp76C2ZAmm=9iq{vOgvh(+EG^5|g~; zpJ?L2jyL~}Yme`>YAUo*Z!a;sk0f8;l-EPNDj?o#>?UDJ?%NWa9B8f^hKfv?8&Mv! z-FlaecgW#HV%>Hb$>i!6vKNQV?3A)$e8rfZ1qOGZGF!XMx1}=2aGS@O>zp(X0re?{ zoof4XXf#CtW9rry%+A3L(SapRANjOtzAanvySW3pu?Vttxd-sHR`_qY4IQ4Nxu;LF zOlIUpX`ZjV4G{P(JAtq7D;+*O2Ubc|E^v-*Ho6cK6^CoA_BFGrVevs@*cA6cJk2z1 zxb5j!cX`8YlhTgfqMeSt?{5xHaz!RA-C5pO>Ye1*Qf6qqFg%v-EqAv?%Q@4`@|z#( zOSW3*1gygpVHRsntb+veDUsp?*RsXffLyq+Vxiu4P2$^(L9^a^4V8^z&FJOj%0rVPys5PcMfXukEL1|kcmpm2xd#Mr^x#Y10S z^x;%jBs=;rej3LJ5axK_t7|bRUY(YIKK_tfU;WEd(_&jQpk=C0!34OXB?v*#m}m)3 zN+ga=YY7(6Rcjr$lU5LxV|?D8v;EE`fpzTRMwQo*T8uc3*g|SJv8f)W67kYDoIQ#j zlQ?^XagY@2G9D)*zJ!qXX@Zd7{k3+7&jQfqaCh0D1M0Az+XB;bT9eWcjV@bO_M?Y$O+xi0sov7h+^pef> z>N4ppqkYCyxoh>I+BRlsGf;dfoIO3}nOmidhlZ6|?{lRdYLn0EZ$Ac?Ei+l>jn7VC zh(E)tP2ggI<}xgGw0h?{O4l~a$DG?Nvn?t8vXi1yP|(jr|EkClY<+F9)WEO-@d(_z z#~4V5Z)6U;D3kb%$;RBt`bpX{CNKz^03d!hcQNak_>3%Uy{-4vRAr-iQgk7pCa!FW zDy;~{lmmAJdIo68vk+uIuJ6-(H9AP8VVR1Yd!y)LFckkJ3ujwPRHfioGC zyyRa$U%=jPw#D%Uf2uh4hANjjIAk*rv)ZJ>KBYuu#N;De0)|P&8;$v1gk$x44GhIl zxWxf{{W|g$@>vzKw#{l0Bk%VT(=(L8_)z{1V!{L$z~KX{C|If2W?Csma9&{_gZPc2 zTQchk4Cau4pH%D@nXYzZ-TSoRV`diis#uiI%w?|v&vxCr6y;B=%0V(%aYPB1fEDSM z^AQ5wnS4T6aZ}nEpXrO?6s{(b8@~@S9Qn}X0}R66$V?tP_LIc6_|=MTuhHAOfA~3+ zc1`!*{~q{&43iJ>R`p@$mp(iR>xCsoj=}1sJ2LGa1qL;~DE$;$_W~WyuH2XT)Tl>(jDy zLp^+E?Oo^$K)ifk^-J#9XBqm*+L4=Vo`OFXDtht~j~yRTojbh%<<+s6eDpc+pkw z&W?vq#>hlwLimI@%P!neG!)CsCSatx*nn6_C(NyME)0&emb3#9`O2j>Yy}V?k_VO? zru%GGiQ)sYf!m%j1=V909btrWgtsY(%qMJX39u%3h8b$gw3Mue)^!clFs&$%ICnaM zDo(B$y!dsJ$vsge5t;`~C{{uQ9kKSpzWB;=ev1m~<{I-+JF)Wtm@F;awY0fBt@=n` zsk_hvuYP`yeC=lZ`9wHhiN@Cgm?6ek`FN!NV;QV?>vyn5x;fF%SLu?)HgH@^>tX$6 zN2k6_Cvp(X%{J>f(SwNL^T4~>O81LUQrsK+44cP=D z2vIV95}ThmA|{uigbfXM4Xr+s*31X$P?;y;@3BB7GvO6+!%%|?wtM;-U-gqup~y6t zGp;6PUMb>WkpB9bQX+ZDg}4m!+raW%ZG2xzZkAd8QG3`05FpFd*88hze4vARLq`Se6l-pZO6~Cqe`XMQoy05+ zDcKX-j6IX#;huy69G&_ia+s3Ae#Vm9DNbpDeUO!|jwEq|9G&_+cW#gaUR^k-=r+IJ zzSp_EWkk*=V`jib@JT+695-xF-ecmzzE8NP}Y! z;q_riiFKl%53jDyXYbwgrsB;+Cg0?tQJWs+Es_^Id(Wod$`f#*jhpuI6g!)}c7%~x z-}M5Ry%J!%F>h0yK)=*je^SFKHAXA51{2gZ*}{Vsz0YlTB8}i!tyn_uzbxfgS)$Y@ z118_)SH54%ciPgw---@_qG;>)t{KjltIWQ7WA|dq|E1*2n7?qN954nFkv;q#DBBfN zpdz#rzWRf#qK?#{=#YvtM>UjccVZ5}Yl6UJ!;#@@f z`s%v~O=c0y``3Hc`~@O+_+@iuK(_M9CR;tO?lqKZ6d^XL>+vEq1Do#CgrE+zRhUzI-WHhd>gL41lY=Z=s2cga>SIgz*AM19lM0Wz&a8J=gS!+jh zq?XdCcr5+G6?BDigH@Y~`zy;U z-muc~h6Oea+Cv~49x3TQ&psi%b$kz&PjT1xDc0S}(WoKBGfxlD?Mf8|kCQGgCrmoc zTvyII0UaXqlM*3moZv1MJje+?;*#r$9~?#%>>>CwM(=bm<}~wG-bL&n-U3I1x$oQiXS$f zdo7B2-}mr~c)+6%A5hH8LVIrGU5I@Oe488o*v1~vdh?pE z;?~y&Zi{4B3t~B{G+qDLt*}{ z?B-Q$-?4`)T|VFt562#ohi&=o+I7ami;V9tG8Qf{rY#7Z(b5Ckw84gZ;vg$CaAxgL zv^BQDPiRe8NtT~5UH^Y&x_T&BRoj+*G1J(Gi}j}Hxvbi+qsD_N*(ufx3QyeSJib3p zQ@%l~czz>?i4|*{0J;~wBOi=uDni^7+@{8H8|Z0zQ|;)cv#IR=?K-oxpEBLH4juAu z+v8nZUA^fE)}Zu{zPqY0(e!?L;o)_=69|Cfp7DFm7EP{?#!fB9&*TEP-h!XW%0yt_ zniEFmTM~Tx9eUfkcO~+jHBDx^dn=^G9^YfmaH;i}E86Pbay^tQ%a1AW9JHvjDF5)P zX!9ZLGtCvw@J$V zclb(LZHFX^7aCoeibpZ{3#sv7o;4H+lc-GM6E&x1+xorQ%wmY3+VtW<9cBcTV5^|m z6Uit})$%%~O=@49XA#~pEw_Df4wfzIIlFyv*3lgu(=yu^`;%cA?Tfuf9o2nKQL>!v zWceMkTuqh}$TDJlf08jRPe1ciQ({7X^SFb$28P3_V-J{;v+@00V_MEX_-Gd*s*PMe zzMS^x4&(co#x(rveJR^yN|+uQ&S%BWGGR_rD#!I5M|UuZqbtX_s^fFL@teJ}yK1N} zcMR%qAMQT92P>TM9VMQQX&xNMbRXhfVBEHPL2~O@m;`UzYvprS9v>Lzn>`NiekjD= z=J8eFudmrbeA6ZBg3*Dat2>h0v;j8V_~;wacTRzvm0ALu|8EWLLf0_H0`BAQ3}*4N)hbmGsGM8k7I=G98*@N%rjaJw$*cxpALbcr> zPqq?Co*n2!8Gp%Jh7+p1>8P%le``nBTh$TH=m`5e!kM(UdxcjTK^u2=Y(trB>4J>B z_V?noZaih`4`y_1ZGX3+N`y<;_Rh>%dO8b-?ngh1XMD4BRQt}Or#jy5yj?Q5J*#6! z%QQvB>9=Kcj*HLwW|m&*B}k596?D;^P@o;eb5W*He3iZIMt~F-=bAqrE$dYq)iU@y zpT4(vlUPLAN@3PlCFWhklxY7%G!X}CBU%Q(*GojPO0y%vAaSm@ z0thVc+uB#qER9?lFHb1Pqi~T|jN@=crfklJ8;*uyywvY@cI8Xt$IVKg#~3fR8YX9X z_!QFqcJooTiozY7PxyY}z#oF=uXg=yeGm$F>JlsZB{+`NhhV`WT0&oxur0zk47wQx z9fIcyG>h6GRh1=%U)_u|m7l1MMwTrsbf7vN&{hL&B(1UNL2uo?_C9yw`ak=k( zHl?NuY>X6FC=qV79%aL;dlSa+ztWvlx*t0BAJ%z0#TBje)-4&R+JAARQY+Xz)gX|z zo4@8gh6^0MSwkCryHVYU`fIe9D+-`ST}9lR$5TDql?G$Kh=@t@^t&MnN+Z0`OD=G#lTD^aK$O8dFt&7RGW3*QZ9SCl>QLcbJ}9IaN!jO`&34< zD>8&TgWiPKJ?)e#g+K1F*IjWc5jL&2^dgxW1A~vpr6z3 zGBO`^E}HgEsZt^foii_XPEwv5X{Ve}f7nhr#+Xxyhjkxm-G?qo4P~_c88Wvo^7Jd>*{fmJpMsFDmDM#@F=&*U+|l}87qPxKMiSU5TElz1_Ptf zXW`lx`xRq`7j%FL#-bl&1Y2yx0_&rq<+-Q}l)ju-rnJMYkL@D|xd0^p+#GR_YAgf@ zAzOg{mU|)bxS7M;AB4U8?J)R|_4Yv->T|O7X&99Y(}U7E!leqL-Yr~1eVY_B-Yy2A zUBdd<2<9NVXbGxKb(?d}Ig>dXti)=O6zQl5&dheq3B-}c*tKcpT1bTL*7Dd{4{bb~ z78z_6(nbUnlA|cd`hKPE4iPDjsm{z+8cdAW_%bT8`UC6hMkx8Ep6amK4rL;i@W}ZC zz~&?;88;^R_?|rxuP$1ZTbFH=zL87|1E0_8qc7Yu-8!cCB(Gl-Rt$WDQqcFW70df1 zumq4;g7MOv0me&;8r{P$(j(n6l6!b^MiSRpvRjQNB^Q)^3IW4D1w=U>$bvz9iKMlZ z2F$&&;K~md`%0Vil042uu68H2tBjIz-)lk7(#HFQ;1n=> zHE#mWy4{ZJh8QKNAW|PM^_FQqRHUG{^SaG5vHKa_7p1xVAEcRXr|H)eOwLlhMF1ZP4+nbd#!79e{$by*wwfQP`;;~$WKq*g z?mcRsp0i<=KM}u8$0_#;%$a)7eb|dPoW6k8vqtjyrukbkaQec1xD4y~6S4PD_KuxT zbw;RP@M}_6u)D8387oz9x)$& z%>z%U!yp%yGEtTGtn9HzQL){98>CFmQ zPWyFw76pIUYIH7Y8XRO@+#?-buLK=_LO&W`oh9wRy8&;Bd9m|@)-1lbwp6uFs%k#2 zS{q){GUV?2t?P=v8!0SatlcQ_3%?NmVTr%djz60CizCg`2i+U8iiqs{$>V?@Qf}d1 z-{#W)%iP<5M^#;m-!qxX2O)402%n+^MN0&2P;40qWyp{Zg|8MPc@`3f< z_x|7Kd7tOydB~iz&)#eAz4qQ~uf6vA7@epueA8O>iIAX%(l@ob7x@^Q{Y3sy?cpbR zys`ACR`(PSa|I{miP*Hv=$F<-GOPgmE0o38obmu)8s?1dq4m18B!9T}$e+*@M-rNt zShw~gWT6*Qt7c2-_2;FTV*N;$beb5OHeD29t)Wg!iNe>3O6b>AW3<|D17>%93zA zm*Lmys(Dvnx&@3_S^>r!0H)=8f*`H#b|)jCM!TTqkkXP8e&Aof89$BqR3~`-V|l&c zJ`r#tR0Z632Y_3vz+ro*TJ^^Z(qFCiJULrZ?)&D~?u-9T9^JCi56b^Q5I@Up#~XZi z3P0`^epMA-B87j?qiV;qPOjMcf$jLwfOeezuG6jRK5(;LaNi&W3_b8r{Krgf1?{fS zg7(t^(4KOkP3?nrrrYV+cn8|@e{C*G`uf~B&R7A-f=KNJIdDPzd;rK>6i5~E0-QhX zf@@{aXxvwq1Ma@~PTr(}wPN}%qgXz$yT1aOtn2(tS)NwUchpS3)LqxNxe%)q#MC9r zd@0%=(aQqm^6A&aSYZ$=%0Wj7Y zr|>1Jl7CpQA-s_paE|QFDfh*Hu5g~LJ@y_Cl4t$EhP*rgLDwok_*HN+f~0B})~`tc zN&gxFNvq-u6vWi35(RDGYS}RWTF2uGJCn!+q#ImFOB_fKJS6DWZGXH>0ZVq5-oU1{ z3;^~$2bjC`tS+aE*$yz4-Zsd-Rws85s!an2?T-V%%u`^rx+AhnsCGT+g4#=pTE%J_ zJOkB`jp(uGos1Xb?7#qs-QQNTzV;&q1qz})7VRxD5HD>5O6*Z3x05re&Cg0J+PxgW}fXPPrVX+@H~gl~K-e$}N?VSswrOKbN(n>;k8ibti%8lz+x8 zzn_%;kzGc4)o&4`kn!SvpB~VQB&Rh*0LXiJvc>v|`<+l8~zj6Xi6ri9z| z%T=N9ZB+ljYG*nm*>m&@DdAbF>Vfq0lL1vf;y@YeRDJZUAR?Rr6lV?VXjC|qK0mD0 zK23|NhvY8_Pt0ExelY%H(3QVhtG$$8?a>eTnE#MgE69)6@<-98^*pEs44g$ic8K16 zAVoDmtGms~DE(KB&}xIENO!)b+ez{3djVeU0$eo^U>X2n*4V1!!j>wmd)O7A82>?M_vN@7O^pIYUZb)Qc+y^rHDuH4R2e(QfM!RW!^U zY|4`5&fvwuFd8YcOOMeW840~}cIiF95YFH+A4!4&mV56K$>m%8{a%c}>k@*CFg`_^ zke{bWcStostNj%j1rmFQV!5EHQw5Six~l4jZU%mOtNMaus8&_cmNoyJAs`v<>21sH zWKf74IQsbm+VYa=kdVtIL1Kp!ukZ@ez(Fe_i!+a`Z@Pf~qzWWg<*LjB z$M5F;%(GSINNW5S5?wkqGNJ#wuBU1%ciMWJnl$Kzv3a{|zPYPc5x(5h0PVyk+z+IJbA z_$mIV+3k|Ki)Z)Z{)Ya#H)AiEyJ#8QOUB-La*3)!tNj)wqzO#C-g$CA+3b6%uWHRd zA!T`AU3P)wsQ9NGEBbS=)_hgh|5J`|Uk+=dp>U>=hqc!8frFlRz3X@~&cwgL&(@kC z!}znEnqI-1KziHyhErEmsq`r?HGfAsc2E<&K%DeR1Z~h zh=Uzh9{+JtnmsaBF9D%@)4G=U2+*gF_;Sl7V#9Kdpw&ZTB|BneIr{lA@fhPcQ?$;j zA0nPJj*^}tA(ru_{pYopvSUAajJT++Yg1zndX3k((pr}Y^i-YDUYho#e9>Oac=Bib zdOtwIba_L@lTYz772`zxq_^%&B(pWnP190e?I2GBnO{Q4ie~@i5_R`;vyI2D^>ZlMAzB_YlwvVNc4;9W-_|!BV5aEC0Gg z0&=C&&($~CqZ)?S@7GT>M$bnhe{JeW(chgF^0wN?jGd?p!f4cVdoaPoig2g?Zcj~j z5B=Zz5B?C9*~Shyf^|lGDCpfHiGfACjdxc66Gpgx*{OQe#mG0Bu59*E4`iedEg?sJA3dw7(Y-Z4wE zH%4h-ec?WRC)xMf)0*BN7At*Se>YWsKU3wS6giyFpDy*9O5R5_)!2HkgONLWF;clZ zg0PI}P}d}(JTR(ZRQ*ByWMlL~G!l2PQVdqwFUE>iE9%Feg&8zXAu#kkP`O)sxSa>? zEp@K2hoG5L`l^bBfhCw=CRNN>ymsZxgoBllE>`YLaL~%-W@UhUv2l^+gQ~r@J3g-7imyp~qa<7^~a^osz9o=yjU6HMcvr3uPk_&!cbG$WNw7k&tIsjFSQ0 zLV`Y?eAJT z<5f?`E4_E(O?b3!mJn6?`9!#Y%!B0HQuEP4p5F?6IAFYiNky{u(pm32fe$P3Iiq)s zM>p@XFlmi;X71ZK`9uk1Orzd`L!9K^iwdRGt-Y9MoWa@IAmchmYdYYcZqO zJF1&HQU~q98k3prv1c{CH`F*Ie$WP;IlC(w8HIzinv>Oy<2}mbXwwPD587zQ588xp zGQJW9yOH~Ql>7VKpdk%a0=aSK7`)NOY6Qd02w3IZNY~W-a<2={P>K zZU%^V7Z){L_peza7?(T2&&rvja`MG2#dU5T_J5I6I4lEDrg%^*ZL@l04VJb64i_5T z-ZkiQrnPt|hVqwK-8(yhJu9}d2TL`sag`EvwS5VNbSuf*H5I#I`cxz4xz)<9d!P4o zRyXsRE5AFKKS!O|p{}_Gj*1aXbM@4iDO!hRA2DsvmH&`tz>WKxLqqU67aAfuhDvNK zS0-g?zD%PvR`H1n2yGUA((AuZg($#oQ7%nQ-;9ud<?19{IzEYw#EV4=R=pv zYxp7)Bqd#?&|xfMN0HDXk|mFIhGppGz;jCa#f9WW_gLz#42zHH=vbzjxA<}LbYrY6 z6C^k*t5)3?`a8mm|7HgW5b8`B;$kJ z{l>lmZ#jcuSr@Pf<*Jk--ty6mSJvEd-e%k&VNe=U_r=@}UEC(H`b0xWz?L6F^T741XoZ5^+XQ{>6!=NG?^H5<~EW$a!&mMj*i+>_m9rg__=1ns<)n4*002KH4AH9c@&UUAR6E6JWtX7YOA z7_O1b#vbj(LA8WT{K#DcA6Z4TTh_ow^*i@>v8s)t#r3z}i;tA13*(J@#tppIk}2d^ zGh#5{QFlGlk|I~D3A5^Ix!^vJbWKM7BQ^4NF40QEW8_1J^Fd9m_uWY~I0%2(!iS*O z=T@Vi_pF(rcUP}TtIt%lW0$1l)^v+K)S3wnf)3)$T6^xbR8h8X*Y`&2(-bX{%YpcQ zhKXFPi&){`7*^|7Oy5|=-_X~=>mNEgf_1eX6unTUx;Ohpdvk2yeDyk%rp~NcHI=}d zr;J_BN(=`~ao>asK=kUG{YhTqJXeiApXl~=TXO;L6;m7Ta8I=esy#-RTF1t00`8qc zvAKJ)_mW#7l1cgjf--TdB&DrkeFcp?V=Y2$R}~ojUCchk!eF|-Wsks%e7-q&2cD2y zROnYpF&~#RJ>i!P^$O7dhUUr|HW6FXKM5eh6<{hNJC^k~ zqK`QMjGYjmbhBiVQGx-U{b9w+In<#jbnHn{-!qQaoT?@1%&)0p7Ga2SKU$#H1c3%% z`34zJD4R=rytO?E8srztXHPL3a$S%QB)sU52m=8{yL`h*vlz_>Rv0VDL zGVCqE48HOsW}u$<82*aAm8YgV_;ask<)t_bO8jGG=IU$}{T(FHs^-wO-uM}^Cws2_ zUXq-;Ja=D}%r8@ngDx}NKXHc=7A!y*o&42wj}tBuonf?0jAqo?xxj?CDDXIRoUolESv7l^q{u@|O(Oz*I@pj_Jx3qPa4V$!ZmR1;0I z@i&j57u87V+-50Jd9)um7upp^-!2`HQrMB(94k1ZcMpL$$5tj{-+2O0@Y?+5n)osz z`*HKeZljg%Gv=l>hpzVaj(QQ&m(B4&~V^8@DGh5fY6A@p~{&?zM6-3uKbMR!{!LV<({c+81 zX$FBrzKp?>SNem7FjId$D{D=~vICP;v!TD!;7c%O%+`102&)$^P$Atkv;@Raj9drK zehhlNYf|8yHJ$bi>gy=89OE(T?f+oaJAq#?n1C{hHdYe8(Ld#x;i^}VP-fPtadH3IT`ulFa6lZ5j7&AH3@ zS_x3|dqT+F>^)D?>Fo+75eZExUYYKckGjV2ap_$SRJvlAF#6U!B9zfQ?G; z`Wl|Hh_IrlZW)6fE9~`FV(0?b)K@S%}2TA;7xrA2+FDegxX#x!8qIF5N( zc?x~}Y5899Q8>LNDv$C{HuT*&vcc+WCwe0HI_QqwMUcI5I44{)&s>NeKUdpmH!(II z>2qP4gvDrMi~sQu%xk8<3|S{GgLQHb{jcmy!bOD2T*KF9&s>-PGuHM-eUUjePjy{X z3WW6#jze~uyK#MK7Oi#0`1_C3zQEfUZM5r{Dx@wuGRfO!k1)cxQQFpDwT1dz{Yy4(@;h55_KO?_j&%-F) zWhva8vjt!U%16#2NZ7V8xeyWpZ#^TFU0GsA z2%MMM^q$|_tXKI(lP^V7-5~HnRcu3!Eo2uhJ9{Jnm8&w9iIR8E%W7w8IrB^bwz2kR zy*tS$&yHLJu-NyGvOtLPm4m;CW)++i3Jy30xYPPRK*g7GIsO41O}M`3lkE4#YvB}G zuJ+|G%SJ3(HfNqWTac9#;b4{-eec_Y4lXqoVlF1SGtQ~)RBxouB_@zdKjK*H&LsO8 zXL*^6)WnNq)*XSXXXKNJSl)8xY42S)baenp)r6gzD7H5!(P?!*p?1!)vHWzF0)ZHMG#{!|fp1`3a^zC}(<3%(%kzdJD}r|H6GY=X(sez#Bi-7YVT z^SS#h?>-!HXQBOBfmxUJ$~S1UQ+}|V!%~8jBC^gI`lbgL>`|Bc}u*Bv$oi2dM=qx7RDGnWy-@+ztJ-U@?-cV*%dA6OB8_FD0 zo~=-ccAfPN&bL6t$FPA09cXP{GuQ~B?Q*mk)?6X@v_kO7i?=)FB}}ixgLGwPES(7E!^w?E4V4-@sVrzOW@ z@>-XO3|h7;!`vb-%Z_9iugEv}jKLxOLRsW@TZG%|YmBl56f%h=6JBe?CH@X==}d2W zWCHepmqynQUqM_??8nh6gceMrW~E;3W9ySS-|A4$UP2S}vzsu7goNaMOrM0O>@^Nb zlJV(3!O7MjO4H-W>}bbOs1~O;Qslo-2V>ao7C<{mGkvkusd{6oeEZ!B={`OPbGLp^ zvY)nQs@yn6NQAH7`hrSR%g37Ne7J1u&sE~oBi1mLB2JA4O+C`**l2*mGu0LGBt6=@ zW+W6OF(U6cu6Fv&#dLa8~LKz`Cf@K zg0l79pvsS%sP7t=c&p|@>wET+vdG_Ck|i@k;fdYX<(M+Ui#gOod>&5`zYcgI=zyhq z;9pr=!rXu;PJ+VXVElv&2{e&~gS;MheP4;3HE(0lcACSIpMV@%p}$F%Fxpr8^rWhG zGk7;|2Vx5@^Wp~}!Fkakg=d39{ozZ*<^_^nZlaQE9CuvZdD{pxW{++t@f)pYn@)#^ zHpcy2M40~A>vRFbvOXGrcS90!iHuU*j_4kGZcdzE8OF_kZ7^5z|-Vm@0<8#GjAdI zUgXB9xP1r@VVYK(w~m{UwBf77ysLc9qt*VATFt^&&C=&k85e_D;nFI0i+DCuU5*p* zai_W7-%_|)8fbnIKYfvB&B|v3m76!DnqSU9BlbU*Rc>apdcj;hE)c$PTKHRu!p$~^ zApLKiwLe(ah@*`pY+Z8VL3U>xZH&}*6y@+s2&Ua{GuL*^WcJ(H%7e7u#8K#O&YX|S zPTInThd&^nNGwZbYrj1oozL0=c@%dR3q~dqQVd1{y}4K8xqLuk?07WjMfz(pL2k~d z+w0s^8jCtaA>24}8t$sh)Tp z&&KK8Jy=XeBv6=Pswmq0y5=X)TVrI08nv!;2`O zipLQQaz$A7@P|vUxMM8Rd*2;%v=@`67Y|-Jv;e{@@g4=9{Y7I}LxC4>koalzZ220k zTl+bKpcae%qQ6(&^j@m>jP}x+p@B2iS(xFdg0NK-OjJOqT>}7ZpN8_ULZ3*_j8Vod zL_)jY6S;#k-->xS4l&CYI?>&W(MLD#$cV0=?O}C<)yWDyT0B@-|Nb#N{M?DSnGsw% zpR9)^F*HxxV-#~DDwE%AduZ&AG{v_8i`an!1ZBegAk>&=7Wi?KAu>FgQ@9%g6`3<8 zBtS{TMaWN78L{Pu{=F;?GFT#C-5_f&a+z@D;2kGsj_`sL3ms;qTS0R4yWGXz&z&;# z@!{zVFr+XmF*_TV8{!1|&t`)MJhN%ZAsJ&^7Zapx>9-RT>S5owTD zq^){;!us|JkqJ8TC`IafPq7$c%T#BOWNupK14@cAOk&-5fyTgK7IWIHlw;?BbCWaR znP-DuFV3x3ux|z4h+NO~NmGLsl3Vu&ISd6>`8gC|10r*u;S>`Q>*@QII)G9p?>_~C zW<-8WqkJ*PVXG`XB$mK;&Zz9DTp$ihwC#h@+ScQF;;klk*}inhgo?O%?u4(RO>abH zxs5GTKOn?!lY_>Pz1J%FGn2XE&{D(ykk}*VF!76tuk%!N>GW5mhKRUT0BaRs((YZF>(GtpEyzI#7FwIXbCcEC*@JJdqC9)FTjXD)$V*NU zKfr=#eaFS(x{C%x41O;f4cL?o@QxB4OC+okvO}x=y}+-=hNJculE%re1eu^UY>>3W zXx3`wz>RN9V#W~QL*bpUJx>URuYJeiD4xI-6F&APa!$5~^g(!3&cnOvj+n)1;j6Wm z%CC!lZTbasZW`05z*-4mjn17O)z>3mAXs|ZQWJ4@(N%<+ynRw^{#7`h=HBWjupP=P zfK{LfaVuFS>GQ`y5jXUjCiK!K?Zun9b-v5T*{JD68g2-n4zX!tusDdE3Y4A-6V__s zDD8LcW_YaMynAe#_J;OapeHhP#v&_%Ba}=7;$^4JwhwL@%)}l*cGMlGIhK9nQhdp9 zNyQ{H=M(uh!;Oe%F_;NEtwm-s0=bLkTFt2+3Hop?ZYaNjTJ3-E4xHOYLq03(r|#8W zETG-D`4Eydb#Ot604}^ z?*Uc*4!B81*)MyT)`cQo6=^L@Im&? zn%&as0jHu^CA_nK>RzMt>6XHu+$Rl6Vs;chr`5i|3!x1i*KY7*w4{Z>f>o(|LN)wV zv*J10fU(`zsH-6~QhRak2&0<-WPHX|@sG{Ir{P{3GXjxkEANh0{@5G7w7np$J@|=Z z;=1PQc29djhHLMd#RV#6RVANn7!ETNNUP4!3!hEW8`H4*<#M3(X?C7AYcD<(gqx#g zx1Td2q*Oeof-<-xeDA;xZayufT5T_7;uW>%C2&;HD$=^bL(F{fDt{emg9;A~A~^&j z_&V5Pe2{O^t>6^BBUoR!i#ymUv9*b1jf;)S&e*HIF4nJja@HP`t4Oo>v^f`!ctz&2 zw@MloWKGfE9Zf`5t*!%9oDJoABk5;@xtUt69O2;|L;?o;f%a2H$Anfiv#+RV#W`@D zEZSw|cjuX*`7JgsQzX{F-xtR@V=y*= z-qXL^I(zLD6OR_*`{nSA`DU`YK9k@E!^H&|4upkKqSvw+3BnU2p6-;hQpU_iQsIy* zI>Ucb2hPNZ(Hy?&5@q4-O71P&*89vnqpPJzij_7%KItSr@L7oqJ}Yt7XC+?!S&1V) zE79{=i8d6^ZPKFnJG=;<;(u};gz-8k{J=w_&6OB)9c^)VZz2w;30K&`ps+D^%m_`? zV!NDY74f-Xw0ScHIyoVTyZFeZXeT^SojjwmbLCe9Z>Xbw^;H`#=Y7q1`;x#L)${OC z%uAvBal;@dGc&Oy!ujH;?5-kL-++oxc%t$|Bu!xY;2TlS?w!~lx`w3p>JRxngvDsH z+CvQebhBU_zB>cW5r5##Fs`&wvV-zGBoUq|B4836dEPXd<5QU`Iv&lmTDg>#)y9-8 zJUU}x8uuG**46*TT3L@DN!$t#U?1Eo38X&C*>%NebM7S8II_M>nyp-CiOWEiY2sGe z8qtK6Q`Z`c;@@Y zdOVG7$SHkgdoljC5CFFK6-J1qK&kTYZtpFxUnE;ZW~NtWd%$4TJ$R%j6jdVcY3qfz zg)*dho7ozGVg?8m(8C%=pje(3=&HPC#)2AunA^ECChBELlgl#*>foD>j2o4NE^Es> z6d&&8P(-go?4sG#PYXHf7d~44g!DWj&@mMeCbaVE--ZtM|_sZ$H4Wjjc5VgV%Cy0HdgJTH?_A}3jTpw?T zK{=&?Ic5ZUEQUwRge%4Kx#R|e6WiAbrWJdD!tw*IqcvwTj5Bb$ke4_95);rHz zdOxW+NT~|E_uy!Aoh%X@=S40F9Il>*`o|k< zt_>VknKn$S9v^sP<>mI6z~K#J@O<;e%Hi&(>LDs;D$+k6s=60>G#7z9>am?>!9?>e zynLNfD;Bk(QVX`Ta*B+~+vbLcl?~E)>uyAWtqlgt@h&4=1+R`dZNN zATqN+#UY&as^d;)Bsoyp7XG|k{)H=}~qg=!?c zlCT>4?4xF>n4D#@#Qm)J3^~Zlc?-#484JFjG7T$=GcA}GY3NuVX6XwZnKz&V;>9qZ zDP$H*0cGG$U+?#5bp}I@;VbjWczfzu>pDszB|+pONa@}G9g@?jNRB#Cc0e6DkI@Fo z%KaOqt+W47>@Ek{P8Glj&Grr;h!|Tq2z7K9i1IE+DWS0CbVANM2u_6wKFb)$U=+(3 zNCS;x9CwX2?jUJ2&TcWH6_3nN$bLts|F<+!Mdfp?m=&3p_ViOo_SDmQ#zfCgTZuy{ zJj88p^d$Di5482j1}6I!{OTO>9)cisGZIm`uxP~>u!_3cK!jDTR<5~v_C+RWFP3?0 z53Cy;t7r>a?_5e3G5K$kZ6J~n-%KWV$AH&F?`UBDqe1JpZvLZsBi;+o}iPXl5 z5!Lll9u>>{s8}ymrz7F>Y7c*oXYnhiJt}rnl4_AEre`gMTLiExNM>M6T+%_-B37Vf zLplrjt<`89a?|zU|#HR_=E}3c@R#&Fu}ROK_om*3&8#JmHGvb!*vel)X&K$}!ar zsPXcIGZ;RpCZ5kH;jSw;$55B6c%3UHUI|>s#8~t~P#z8i4Y6_GJ!im@lzFr$LkI-h zB0)*k2hCOEye;U|7?C!ka*y0NR_yVm#wyzoxiQ6LuScgDH8uZ4=>_uX7)!!S^JD}{ zVODlaQQ3k|Nej}1HHh)b@xU#koCR2K+^Y5vb{e@l8#@CpIGHhmLkNbCTEkh%HY%5d z9K{JU--2wK^5Jt*EHuthSJ`>)fUn}{THNyH1ol-ALDPCa#{P|Ger1&Bkjbok-AFY< zL2=&ZqvQQ67N3^OV{;RM{gGs&WVxMYy^C^$v9N!iL=%TahA`fm5wR+lnd?PgCF6F~ zhPID-c@!P@wr)Ci-t=$ugjl0&**M{DV(=y*=;tVkCyYa{D=A57C*FN;nrNRCZ&!%4 z@63=8$6TNmo_2-TMhHT7${1HCpzIS$jv)7v;xs{+r5}oqT@Fae<|VW3bLJ04EflBC zDxrvkE%(az1m9E@PsBdG>oX-4d?^Q7%_I!EtB>bx({8#>aZv z)C2Lqe@?7Lo|o^#%(4t|QE%Rs%{_{*V4OX;rdtldZpk$JJLiIaPYxWh3df<>bZ?fg zc=0Mra-Ow1l*u`#dz~wJ@$hj63HiaQ?C6DHm6l&nof^GRuz7Y>#^#WnroR@<4{Gyw zx%wDFY*kDx&f}+KGAyzxF&|@Vx4yMeCPVgRMvL_`0XUnW7xLO=dC#cpG_*)Bn;o)W zA0Sf#97k8V&gr6=5}AlNFTdq+%}vqnh*tZaJZjPIe+@qv?S3$PZ?t=&9g220gjcMQ z5G&p52<=W5r9l?${E zjeD6Yj6Im?=c%0VvKiLPtbCkjvzAh|?X4)54wG1b;cQ;akjxfliG-QG7K-=$>{^0_ zV!b39OH)Jx5{eiVj`5Kx9ZT#{(Y2#IFF*U&&LvxaYIiOX&z_IVM`tP+2k~QwQXtO2 zyVD~X#= zK^3l<(qg5bSSyitK&~r4nIS$p)oOUxvQ&*4IUu#}i$vc_Kq=rsr^f zkAB(XvcvSb6PGzB9JizPFBgZuWWbF!(Yf;?@8G2_v1K(fWtB2ko72VpCoW`XG>3+- zKt*B8_X#tp%{gtXn%Fy;^_fq@oG6Urxi!Nl_gz0Br8@Pe5_4!5Zy+X^kW}!x5 zw7KD(t@EN(p<6%!A*mM1MG3nQueP2@2*Quy+jI`X)~a1l_np!A(!%Ktp=7-yxn~co zTxgE9WM>b!q{8pPTmd0Hx;`rp(^Ryh5GYYdSai=E!bffv` z_+QBbuRMG3?YAx&KEZ~GY7_e#P9mHY3y%_bKtv1U%1|5C!`|K=}$G;b~&QaB3|J;wWnM zV3#TfsqUn5Rz{ldI6{T152X=TYA}52WLgqADsh-*`?qDPKkQw;TFj#$q7Pw(fC-tDPQ-LRaK;_9y($GNLFZ}@nUN)JiY|#4d%jJf2G@umRB? z$q|fpClp4rd1l%DSSsRLm(!lYpV7q8)M(Rc&(baz<63PSFHYOI-v{NFQp&+JmRG%~ zHug*wy{@Wt4pOEjHlZwM&J_GJjm;Zm48#Yjp72yxNMy0LHS-PB)eBo8^j79#a6D6R zY~CP9Mv>zAF36ZH(PD;^b|t(r@Mjv0fshkv9pcj9Mn z!@r1ppkv0|wAG8BP1+$k?ON@#{MFazc(iZJO_#YoI{=)yncBB?UWw9N+OcK>r*RR# zz2R-lI>02BGg=d8v}WV5oUlJM&RhS*<_{UZ)8Ktonz5dJ>nLVw=I{+82pG*B$4~}y zYGdwxU-@X%1b*d06qQq<8i)+ga6?|f`bPE9!9c!D+)=8TcJdA}l5sy=!3XB+Md~ty zSTz?;LAiXbM5P++U8fY$3ilX=o5RR_rS#;&%>gD>;p^2aBq73S>yU2+hk+MF z>!fv)H#O@He|!S9$!CHr5Z$uLIH*_*;&d%~)m-!{meL!t7>-3-0*e|~rW#GTAILe5 z{QSj$Cpg+|p!I`S)DBl0KOo~nh83BCNNd#{YV^Hlvl23Cvo@sF^hC+9Ds{X3i2i8n zroiFK6v<(qMQ|NyU3rG$GF&iY)^O~~jGfB72wrKOd|8oc;Kt7BQR(Z_qqXCpw{ki? zM5lmAzb1n#l&fKlIzdICO}k~6pl>Hh)`L(8M9J>D5;fq`*K^xo|2fRJ0jcu!+%BP3 z)jLG`z32r4@8$iLvW|pA37eeggxF!(*PE**VZ&7JH$G5$1pbL4MHRXGJVqy)C!-Ud zV0<|BZ0=6IJFP0u$MsFORmdi;^d`K%ta85{K-&w~A%|k~z507vLuUPg8$@Gb-6-RY zSm_~kWevT0-kHRQ35Z_U1`v+`p@9RJEV2AJU*?M<(g6(qYNw8`-w-D*@GVytD?!rT>GV58X=X&qj9NPDg))t(OV z7Xjk5iA`POMJxaq5$_@Ud-a-LVD>Oqn8bA%{`ZwYiN;Pn(4xz6SpK!>auSw*OAT`l zkNk*v9GzEqbF6$tFMPQ9iWDj^rW>lXcaLp}q)FkkMVIrl{L^kCE{ZP4XZgpl|89>D z+HWo=#n=;gt18=kMe-^*@}OH$+p0V3f(g0>wVRr;efBnq(9AH!IzxLxml5?vI*tF7 z!?%5Vi)x`%(_ejm)h)VI>3o&)&Xd5Gm!&Pb^cEgbK?Q=qlz*mU3!;ob6d$AxZx_uw z*(%WAMOPbH1QYAr%RPyjgvG89CJ1nxU-Xx7{ZPtwBEh+s&U2a0aXGG==oyljX+MZa zCjaB;##2io|DudZ%27?vHbXf`k9cY3;r+1WSJnfm|*%K}-ZL!nh?4h99CY@}?1|P_ zXg`9dPq7`W#!hvq4}rG)EI)HC(V30P*TY{ypR-gd>C&yX{}A? z7nNU;He0(smUYc;q1B!i6!vCD${fU}DwfXL!`tM;@L0w$c=Lxve&KD5W&9Vvu$Eqq z_%BC!G~Un(P6s}8R5GnUy@WlG|6|F+dFmc2F`BLYByz9zpbYIfX|s)_!&oJ14R>$p zNiP2nXmzpPR=lrQ!+dA@8K{|#bgqnI}_d%(~*XuXs6*&|p!&jCeP;byCdB;&L& zwY_Q??j^@Tnry|@Uh1f;iL(T(UsNA18Udr_)4l5J6FP%DtLcI&Qes3O#=^I6f`nKP zDEJIOF})$@#c&7qPP7l{(q}_+dbfT7*grzwtp|CM!;(xOSIVl)Cx{ZV#lseFeE{3U zB*4x=Ng7>Quh1;yTlXW7CoUW96HCP3E7l;Au6Qh^lfJB?GYsL)k;WNL(_>3ma&=r;8FruFl-12 zW~ZHtbjJKYKt2CfR0ffB*vE_P{X%3PcCJ2*_0x^ew2Sv48O%kQ%aVVHL~NSgIA@d9 zjRc8SAs+YvP1I+~7tfBx{N>tb?VOfiSvu)U_3F#HZ;KUYFKsEloRCL^St|yma%paS ziHl(|PblJSgnmM14nw5Y#YP4z8(NRmN`kWsRF* z5+ho__17h3*pDKj3H2;%9G5I6Ez0<%_sUWYGKwhNn`c=5|73&N3y(i^OAv?<><(d1 zxj`{BA~$pU{h(jzei&m+Os<1|Oub{br|Hdu0z0+RW@C2dCT}R1RXzvCK=!wNZ@VrI z^j-%GVENBtZ}=a`+=w4(?2AwT8wx-dFSJZ9%W$Uhrn6a~$OaRWNyH^gf^h_K=IQ9% z5q>*Ec~O97y{2xgnAiTk2@NOV#3d!@RI@+bBl-s6L1%*_U>z3O-=X1-2-HDh%>^;l z3SYwLi~`nccjHLzklmum>bCGg;c~s)l&%>4X0o-!$y7IoFV*tW8eduV^pL zohE@rTbfQJ$=MD35wNcOI+NQ}{}uu`%o~;jGkE4{#C6^SlH1!V!LM4pdnL_}YHW)G zgF~djrCwnt8pN5H&rVZ3uH0AjjR&Ma+tH2J@L2Ya^4Pd->f_Eq`bk`#bkVxlg5f1F zESO%17LA1=g7oLwSXl|t4wf1#rp<@8l;y-0%u0g9kZ_&%AZ20gnDntfN|=-B zFzHYva~116+vsk3f4uAm4|f8YCXWcL^%KQmZe}1YJez<)GqLWq|6-<0-Mdw`ck2?T z=9^3`S=VQKa6N)u)AyyYK_Gbrg-FVwYzB!98Q}s6CJ%2kMcLVreWaZFyRmyWqOUnyr%8ker5&810(l}xPWggfuSnw zh8*Z!hZfEz!FCm%?Gg=T5k5{_J8kH7Ch!r4P$-9XS=iGijG_%pcZjf;RL4U3(}RN% z+&=tKof>D|B?Vf@4{riXVEu|R5`Lp^Z;};(EXsIoD>5R6k3y(}KJRQpBhByE3-&;s z`ej0_O+)QHMf6D6^dW+Wf#t3nu#sPZ`1;Rst7Wtj7;Qh^SibUucX6jqGa!6oj5k7G zj~cvYeoyXP(b6(hq;^?T{q}vkSpH&vZx(Rm>99Hv^(4*~C1)}hh!(|(6rP(4|2A5n zX0%_m)@TlYA+V^k>S~V6qKt#4y0zq8>P>{RxJO&IE8ABr_h?p}#Crc_A$vc7n*AxV zlKN+3`K{VZWkj~%ig4=Q0&KbUojKN14)M>zo1sB)9{*CaJf&c%QPxWf=@olIc@-`2@5cN3ws zhLZd(8^^r6Bzm69#pwB@EtSEOOI|J_MJsHwHLF@x=U7MEEivUb17h=XP)4)SIH&y3 zl)C_f5@mbH)C9KR>AnKU4X%41^0yQyRuL_rM^$l{0HM@ZLnB*iRSK|hOjl&TV?5zh z&~5*6VD>DAUSeFFYZYz=C9i#)TZ55zoNC1d1UiJlQ8l}zqXU*b=7Ol^p@;#CU85E+ zOzC*-rTHmXA98V1(J_13-bqM2p|9*2r>zCtEsFHgWiK5j2q5F4Yloo$ax@%@Rvz_+ zLskd`#m_%C!2GXabR@Wbfc8E9RV*-+wb7|jh!eMwLK!i0UQq3~#Z(XjX=ata7c zY;MOFVh@|>?HQXycB?mfT_;C2Y+#1by2(vx!jAi37Ezy3u`J3q?@2SOGOP!?WWqCH zwc2%zP|QDriQG^$49BZ={{|AMLpA`dZagnD7IkR)gFFm$u83nf$K7OQhwEJNaRe3k z64dH(eA(|@@x-iRL_6(9Q_TtGa`L>moYZQ+MrO`2CwjQ4fiu)XVu* zYzUI-3ljEBOfy*9tcZf7COchy@ardM=^eiMMMsR+n&QJq)=&6!Ya-PqEjpsdC)MBl z56afx^@(vIK8x-RZ1?N|?VhKcLW*2&;uy{$)G)Gy6VZ?cEsl2bqF)9p#p#9h+_r*Guxd{7#6M&V@{^znTHUDLad}IPOSxBjad2#XQq#MbFvc1@T+$*Y zWF@b;0p-Ef_h9Fd6kCtA!1>-d=EqHf5YCpo>^b=2^5kdCuXT{|6LJ=F;flWaQfl>tZuH(mKM*c&kQ=_ zaVWl>hD+CP9oY2~;)m^^+x3&_cp2;M`jOtQPxyc8?SJ(3cGCZ%xAEmP{QtVc@h?!y z*g2VtncFi^8#7Lu_hed+U``1gU|lY)IXN?JY0Ya%Ne~6*!&2j(OpYK%Q4UMoy1r0$ zVNAh${a5~)4c_rz8RTf)x4WJVW+vfmEV;gHn4N{6$YFtf;X#W~z=#*HW4Td9*?+}J zit*O7!@^%XyW1bZm1Ag_@!?W^Ze~)=yXOSWtzl7Mc#byP8V~<Lzk%=JHcvSO!9mN3Eg%=} zrcFjjd7}C9^MX^?6OHRVMM}oSbnN27PrHTx)K~bjfrTAsLz!~9k31Noqf8cD!*|6u zOcd`g#cO8Jjg?dKhqxpp0EL;&b)O@r7k%5h5*|o_qTrC)&T3H! zl<+utP|MS{D{K9AoRjsgD>0lrUfhsMJYIkPm64B$X%Dl=@f#r~l}ID*<9Lb}5v{hE z62?2m1@Ui!S7A8B9I_y7N`vT%7}Wm=3OZ8cI*Pe)8&FleM~s)mN!ya{LU<)VuP+!Rk?Z*ENm;vfg#AR(lN};&+o% z?+R4isdp_8-w-eDE0`0P5o@lK7JK8rRnO8FZ~Q6sEZv(D|31&!_F}J;PAh)i8y^Y) z5|W-zLh&r_;VrhXRdU4c@Wx77#fEqAve(j$!?C;5T2VJV37Be{V>~JS*J=v^2r#WS zpNIIXV;O{PGRmUHqXyNw5%$VZ*y2cCCn%H&Af=r*nFA_W-=wcP7h`v@?9=Uf>ON_gjNQO?$@@RGOA3B#ZGm*6f5=`b(sznCM_m~+vF|&3t5y0TIxpgLeD(QV)B%tZQm5U>aR-zZIN-> zi!~u0^E2z~rc3!p3IR+!q-UAt2~|$tCS^uNcEzvelRMR)_e$Mr)-O}JQqD#TfP=G& zTI%UV*ARCYSKSMurq&*CkP}8NG6^l9ZHoacw?H1fCC$!&{Hc^pdW+vsPjv^@jX&4c zTnBHHxJGzgwFb_;ZET!IO8hx$a*`VAWcoYF^(wo)s<#be+&26j6>ulFlh3}nuRRl_ zJ;X(&B~A{folZWiTk&v)aLjofn4xd>IZgDKb<(cEs+F7RO%89U@flt9YGp;YDf$r3 z#YBCZ^ocBLA#7~SZ3(C;VRUJwYN9xkOIL{#t8Oy?Aag`13Fyt~`e87vkS_~Gz9_GU zs6ub@HfJ3cq9$q_U;3*MajkacD8W-1+3aDl!lzo)qfCeGMQW_nz!TamVe~l1HdFP$ zR9F_;C!$M!b=L&93Ps8K){pQq?hUmTgt-m8tU)pt@`CmUy@PgLN$+@ZpwDe)!RExq4ZXQxoUeY|&`4IpMj6|Z z`UOM1v$w*odS=^4-3b#O)S#yK{Q8urnqHpp6)rY7~+SiDOTy zc{IvdA;&zd4u=3cADjuB2w&zN?Z=&iP-6pdS%WG#IpKG&+ z$?A|qAJ@)4l`*vx8>CedDv$4W@UA>Pz5;qEK zR}Vi11zF3NYuY>9)=xXu?i6-DOqSrx4~>sp+ETZHeC$P-vqYVrS_48D|0PW|6>iLp z(ti$*A9y^ctIsvbU)b9{PEkrqQTZ9vDz4WWrXD$# ze80F^#kz52;gM@rxX;JhR}MLH&FRmhjkxPxf_4A-$TiW6K6!Z4ccrUO@s+n9xh9i@ z5U(E`Yd><$1{(!@r?-8eN@>S$ZhC$J6T*5*Kx}JI-t%b?SG22@<+Ox( za!d?#lVz?P<4%5=6x(|&x%JbcX&(tH1E$Y2;MIiQSpUP~#Fo=DZD+2pRTco1N3e&p7QN^-H8;Xh>714D? z#^K2-*-(EYUof{xYoZ%w8q>7LenZ({LGzrM^?7cQE((>js69rgzsoZXazR&Bn+oy_ zm7zKnKd_f?o_n@eMnr9cp8dpM^6V-kVSLg-;<6|K?=_846=pT-ZhzjP{}` zxA_{EDHb4RVYI~E@15N}lI1WFo~pD&On6&+ko!F{qe1b}u!+u)d{VD4ykWYj_~d{Z zg6gYH_1moYK5wr2WMAdLNNP|VoKr5siEug>b=U>4t#Ne!k4bNJC6c6hv_OapT}v9*=|exFb=o_L1;lcQEep z)~C2FX;CPXzO9>xM5Ec4XMfdgalJ2ceIhmqI8I(PFpLZ4MyVsPQ8*#;Z_caYQmVGW zpIKn2FE}kzJ?rIQ(Gz*aDekR$9zkt$$UDXUWptY?Xb+K5Qm-v`3Is*eJw80LcXWpo zHy0=J+#!C~d{Tzmdm(Ts#rlDah)2Jc!yTx zo?(vGDshljdj*CYGn6Dki;d#h+~~+Jsp*!#T3si98=$y&|CIzp z`dVEp4>+#%*DtvAr;&H#aL7bic*?^WS_x`m>by^+tl>g0HZBGUsy*=^lF^Bp)wE{3 zTq1PLaz1nIpf^U9!cu)HROV;)ikWgqS#u52co%|NX52xPK80MA*kTkXwitI1g-^>p zL+Q`#d_?kYX1_G`M5~ae@3*;~ATuK)L4)biM=IBz40`_9?aPuFf#j z7GtP%GbVtYBhA!=_B)kDIiPknnR6!{0fe+{;~cVjWAYbk1)u8o@NMcfn1;E+hOx>F zD%;#BOW1TWA~#<;g6>Fom276p@7YkDzKQ2Qc67eTC4(ZzlhrBDS0upz1RvI)MoMnA zBdX3hyJPMjq`PwU85fn2-m~l%-O2hyycY{N>rr!!Y3=ANI_3N6XKID*$lt>kg)z@ZvBLAv1iym-=jgiGpkFYbvmj{?q2zL4_6&Nc-p!A`&aWZJB zOcPJ1#c2&nj%}R#@V8RpwQ~oJ_Grln|4nWrs*=oj5A$=o*n!$94n$}6CBh3aK2|4T zPdMbzOXCAHIL0=3IrL}G&fl>*qrt0pH0DPm#E$rAuKg}ja^p2ua-4g{IjGwuI3Ml-L@)gGHoi`|yRLdbO` zWH*AR`dofXwCxL0ybjsm4w1-*+`4!b3AE{sjOb8pquNp&(S|#$u{qJp9Z_DmSBm(b ze}NfrB@gBwgmNG`Z1x-Kk-KfR(-F~90ZrffEl{|9y>L5)Z#jFHv#n1(O9UJ>;}|1W zrOae`!d0kR25j`kld^bB^>?sybgVVVVm_Hex=$evr{_gszrCB97=; z#CjWdx*bIocLJNTEWY}Uf=^R{kz3gV9^uK24_T$g`3)1qHm(R)axBiv+k2Ug1<+2H z$-J29z~;jpAY4>AW8;_(9}(f0ROeF|HB-I$Rs_Th*|J zOb1={*+Zd~ifA~{^`<2KAU7pa#&}YOrQSa>p$a=AXR1W|38&-u-DpsF2aw+6ZT1gk z2;*Nz;H$oP@R*0mUtFE*x7VKZ+;V+8EJFWIHNE62GXh2tk2`DC;dej$?YaH2IfD}c)e}uWM)ny`E(Sl^BXSGm^pFd! zf;not?d$$Jf#)pMM!&m2`$-&rjxvZl)ffrtVk-Ovj3JOjUOk`-dKTp`zWy>tyS#8_>75`nUJ&rheIiY9VPdet2C@+wnFk^@fI7~q~#A9E@ zv$)D~_v{m#<_ui4hh%PJ4y8Pps5UsNeJVcMs_5EY3u925Zx_D7Z*LWH*YW3UizWbyk`7Lf8gM%G5Qv14!%wj z(FHtku_W>0zF~(^|6P+;(;emGnn~tnu~>s?NH<3skIS=tmAU!e0crAV4>LC}cG8AP zK6y?=%lM1!#g*pfyPacZC=q0txRJx!!bIC25aY6#LEJH zEwIvH#l6JM)?hux26k84;=jC>#x5qjk74?-Qy%>?{E>|rPh4h0VH_2u4(FEKmA9a>T6 z&|VySRu}i&-mtI0CWxi>;@#<3ql z67Fr_E>@n0)+^q;^6&v|w4Qm|YSuBBsAy{tGvW-RJfq$RvZN#qykRIij1Y!_(H(8n z=v}R0{v}$8U6y@7=5#Njo!MV5;Y-BT6(0CRpax^coXePK4zo71VWL@cCzbW-w8-Gd zddsmIsR~)!P6*0ZaT%a!qoXYU!35c8Khm90RZ7*CV&;SXa#q1L=GeLO@j^+s%=BeP zN}}_|=6TUl#P_nXk9XCBSoUSnoAZ*4f|B0#Ck{5mFp^k{i#o!$p=^@`N>FX-1a*C_ z#^YQT<^o-xBofOiI6jMwU%KsiF*9@IYYfofAL#)^NObEpe`7i`Xqagv1hx~vFTh-v)`w5dmU|2a2BrU zHH8o@ZJ91fvF!iiB+kCuVcoBqpwzTOW=gCoEjBmJwZb)g4MqNXZ1RcHlu~&Gs_lgx z+@ecVoGvE0)0D0!BX|Yf~s_BkFLHV@6PVvik)T$aU^P&^O z0Gfn-K;A``N6xx1OK`Ck8H+~q_WOV+oX}WMw6ukncqUI!hL)So7Ubd~6H>ywxdrbe z9c;t*1+sQP7h^r`~BtVxV88j){^is)p6Muapas7{tG0CDfg3YkB(BPAK0G`4Cwjw7+N-n+Gg9&Hz_TVFo!>{~{vR{K{HV!?bI1x*pGh4OsR z=}9E=GhKebKK%g)r>%P(@Xgqi!nfkCsCYV-=$MIiSiikThN=VO__wZQaeT=mcA}!H zex3Tzsl8M(Wock;-l`lYxfxO++sey`bVZk&5S6NJc7aO4k|5G~<{8k)1es#4pJuL@ z=FE=ZB=iW;N+|?E(Z%C>?5wG0&+ZPgSz_xQ%#ju|Z2kx=X$}=+H3X-l?wjw6;5}D; zm4!UeJcEV%mV_cgX++~U#Y?Tb|A z5NJb1oAR6uj`l~sXs+2{9K>#T&bg+Oe&51Og36d*F5!4R{A_4kG%_T*ezG^5x>R3( zc~W?2qIhCUamHXKDjJWA&3o38ZxGHp!nc~2*k{C5iI`a^`xEPD=ZGVax`mLUO|<&7 zH3mB;GgWazI|-~OJ^?$7d)8uOBl8ba;G!w9GNg)rC_aXKFzNraZiO^Y!AJ|g7o~?> zf`BQ*S^L_W%GQ6Ue;ARlX~aeYX68*8qc~x(Eb(B;^D+C4*zMDl=B0-wvbXJW z%$kXbDb7TU<9g*GB49QYwlc#m=P>3AFUM{hPvo6=$ih1=PAJKjne0i6W)2GZ?fG~c zh=ry}A8zrp6{irVM_l|A9?~n*h$rZ8p5vS5!K^QohFhWN%d&rZ){TyyzkF+yfT}M8 z%#U}lLFInywGID=vvUD&s=gb4(u6iGg%coP!K&3&g~1%RxyDv4ZBr@`td=5P>Sddq z{$U%Fglp3V1KQJLlx^zVUVY~_H`#QPcVkd0Vp~{S5w%=~MXFS-cxv3N;7S2U|DW&g zB&DeD^ZcK`&qj03`Q0zy`vp^fE1|P&{W;e4`x~C6q}b{ES!5KOJP|;}rSjehD0!Uc z#s2OR`yt~7d?Th1bzLvX)Lx#G<^441!fPrEIYOYXAoEUKi?RX*`ln6rI!WKzH*4gb zfti)YoJ%6FBMzyIoV>Q?JQ8_+GA#0;T|cw`!$_Zf|ItXx0HG=umv@)wfid}d)tI8# zM0whFE#2DpN6uWU&3}Dpt<*I|s$%N0{2};9a8DZ!X}Z7HylR-J$a-~BOIou5bd6R7 zNZbic`NYU+U+FQIT?iTYN<$XCf$V+%R)_u;T5IO<>*HyuEGuGWS$;T8rc=@6f>H4I zD9ngQJDk>t*O9!_%iQel1flaX)${EvP_f&M$71%eyWb;(nDP!uTp=z_*$tHvq+POk zv84_Dhz~##FMS4*Xco6oqPIKrB$CB9yR61DNY92X@W5R0AmvruXjkThgOZ>{XpDkn2+PJVL$qp9v(74Sj%`7cY+ zwyH1|1jPw<^9`pr$Q~R+pqeONwn<8MxA6JRoO(IDeqo>fk=JFNfesyuJ_0fh#8NmccmGXo_7v$fI1+vXV3DG{4VAAU z;b$D?o#S9R=ZG$H2L`GPw)NH>BE*|}Z(2KYK4W`^7*%|_L(h8lM}2y@efNBA>#VS6kTr1l3n1E+yymVA}b z%rs)Z-{-njKPG(C^DIT01Ao>~%O?WShuo>}7agc;gK&Vdpk$c@@*rJ_S# zO{zkUqs$+ib*K61v?M_Zru@p?YO5}ycpp&QOA zkrXfS4N8E%qMjUX!fdngPtd_!6S*U^`4rpvrM8{%nsOGP7G+G*ZK75uufJ3$F&+X% zS>yTk|2CedD3NGVrkPA{vt^#^_z?U1{OSw1KCM0_nrQW<%V6S%r{_D;^HAm#0)rie z@=^ZYmenIS{Fpff#sg||^blU?1CPum!3)JNA;3*-hCs{e+t>xchD{&H~)u!YsT@0e489o*E<9H;ZclzMo)}Wtk(S z^Fj}~R!#}uQroN=;R~u+JR!|rag$o(SrrO1SZtdD>9JfYnI}inK_7^LECkEs*1C+j z>BQMR{!CxtC^wlmRj&hONP4m=*M8SM@QC!>IJi>Y(hU8BkgI|`fgmxgd9x}bce=lU z8)e*^L>0bxpjL0D}a} z-W&;S7NZZ}CjHG-XxKJS>wB56VL8y@;Y9NqVFWiBq0J}WK>&Z^NQ>_S2}vy|PUKTx zWkphHreeFl9rf-1QlhqKM7vq?VXAc7P9(ox|{%%8I zWt+^a(DTv2u=aXXU$)7x@6 zY9MQ2@6+~3`TEGNB?(BPAS8aqr2VXs5^Fg<@zW8zR3dxn2hGd43*ss|+X-#pwuM1p zj(C(9{LhoqAGmZ>Mpn6PEAhAgC2<-O{`PprTH|NdGJb+avhxAY03wc^!4XjH zxpF#1eG6k8Pc@3HG+s?kt5kcGYLR@mJyPniB|sf;Ah~6Ix*oo ziI3IPkN5Wh=vnQBPeobUf>ZUo_G92nQrpk6kAD-!YNy_$z0fW?B#`f0+6xECTgJ~5 zNBIlxteOPc^mQ%gimNDm5`v2y81Yep5GPSlbXiwr+02dWdXNlD0-7tk;(rvomA#60`*(s~8%<-1tgbZcoVVs8S#kifFwe~4Yl)M?q;9GI=ar;#fsQ|y0YT- z2UTBc!x1?D)+#>NC>3uZV^O-8nk%oNe0SC5=&}0k%YmY%Uh#3Hap1@gOvwmGc=Pg) z`E89TmW&}NBja|PM@Pxvvf^?k=}`QwWOAxQ5X5w=Lqg%;hOp2X$48tDms!lrtgJ=x z;4GGpl*9t2p~MMK9Mv9$9bmK7u<5Rc!lDALvB2^qKSuWMvpwIr<{T8ZS&fR;6t~e|y3|>a9I{I>{?UWKig@_;J zZez4@qqx6?8^rx>SYWtSe}MXf^bOp?7f$7>ct`)sKy~ypL&&u+55fEYFod&HP|!2) z3q$C$eDQB4z@o7VmMJe@AW~*)`L;y=sziHJNq$+0ap{7j4}>IebgqaH8;3 zrA}p(VhvmA)xl*_K;)2uu2ZROIa^xp`}C-f--rkUL6%hDaopmmJlL^k-N;ZQWv zNjvVT!xX0ircAJbaUE86U;Zd(AR`_dEudM*ueDIEbnLri^c^iE7<7;)8&TW~7qBy= ztod3XrCu&qtoWP~lEm|I_P3=8 z1|mhItEojxCG2;ek|_iyLaU-wXmO6R#eWr%@MG|2lC5&>T(>PLE+L3>^;T={jiZBU zYAIfZ0iP*O#FC%e7WBj>(1B#6THmPFCwN}$D5RyAAklB|Mfee}{Vs$V?L*`QA|?3$J4%?SZ_AuPZ51-c6Xo0|XJPnG%CDZI{r!m&7{q>~;Rb;|ZeJUKzQ&ePm_C z*PgVlag$vuYOD1hjwM$@X(lBR3xbH7Rdb2f3$0NUE#?UQXT`;9&-^3%T~zO##8C(L z8AN*JW>0j%8x7;v06GHm$A}eR3;;Qbp_gUqx#V7SLuUqpiz-j}+HFaa;4su3m@o}> z^I^NXoPiXj;+Qrt$Xizp7Z{keToQ;4vnc-#^EIR%Na)u0$i96_&_m*ZLnG(W?~}5n zzD{e1@EE}{a6J;c942K!vamE6F%PUE(eKAMR$gjzR}SOSt>U@Xw zx#@ZK+QQM=0|I@n(;g1rz*q%afJnk)EiUP{$7a~BbO zP8H+k4KtT=9P~B$t%b@CKyattFVb_!9SeJcs$26VW|A#FX0cBwvZ5FASJ4-8hiv9k z5D^OVTNKy1BwnLB3xOigNWOEpBZ&G%^v(}WV#*MEz`wHenv1F+^=vDY@Ij59S!luw zLDVhgMZ{r`lsN%r;`A;<97;?wLgD_*g;r0iA}ccyTUPzJCRteW<@biyfSvu}H5c0g z6J+3t4)Wq1h=46t_;#U%xO>e{SS=X;;o!|qhhWZF^4sdKbP`FSumn9Y$~-*F`A~G3 zi)PP~o@GR5`zlv|dw?t?!-6*;o&fCiOsA50|3og!zEx8Q?g5XR+H|4=d#)32p*S0l z2ty6lm#)TI;kuPdw*pl~I_N|0=a$?YQHEqbb2%PSjl4h9h2zafZ|%kRts;F9pZ9XB z{+~BhE`_zJZ4d%%YJ*=^DSjk44`OEGaR^>S5oDp7glP!1+ zDL}Sv_$lSJ7xvoUBEXTOG>|w*UuZ%n#CtmHD*4aMYiMjxJ{_lg1)T2}-2lqW{3S51 z{x&r3flK=eK;jn>zNv|ej6S)595=9Ip|M8#h5}=i(;n)GeS%axPQQeZ5_K^mn{ll- z)PdbMik2Ek{m$0>Ybm}!w_C%SO&i7Mx$ z6R}=n8Zq5b60Kf*!UKq$wl7?5|2()v!Xghh=DWS=8^k7|m*?P32!E!%l8@?!IEjK; zbYHvZ-=S2@-{8?phsaK5Wd~Oq3*8_Fp%fOlK1bjP*sEOoUjDJjZsM{bx8ySly*W-h zq4>$K6>8(O^KVk{g2iumh^bsRDtu~b;3{(51e5z_CAnkS;Zt|VE?WGi2MAy185cga zEkM4D19l>thYs|J$c}Wm!Q+55*EEh zgFhFBL>LpS0t%hxDT|HMqJ>kTnu99Ph*0y&?5#@p9K|bPNckIkSzLIJqGwdrI=|rF%7;A4gPY}ZvRi70`KG-#iu>a`d-<7u|b_D2R z70wx^mW81OL?IP3@Ay#WhhiNf+5t8uZZN_1kUWFHM%t2wpe%)b;0n@>{4BXa=o5oP zgzot{YbDy2TSycr!b40c?7gFQ1HgqQD@)g&A#hSx5|>ssN#D()esoki4YJ`%$rIN} z)eDRvA3Govg$+8nBzxPmSE6MzG5upY-zJ)JutP+pq0Zcj&JgL7E!H~HTq4@irJu(- zv_}Lfct5@G{hsgeRhK<}xED#U`kAw+E1u;!>taOPd0IJ+>^WjcfD?08<80JWJMs!+TN7BYqq#0@ezZFNq~dYP5l?rT251klxNGRLMb3B!Rt#0sDunr17(jQjYb6a{53W z(dNJeBO?zb4YrRKc}m55H%uTrQ36q=y5Pf7CT5^63=xZLe8OYGOJ)s_Bz>B zE%n~e%(TObMMymesdQ4`Z$CL|zxK?lPA)Mg4FzfK7mc!TYU$pMCf<@O|S1j zXtMVXB*X9U#+aMwz1~H3vbkB6-s{tYso~teYU}^PmjN`+t?rnRhEZaO(o9}9$On9f z*%Z;WJVLr3&{Y0X{S@sW@FtNO5iiS7Dz_u4snkQSR}yiNNO22Mkmkc4Beg-fnNKHy zTq7;I8U#XWKB97a%Xd{zT71f5_}h#;Z}{40F=Ozz=U$%~bXOYw*DG_c&k80JYj0!> z5Wf%Q=}6lut?uZxW`3VOYpTBHo)ah+mJU%ESayfP&{<*jEc-=MZ26#vB|v2t+({^1hht1| zZLtyjR5)h{*CwJMG-wzkqM%*6BzNi3s#Kv?MT_=}=M63j$()TtL$;-WRlpy=_#|YWqny+-{ z5MfrnKJB&-sAj9<-Zfy2?)3lZ`pXSrSm;(}tid*OQ6at8*%bJ5wZ}uu!T5t6wjxhmuE` z-31OP+%S?fA?0qf6s`~udoR61V^WMPq#k>#{7A?!F%YQpr`MKDFcvQ1{77I`X!-FR zb=Qe~T>MCLfeh+XhMkd<^<4^w}XcksNwh9_bW!jZC zpf?Bfy@{=DcuWQnKP3&UleQHG8iTH68Z;caOFf+8V|qui8RSLmpBxm6Pw9C^S2<)8 za%kwnYxLJAy|unCnm(p_MmTp?P5S)8SZ}y$#=xwaG>@GBMaQBzrOb4=P9ObnU!Z;WL&Q#yWfLeZ(Sc?3g43!*01E3h%xl1MCcM#|DKIv zvAD6s3RxBPuR|Ew;tS)Lv6O->zO{CHbF=`zuB~rs;v)ZJ1=8Z+ScMLbQM;DUm0HY zD^wY8x;V>R_{bTSd*Kyc)min|_4T*OB-YDRSe$e9+{ifAbumI!Mg}}s&Z&mO_gm<7 zK=l%PnBhqiU{W<=Q4*U))aQ)+^mjC)JTDr=TFIEZM4B@m?6%6P12VWb3OWA<7I^J0 z*^D8eYwgF|rS{FGmX`-GjJ!A}T5MTjW`3fTKcvfpv^p%VIlZlFTr!+U7oO^+j5K%w zrMX{0F-SwKHWC2)p~OqE*362dB)cDZNj3?`n+5!dmaqG&1Hk#vRltmfsO*7SrLzY? zc3$>ek1nDKLzC&9mU2;9>unG46PvBY{Uw$&q42!X^qlBR>QK#cNxE`j* ziGI~$Lu?nUG}LPYARo;eB9dlTbOsxhs>R7gzSI$b?I;Y zb-d+8zRmXX-_(m7UPO-OH~f;Pmwzj-ica->%__yefvOWNxOmtCim!aDmz%&eTql@D zUbb1GMkTVuzg!)hVYz%v4XUKqiK3Usi%zHLUob(99L?fZj^9T>)=2X;)_Kx)?2}ff zNzu6W%|Y?ll(k1?udu&FZO180QMrB~nATS~ajLfN8Yxtm6@5%v zB+9v}RcRDnL8~gQptNq6);-yk)=@TlpqI6+mV1r**Lx=PeXBoc>>n7&T>1iEx0;k@ zWS^uNWx}Go@oCKbEv;C-`MJsqbK6gunJjOETyblIn7lS`Z?VuX=DmB^na3D48HEFr zuveX60hdA0;Bv|^WxAY@U(vdvKd9giWK%rTDozj1vsIF%3dNUF{OnuSc@U7uHuoQ9 z^*uoCwYvli41o*K7g)762vd}Zdwn;H3@tZ8IIKBNV>H+fniPJUsbRaBchCNCQgJ&S(%2Bw5U~r{Q|q-LpT@A(N|4ZC#uJvnV01I$F^ zSpEDJPIR?Vjiq_sYXmONkZ|>MZ-3SO48{E6e-pEIVa~QO>>A@T ze7mHf!~leZvVeTUm}C**>?K>dxm3|G^Uk>nYFAWZB#SpCBz}iE4N8h*-$KI;vzZgz z$_hk2!q%`WVR?fvhz`?H>nh>|=9I#e%RsB8_c!EI#{3=~3O5XOCVlq&2wxWN%Jg#R zdvzt^?q=qNR7zZv4#odAERY70lwkfWT^{v$gfy=}bL5`%PMzmM{m^88I&MNYg-)S9q=1^PS@*e2 zqA>Q9`0nsh27_U#c^~f+mp*>dkb=&`?%K}r9pAV1sNI!kn=ekL;@J^d`#2$lU_sv2u$-SS2lz+xy@`IR%YlgC;uD5*eb(JEva=qP_LNX0Rv@o zIRQ))d(lVPO#Rb_Y~FDO%8&6RfEifwDVxJvTf^L9;e>jp z?GuaKC_N66;>h`!&Hje(QCQdr_#Io^wE&hZBXO#F3!&IF+f^q30XOgP#$_YE+D@1G z@Yf~r1{AL*9nz63^ildU5N`TA8@%#{FGk@K^ptX;I?P}%OHpPO9fOuRhW7>>SXYC1 z4-A&-I2muG+wlC&`G=1MWS!H@71B(h)y$qH!h@OX#QNWvEil8na|+zz(kg9v{?@yZ zRyuH#Hus_2h;MPfy2!u3AR!JB@FBNOBwMG=9%||>a{NhEW{cF|gnE}zI0YwVw`7(c zbxYtzG7f=i=E^{rUaxtPbT&87QeF0%M?T@PFh}0VS&N@LnG9wBk9;g%5-mN$!!S52 z#nvDI7G-CI;zn5s0xdvHlA&b!#@v~K>tu_5C;j!Be*tNW@Tqqjy$+bCE{k_Iv!Qfw zKo3h9(ya^~{$=y5aoby_9nQTdgyot-fwBs?z_9>PQdiKwAiullH}=*L zCR!o>+rXzlE5We$VZFYY9O$4Q!MVOol2!$L=tI=^yx~Js2s-MBgzD`Cm=@60NKOr3 zTb*xLUwK>j?lyO=Z)a_Dov$tOUQ(pZp4wbn-YnVvwlW$c{a2EW^SAtrRA)=_YhQQ6 zbor3K1iWq?Nf~9)2~bpVPMyC^k_z}ciIFv(gWi`97cwal+GVTrHP@mgC+_ri5$&dD z7|vg*86wvnOw-K+pxqz&Wl=Ruvl z$S>O5td;yWu#Ac-zdv@?)}XaXDsEsO_~-LNs@72yBYU2 zXLwC2feVP}Gm={Jr#Ki4Zhxg7&RFS0yh)n4UFH%)m2M&X9uV!Y`Qw-6YIMi-hUVoT zSk$03E*vnv2Krs7zYYfk0%zN9V8J+yZp<`rMvoR{d>nHEo_3x+)YHf~s3`kx3(g^0 zM}ey#9I$IoEhKuoS@s6lP528Dau3_2rhCAgH=nmH+7^oVcENy6F#Nml`exn_2hR+6 zTSK^~=*Nxa>9P01sBnWn5MM*uz-=)pa3|B-M%XAsef%#Rp7hVV9KKGpN5;&@Y=!^4 zi}pMQIU*ntcKc*msk%HnW=;cZNS9c3iunv$b?NW|>9D^#(IF;z-O{D@n6EuDFsvpN z4z=3?D}eu;jnYYs!My5c@qJiS=kEZz?TO}3M0t$qj^0{J&hk#o&1M~cM%yC6h|}wS zDg%@xB1l8avS2R>fA@xt#%?E;bZiKe5ZA?g{C&V9t-tb;lK!3t%SWJ*!-3;Mw+55d zFg_GD+E9)`+~XEif#QqAd+Eha7R7tgiVqQTc|Em(f?2VDNlLPpgubza&7EPju@j7+ zNpW2TlZei->xO!qxdC5e?q0eAk$DUz{#!H!0E?);CdsVHRYYxuoQXgRH@7X$W&wLI53GdSr=e)MY| zHzsLCdpFwa*YR5`Y63Q;7fMfYHnNodVh;;RD7RKdBLYy%H=}?XK=?M#V;R4L0uw6? zRp1Y_BrOo)jS@TD>PxFkX}?U~tya7XE8|2CRzMMhG*^DlAf@qPd zoQVE)5AT5L$Di9aM!u4O%TV!$^hl#T|5Dr~bftT;gp4Y_3jBQ=BOZb#V4C_0Qu1-8 zPbIOF&4sAiaP`f~3S%n?%_Ea`_p<@q--oIBii(F3yeQ7eump)x+3`~Ms8W3ekl-4` zv7#l&PG*db{oSf0O_s(B=c>Ziy#rmr+@>3=)8Q3v{ywSL3TfkFW1P~Tkzv(?#eg(K z*u)EwZuOc!27r_IO{LXg8wR-5#B!pDD@nBfKE5dj{qJd+##f-iqGeWF-Z#|q> zak>ESSk@nqCxA@@B6N2CI9_75Rf0xr@xfv!DX=IGe^`e%_1(hg*vyRW3Xv5TLPn{Zf$%ES8in!L}~%0({DZjoLS$v>e56Hzlcxz zMoLB621o}{0hRaQCI*Qwaa^7m-~auV2JuD&iqZ7PL^>F0cH}-D=0_D~M$+k@tWF_} z?Zvo>&BoSi;xZ0bTl6mJYHR+K`p1`JL61oF-`LZd31?EoC^ER{=ZLs*^!l{WV z8yiHT0aJ8!r2aGdv;}4|Fr_W@7-6~JY`SRH83$_n>)A%*XHpQUD95n_wfzjXJF$zc zlA&>mT>d%vcr1bEG9VUrGjwy@HG;DlcwmZgt0$&5Mmm&3Cv(^(vqa#00n=-lJ<4v` zWjXZQixOjvuUM-k{LQ5C(TWn?ezl?o#={lHJ_0?c<_^Z26ARKW5o#?j_V8Io>Pzoy z&Qh|{?%;&JX6K8i`4Du6-*de<=_F!=5&WYSy~WO^CkC3!D>?K5T864~w4|(p`Zki| z!|b^)7mV*R^mR3*q%LPu{(ZC(4WJ8ZM1&UcFNOka~x zvkR@<>TDa)de3!J7Ju--$naIUk{S0(`e{iDinpXpNPu;G&vuGMP@eGQNQvVUIUti8 zG9PG6>0Hf<{uv#!!X^b&kvlcCa&e2t2sIj2DJ~(U4NBjXn5Z>NLfTog6j@8GTxNO7 zY_MDNn>}=X@z(v@1LM#3C-WsYgnxS~$>|F-WVSV%i(_jM`lc32Ix>fH&(1pww4y4Y zG`0r%tHha5SNG$p_4|%L7Y#kJ&BGv$KNpyc36}2(0egD+rdHn`RtPe6BXMBJMAd%Xm(k`)`QNZ3)O;x_*QXa%mpRO4qf64gok{liKY zQl*Awlw>10Sihbwt;LsPehVBRF7b0Sj9c7XMjq0PTQj_eLJm%npe@m)>^BNLB#p+R zvE(j5#}yozuglYDo{YH!Aj9Tnn)g^}1O`F{MwQn!e6}<8$)&EOd|RrD_@M*^2lTQG z^K&J`9c1oAvr=iKp`Liv9)6cl6%#D^gCdFioLa0giQwmmjMUdM)6dISBs|z?0ZY5 z067JQV>Qla@Uc9pO7t#yapRkWf|@%iDehPU6BM31F|0d!R&hp*1t~emM$GRH2o%)T zE#;kMemDc@1`)6_-=?iAkdk8Wn4g=WMQ8G~cz=emzzv>vne+Z5RfDe-#yW@aA(lyp zav3*DGQz7!ESs`+jv$bH(wbcLWbg`OyfGuZLs1ifVJ%6kVwuJ)H6Pb0<^v{XN~V8P zd_05FWXsSxJ)E;Kcu8dCL>uXfEHX7qs>w3Yso))R6m_RHDp9sT#5a^Vv@x9%Y(J5^ z8iUa;?SV%b5ayJ}u%;CE)o%UdsFRlIC?Ox#hPr@{He?C@PV8KjoY>XI8(H?}(Ts2$ggFuBvf}Mxsky+eXvgfWIqR zmE$`8yV#M%K39nYWCF7}Cc40ZGZw~$f0XsW_Ro{zZ4ZrH+*Xp`S~Og?Z~!LotO2IN z8W!^oBiBYHy?hUTK$eN9vEZdnF4q#Hz`0}BvrtWOQ$%08wx!ta#e=T^6GPqKsF&}O zJ4d3QX%m2U1+(2V;B1lIA+79w@@Z^X9Q=Nr(&8IE4DZ=vrY;A zA^d8X!F63s);9vo?FNB~Fo#b{Z=s zfYd~MlC11=++AZ)miGvj>9F08HLu$naH5Hg#Una#j>0rhzn+0LRPzsJy^Kjj4u}d0 zUARH(O~J9XzBfg=UFbIVsh;cnZw4#ECm#>y)M2+K(LXxFD<|87Un9(04Tj3T4w>yk zGF#+j=82xH z^F$Oza5XgLEDXpX)NMCrO$4b1XJ{|qi0RnAl{Y~_5rm4kR1DIn=)g!9r6qQ{kZd-y zf4Ty}(|aUSF)J++DI`-K!6mFsCq*uM9{AFtMkZQ<5(?@wuodXz7%5s?TlXP_wXKEI zy@dE1CRFxE;Wby<0{@Pz0eF8R-3LHzUD9UH@A#*#P{k%o3hpP`5pDjHce!#~y7^%& zXwB9=59EurA9PWd_Huej<@#4vK1+WRWD4sI%x>Gwf88!a*PH8~Mux2wA%g2Nu!M5f znqO0svd*Ol=IkJLM07=OOfY8 zwXQ!@kXmsd_P!+!Qr6n$522j&oor_X6NY5fRq`ZSS7s=de~$S#h&u2V3oso6!RdD3 zRok@2Twfbvp@k$vPft>M{Qd6{#4FL)UUU?x{V6PQ5FI z?&S2Z!&FT8mJg?@J2AnyDYLI79F!boM==C~yR+S)zKl=sP<~lRZbaS2_>K4i?~1ia z9>gQMtu`UZEH zP4Pzoy}=7ev>V9aY25}XjHUu7>7Vm6oO&$yT^3U2C1k$L>s}cp`>d&X1;4reaDzw< z<3hn^+7}JC%p*gpj>r?p|1>u&6^iec&~S>GE{LK>%a3{r6ny z!YYgOg<6*iAnD5tw^1jdBOP@a{A>Ku!@pyGnaRHd{=mH5M*yo>dSqpht?DZA0L-^7 zpN==z7?fQtVIhc;;2ssR<9v{Ln?e(6J0cQH4qpD!(Ui-#tc>DjA4G+fLHS%Vs;d}P z+UGKL|Zm?Kf-x%dX5=inpm zO4iWS24eNV=A7aSs!;?=$5bRuKBLx{%->qDijkj)Uq}pAaty;(O(fMF6>5e4k;<`fqu3av){# z>ktJRzFsRZ>r9c&h*;)JZDZf_rMBaZ#=H26wy*fgwvlT6t#)Q7X=Z-!FjWiH_41NB<+K)y4Xl1{XNw%tFNc#q-n=Z)zF*ha8 zCV*{SpUJb7mL6MFY<+UNUMw%o>IdXR8Q+qA&1d1Itr@C#_`mMuCBqvyxOSIxs|-~d z16P$>;d7O=Mic^LH@s`v{A^`%?CAM)MLe8nzFm8v8NHM=X-aqJT$ZUK?0Rq_w;Yo{ zf);#C1R|KL@kqYB{?A}AhIxa%%hSZw@tFA+J_==YkCgXygJBTZ$x(LpSeHibkol5g z@2AF9bi$WqiK|IPdbGG-%nL28teL%8^d+$y9vf6uRYS&%Vv{UXvt6Ua;+$tdZSGQRI zAblemmDDbl5XQpC%Vrw+Ik04X#Th~-))l7K`rbzwGJhf_4AUAX?S=Ofh7axI`<$0L zA2BdO?-QpF`lVGOR`6d-(Wn$#q|1d6o|K$jPGKF5;)zYBtF~y=Fn;kTnLorEnAERr zZPW>;)?q%acBk7>jIHvT(Jh7P(1`;M9LNguU?I{RC@k0H>xD%I1(c&{i^E=m@79E& zP)f{8ah`FB-1(6CD?;vbu&3bNQd$yOon^0{VD91FU<9oCr15GMK4FVn#4a|LJowFm zO-c?!vf`O_C8@^hiM9UsjglPPKxNiMH1`hEwk+_%;{?1(P4Bx>i3qm9YuC0^c~jRa+lTEYHQemaI% zblTssABo=X@V>P?J-580`nCF(rDhHoIHmp-`S}fRuzOib{cH03Vr@$a$>+=8$8aLL zAk9TU;f$zf4*7!K42`NkM3MMX^$Z~V($7pfC_Xf$M4$MI2pw?d+E&QRWjU3)|1IdJ zN{)lJwFym};cIjFc8NSrc3)1&A>w}cj)F)G{n*>y}qN%CR*Qp zM}@i$!O%Ndvjx}Ko4Q=7?UW#_v#)E#ftUsc52V#Q7;DcWs$;pOZEZKMn}`mg$LZa@ zJgwd(-z0^(6uld9Riw$`-M!*gZ}|bfdgSYceATwh8<*7dE@G7~`RN$$@3QX|x89S; zHM}R6rPZG&MUQh{k!4Kw@0l!~fPOY1otX0r#@VTxy1Nns7$HMg)kE4=|Iq^P-s(AO z0t>E5V$%p%TFz`1jB})(vhR)F;P95W)lBmG+d^se+0y>cr2SB5<>b)Oy7E0ZI=)qD zgpN+yZExo{r>Oi;bl$j>x=}gp%TwyVPL0_2CNh7|uFem5o;rPH+DR}d!wq;?e!~bZjua*S^_-`s&C9(Fh>>bk zJj7#T?CSj3;Yfd4@M7c>3toD{nD+hw0EK_e% z$&=)G6}kTdPuf&9TD~ro)&P2f5k&B8*ikpEyig%F-saM@;luo*0m~aWYt!?*PkW`WSqetXQa@Rbgtw{8EJJIi*hQBd?H2p8i6X>)?lNyH9tcS zVuE$R-U!G7%^*K2nW+R)U7TGhwk1Cmj1w(#i17!2&)cp&azC?y2nD}7K(a-Sq^1vD z$QDV)U^=|5RcZAdV}ZF|xKPO%B?)A}u(^U~7vy64=Sn^3?X5|xKP;ujNU6TS*l^wq zwqzn@@c^~+^8!_^C^t!JVdB=UkQ5KYlLdQ8_eG9j>ZO;6$89wDzBJgZ2G@>XsWT<8 z(AxqEI4bY|sM=dFgZAdla0sT~jUXcG8Hdb>GNzPyfHL~ANzFp?Mm-J(xD_i0pcEwT zz(xt3dcf{)Cr-7mD=rqN=EqWVp4F?v*T%Z({ge62MuDO&Yhff|Rx8_R1yGH8dyoAP zuMqMRFfQ^Lr=!wvJ>VIU9^dajTORWKb2i(+sUxPyb!9`0gvtUFOfZEt0Tlr zC+59zRb^8v6w81&)E-KyA0ZGVz$|c)iOxiOq=aL_5tYuKQWs#zJ!}ZWE$t~mCtZgYsb%dUWq~gdA(?ib~tMjc3 zqZ1OR$idm$j-FZDG8Hpv#x1A0rJhD?-cPlH-l%iNq)(MO_hx&q5v-TFirn=8t>;#4 znpl-w966Ir?hf7*ZE}k|%*PJlZncRYb}l+w@-(ZWjySb8F>OJn&Kz!`YNy*#g8b!a zZ>Sy&Y8OcA+q2>lBeV-bW7!0IllKh>(NCwa2W4E6NgWQ~W~#={bNKf_5G~V;P@9xY zsqd3AglF3`DWt3+Lmd%cN7AH2dRr~DO+Tx(vCg-#HpK{aa2l44s{fn{@u0drMfjtL zoU;50-T$O@)VuiuKd=0<_WdrEfD~PZ|4CqzxBMBS{E6x;YZ;=>O}Q&4hEgNGP0pSS za56z1idl#li}HL+K{{CtFs&^>UeHPE1legv67Zv7d~MMT%)~N`@JTT()o5p^X$2y_T{5;{q4)r z>u(@qig~yfx@0b%JF>`PRp&(SX5RMwY?`;Ctu_UDu+Jmw zyl7%oinYA$5nrRT=NgvV5@?fzq#o*2Co0LHA)RGS0x_5;h#_3qpMFxZ~0s+Izp%#EDtzwb2ASA#OQFVQI+o^O z6mNb^Nl}x$ErozPuzYkY zXBK5*1HGF2#LHx%BBBq-IYLsIV*Y!w62!aW>b7rl>Sckm<^U3m#3&1dSCd$! zAR~C8wq;JLabu1Flg+jk6E1AG=~X=jI$|lZ_r=p16EQl^)(wj5bFop7&jl`dpsVt0 z1rumR&Y>qswIR|N&QrUv0z(3F#_h@S%*(G(u3EA;f>N4|6gI@X_v=c`asA{9Ku9-6 zzR}G8BA?7B!&ar6`}tP?4j?EtSyb0`^Cq0G9Z7DW1rt7pZq#<`qs&bdsT((~aZdP@ z6At<)h0S+9K1WR;rVW@sazMf>N0F$CG&o%{h`_DCHjiRgdkf%;klAeU`fp%GvNPx) zpau|`Q@lJo-@7x=n|u4z6<0)|=ln+!flV$_3#K;*M~6d4oIy8Ii-x;tG?+||+{3Z2 zV;Dj-v?vOVQzAxEesI0!t4bk9EdUAXnH(cSdsPS$&ZiFO?jp4X&?O~Cw_mYVH&WiseuDtnP51>naDH*Dg2dNNiexl;Jf$EXdsmr;0 zQ|dc!wcN{NzYV__M$u?9zO^}D^o`%Tvw)Q6XbrhM9L<$u7!=l#&ZnN{ePkzkjV?kY z*;^&CFO*68QyY2TTA-fvv_OjPRBxp2_oz!>XKyx>0OYp%OsRUV7`_$xJO2T`)1!DV z3Hk0bEmWyQr&m~4#BKOZadC%_=#_wSX=uo_2EP@-eS>#hk>2&p7aXGc>mwYhR^-?G`VY>_ii%WZ)PH6sa#p+y1a zwjK#<5IHj}p!NKPUn-z#&!6}OZ6Jznd`<8XX6v{e?fij^=;V(ZT7f@MbV5GCFzn(F zR8$*&eyS_rJWS>h1(CG%SFTHA# z!&xR8(~DU!tZZ1xV%D>hSZA`v#jNxmy*N|WwAdx`wB#=mJKB~*08>$sNbIdn$VH*@ zSADJr53K$0G~KIh)O^Ru$jK#G&cVp5Z+tO+Fs?n#Fo~Ro0AX+9${iz6_6xgZ!SvSP z^+KH=x%pcUeFng7Fj_@{hG*Q3-APb=@_0!rpPQ8G0a6m8MVocj-u4~45 zxv?ioVU>vexx}hpB&+WDj|D0dt9}bs>T1-b0O-}W%yve)PIz0i^@{;E$a|us zTVS1AP{l;q)kavHuDaRIoFpvl3Q#R#GRiPecBf|#V0W^owZKL97@T`@iB$HF9-Jw^ zpuQGekWr{W$VDT$;J!?43)z0Gm>uHis!p}XI?XklJ77VFdHj5aQ-+4)GYMxhQdRsc zayFp?KsAF|dZcq&U~@&b#9F!e!y<_Uh`m>EG{Be=Fi;9nZ&05!JHASBebPvpGk+p0 zCBIaqL4?Anehf%93dJ8~S;+w6(lz;*O}nEZcXZj*b5jB>qFuoU6Mil=vZ!&fI5aO{ zq-7KNLl9-5+g0=!(a)JE8)eiIM8l$i%`^8BV02AUib`Mn+7yLX653wD_dCJXqFSE^ zx{vzb7qZU*&2QeLmtt>_Y4f2rKFTSJ$DZNw;QJ-gey-oL}ky&Rx2 z&+sz0N@eCX%2148(MXcsiLK5ixlFA^O$smP$37&}m9fTSlx0|1yRb7~=GNDEg0o{a z-sX@-orrU~ND zjqsXV3bXa5{1YE}-@NY|q$6utPAQ~ZWjU($9QgA& zJBiqlY!8%inGasXRGIRhN4%)Wsy<7-Kwx)94V`a$>Z>lh;&^Wu9xf(&Oj#1 zc{U94pV%zWC&;sB0j33Vg(g)F43tzKGL(7nTnoHICS#;Yj@JqoJWbR&iowRKUBM`M z9e;Y@&x+n3GSAJG%X5d7O|4|Yb(slPxFG^V_BR%|yRcJ*X^ zp|j4ZklA`A5|9DN+!hHdzhxZiNYap9M07>pL&%`^-F&O7*i~>$&I8SYS&n z`&Y)vb_C8}krF;-zi)nQ7|cO%wlsb1_ZX2cJ@yTG2wVL$2fTG@>s|?X3c@E}UjA8K zTIAiv@X2uSqk{aHNHu}Rve}sO^vtB&!H0St)a$qz287Z_i4!s=EgFL{VD#NR7V%4h^?G}-J0Ih+< zQxV8$0dME)0*e4d)~bgw`GNUS3nwl?E)JTyM>qe5zu4k9)a_HE{+>A-hr}8be=yV( zgV$)7bvlJkrnPK2s7&p$$JJJm4)jspSQluLj9gu%y+qap#Bc-%^fgDY``nDcCF@_Q zzBuZ63?0gVV=9d>T2c%;UF(o`S?faBeDe<}B-aRBFtlRw84J~Y z1gP%OX%|}}a}4E3{j|k_MiUrQh-Nc*sq6%o4rLV4r!ZaQet%&7{=gQk=q7H&mbpoc z6|#rk|IS!N=w^ZbtvrE6rw9d)bsI&Rg%na|1djg}{u;cgJ*q%1voU}02RVRo{Z4~~ zaL_+sV>#b6RNjDYA@M@i1Ye`tcX$<7>%q?pCc+Md3WPSNzlePa$rZWZhz5*|GX=@&UPn% zVvC|h`}@(2WnIJr#t1(bLq*Wp{?Ikr3+1l5;+yElzTdbhu=wyq8c4VA7o45XnTn-Z zzkhQV(Kr0vSIxg^S(;EASB(~9DPy5nhNwH`6oRWej(WsPtXv#pSO-u}t51<`6+L); z43sN>(=UDMmQUwY5gc35v*)X-SfBpqOI2j8D|&wMRaLA{)nBS2`&H3{FU^++W_=P2 zcJ9Dr&G97ssw&neu`XhNhajA>0k4&Ou@oJ(8#^ekfiQ`ASvYb{u&jVBPUa$nHLdr%-={PEMc(B zTNv1pEAXl%vEbpJ6(bJ4GOh7Q&)Xf^&l_XTw>#eMIMLB_4^4$nCa<`CAUiq}0H^J6 z#M1ePjj(KDei19FG|KF}df-@77xo+bVjtl@*%mvh?HDelj6$()(b_~*jCbEFl8r9r zF@_V0M0-VhmCS;>W5c4e`tgXn-D!;U?$;h!MW@%8Cu00^0Hhnwo+PW+GLD!L3`repcvB%!w^*wVRLE<+V=nP6--tvuAW9xs* zu9_Jgprg>H+S%vz+$)v*8;yCj9@)KLu~BuU&f4;Qa-oi?JU*NWu^cbRaGH_= z7e?N-vyqkqJQ>ArcSqj0=N!_TwRI0s&b-?$kRbC&$*wakmb=c$u$blLmYnQSx}azKx`xF5fPfnLN7}bCk z&)hd&Z{H>(owiTBY??kw(f6nB3>dRSq`XPnQ97RlA8T5z}EI(6FU*9%J9_-iTcy;R)h-5%?3C1e+ zM4~zT9>oBghD26~;ero_mc=K6omehp+E0mWz8p$qHbx4g?7O|Br0fdL!4+-6e|>zH zMA&N2t!NL0M0T`=a3N3{UGf7$xjlfZcXu7S(yrQ9r(dM$Pcs@+9!>ohA(!hB3!lPR zGpu(t2{u!zos&99ka0StW(2QlE|}CoD&>?|Mtq;U8^GlQ;cIPLNptKLHh`od;auCw zIh>lgoF=A?ZY0^hyv(>Ajb$h6!g7EnSc{M91+{m!+GIIcSZh@P0U+kM_2v_Ag}ub(Xtr#b&NY9@L)L|$OWQHq9=(IL>K4+We|XI}0uwC3ix)2b z_ge*!bPuoTj@`1+9!%AC6pvR@yy&9Ov@I!nPe(l&x#h0vQS}=LRcz)Q7#NV_))@Of zi37MT;$5!If0g@zBfBwQaHJ?M&0P;d4r{FtST{e6(+8#Mh_ytRaD#|kcqpzcSnwI2+x zwx_PB7L-Q3nNq;JVjtDb(RN%J8>#KU`tf!J=sRF7PT&|CTg=N!W4XPusl}xL{yP|j zU8%hu>(X{yXcS{SvK#~{k#cNWn;41uI#S=!PfY7`1UtrrI%AWe$8UFPZGirF$gqv@ zk>E{k;k@JsXR00B$6b}Yfd*RSn_b@4nsH?0erFjAGK&SlfF>PV(RY^1^Z3}Mq?l!8 z#tm*hbe`4BmGB)D8P_sPuAzFDh_0ZrNlaOfNgA0CAYo83ZAk>O027bgB2+fPrreR2 zE!kwRwxuIDGB#U8IokRzW)~w~lZ34J)jU85jfUxXuC4{d1W}bvtkQpH{RBYW!wwo(1@R}VEFujan5alC3 zUFZsHrsO$u5U^RU{o@~Dy9Uv(_s1JGdp1KPu9P&LiHv(K$A6dL;#`<~1ZM_7&t1^NdgV*8tq=k#dD?(^!C%#4GzAu+ z%L`3~p)@@8(;C;F62CjF{(E6~Og|S%=3BJQV-#lAk<5ISyVjF4JNBxC5!Bm=OkU{a z@{a)E)fReNi_`6Fl-_3EiF8in=z|BY>;`yGb3W}crBNc+-6kBdWaqm4A7=*0x|KMV zEmjB<1fWC&l%!qVf=rRqB!^etVGCY}WOJ^#%5X}A=j#43oSwjrUeoy()a!+r;owB= zKI|BIEB*UEp3(j^OLHi=t|X<{1yXF ztaqNcqt+>3qS}i6_+uc0wvFe`iiS`9Kpa0_jv}Tx?1OP54uIX_;@D+gjXqxCqHbJh zVJpRN?Z7Imle&$S98FJjgLBau#Bjg;%jM zS!!i4)K4r;M|^3doQdx{VZwNwYp$bYGe12lFsAPgJ#!;zck!DksY9 zatf`joFa3)5c#IuZ*AQOh8DZd-M_S;lM_K|5EoAv)DRKUh6*9^<=PMI2)(W$+UA!V-a-uzGv+!uL%P}@)K5l53{0?h^ue}h#v_(Y73<11|QYdFOf$e zOr8JPO*TS((n78OS&2eQaMHl}war$b?BFPIaaAmU+J?3mHaPRKL25I~+l-NOHi{Q1 zGA9a^2*Xgmff3y;BSNK5!~sIV%#!0Xi{k@}xu-!*L$>-Y=<&ZL)~BOKXDV)qb2WIyB!p{ba*T-pi5zZX_bIbihsKF5>U< zklblTd#zgeO&kW@`ICmQ6zMSU$1Gz2lS+S^*MEScMt!xf2Zk)%)zUxm2qHZ{BcHcN zOU3olcM*MAlMxnHO@r50@EVr_%zD*mWv}H7VGygv{Qbx2BGF;6#cDVGCsJpVRZz(| zUjzgh{-;?M<)A%uyTkGAW+UX-n6If-0LaLBAzV4jfyI?fu8h9OK}L20xAmexUWfr{ zV?zdS7#j^M4&m&g$x>~loUju-g zMbG@V)PI86oO^8Z9oQ5dzx$&o|Tz z4(d_WlX@AJm)t39>yJGu?RE%3DJ^h$2h88F*H*@a4zp?$t6g5pY?h+=B;s&SkTL>- zwDpSN2ViOIL}RA=MgO_pSVl?|{!fG828aX5PrJdI1QD- zykrVrJ-5Dj{p>MHesNygrMmU<+CJT}DpobwuyMTU{Q&q%uF_ww@_(G}Aip&aqo#!bOn|2{AE zxzogHyU=A6oiD<^s(JV++vl&__!rR;%%W?ap6!qceM9@BAm{E_o$kObXkGg&De8ukvE6unqhsetEV|BbT4&<7$z=xQuqo& z3_yv7r|L725QVZLtH};_fu4tSt)^3QmyVF6bA*)YDWNpER*rXhr0U)?_%SbwI^f`~$!!#9*&+??u9$wJ`!m78?$KTGm;= z2YNSw*+feu3AuzthC>wg0Ifa@(a`F2h=pR7?KNY|FqkRE+iUOd`!ZY?QMwQtY5xjK zw}+v#ub|sXafG+s^UK`C5y{CPUUS*PgP!EMu7!o}Y<+HNGS<^+(Fa(jR272*o2?nM zjo(q3_5WBOUjS;6z7c`FzNBFK67@qSYaWZ-iJk?D2UcS zopx}L+iQM;J$kINRmD1M398jcf~K#@h%Lje%T9#2R|{_<7K@@iw(A6B$D)3xe_|f; ztk@$oNe&%Cmu+7dZuCVvzCE}QW_pwE%7#ERyc2~Kt$C(khIe*L!3-kitS*-kl#5Sh zF|2hVnf5kgg70@5amwnIn{iONfv@4t$Vzu%cu@31r#T4m&4+AxbHF`A-mXSL-xSHs zLT?pt7h`D71+B8X$z`0N4UIpf+92#}2)GLZ-ddB71;yd7nOi9a3XQYzdm>w$<*C3UqUY}mqhCL^u{%_OF zaIzQZL!p_4#aM47@hHUPX1#3v21q>Mzw$}c=1+{Qd{Rh4LB3lP!KPj^E?ydslazkg z=`$R=WL${LHphx`omvYKim~1p1`IOIEk+YKlHKzN&AU}QY~0@fSOgoRd(yh@1n}7# zC{`G7bI6XrfxuPj)^qg3#e@=Ma`1ZS!OhGhsx0!`h?kl_|p z4%v>$lHT#!jyO<&mJi_Iq7){&TN0{*hAFVbg8Xum`qo7OPb9o^-t z_oWBS|AklXM>v9>RZdnpT@rGfI1+G-V2rDUq~Vo>wyV*T06ZJ_DtuBw^Rn&2#BRHZ z<+A9D4hyZm72_)jjTGl?Y!MU7z&+colR(D@Cb7=P*4B4&Gy z(~kfqr@z4*Fs7m{j9RafyzKDf9SMThJfCNXfWcH{!NHr>XGNNEuk{)qsH+}AJ5h#r z2jv}PRj=`(Px`njisrqfy57UR-5$tzgk`kU33X;w4H3ErU zY*Q&p5?~_KQLk}Gm#*?y(J&cqj($Hhl*xrB@N=PvG60_rq#lZh6}L8O{DvCp!(Lm! zV7=DmHPM%PjmeDuD{J1ZYVMcJQ{Bb}xI-lOZ2WHOT(*bJ?p1`jVPYj91Zc1ENu9JQ zAn>UOwktcZEwfMSJG|(Vz$npx$ByxjT%rRBlehM3+zCW!@YV@2BN83L;VpOKxCoO6 z(?X1b8j==>BV&847*K1=J5h5F2bNqx`aCCit;0Cn!}vtMgqeFADfGd3}t@t;87E{o8?WLBa+a*6ejIP zA=S-Q()-;|b#g3_xkwy-_qOw;0ks!OMov?*qEG_~+ET0pp&(=cs+P*CAyxay;dVYk zHVRW{Nu#`V7V@>*W^4ET-Fd{F{7$NW_2w{Q642t%~I^)o+NPu^DA) z)m=+i#l(J#N3M>o6=pg<$-z)dx9ra&sT<$eKO^c1aA!2~+;5C3cJS7^;6(ewdMa6_KC(DkmJ4pv(TfWT&3y! z#zr^`&IO?`WK^bJ>W-|K>I{v{U*RKlI?nEyL*i_6V3J8pEW)R*B%J9cxkmhAHvCJ< z=dYNC85@RTnQ2mT7XGOw0Rq#;cptu;k+4pvu`>7spmvF!>K9iB!wWGq`pvOBxSj%lTrXdLTpPb@D!6nAG)i zX)f5|&kKN#f2JO|;`{cWiJV7$1=t7!&2PzrTwMHhjb`NLEcwL?hdG~L=K@V2)136> zmszHSHvdA&NeUzZ$2u+@lYqmKtCc{U#sx^{M-|sJ&^-sY(KI3J%D7dAcpsj?^2M_r zTg8~9bpcxbs)6f~bd2fE`y$Kn)UFdf^p{IyNQp8jfdoI2B~Mj)#K&K0MdqglD2WUn zJR9%Y#S5#s=lLbgNs;~zGpU%U@GNwA*E&AykxBOJ4RUDBzv}A>c%esf`PZDJubZx( zvgK)<9+@V84@fWJN_}0C`sU|fY1iDLubZvjluD^%UmC%1K!I!oiu>m@cHPH%D9?Wk z@2GF2Fbg}pZa*3uxM;NK+9XiRsrv*PyC02Z^esH3yH9$SdPw0dGpbzk8)P29c5zLH zzJz>S`mNK$H*oQXb7px}aLF%?wLBB@T6e8WEZBo|*R_oWgESyAE400Tk_maArTg0T zqIOr;gM7O_JmR_mUr2Z1GVi6E5LPuwA)i?S6sxoxGAgxX->Ewy6=s{zY)Rp2-Cs&j zyQ=(RPtDvf4XKLpJgCz8QR(Xx%UMouO;jWMb)4C#EA`UOhF`Yh?~a(NoE!cPn4S?U-D?Tx-*BAc(V@@X-E6 zoXg}=v*e58=Gm3(05LO+0@1YRoKsz5_fbNv2qmV=G`zb1cJ-1MpWwzZ04VVG5Vpw^ zJ?RWhSu?h7UwCF>y!^F}7OQ??^khbC7lv<(?f0}CFmu37O2{NWs z{&d;R%*5N3{k_^Y+HwV0)Nw|ZaohLRtvFk2Zt(jG&Y@ktxjY^(NF7McJhlep2fn!M z=ovZw7Gzdg1F)`2Ba1=w6Eo@_xkrTnfP34IHo{nf`J$4xw;FfLPeM_2h|F+1)&yc) zCwC!NOuM8IQX?HCE6##|`{lH3LKVYRBr2`ORQA|gJ5xzljv8ZWj{MUib8gqFo3K5B z+tS)ke2>&w!-+KQ6ej@Gl{r2?z27d~%yP4C6+t%pv)s;%_2; zhe+!!L%V zXFJ5lW><f8JB7vNl6U z3ZfG$g@8}wXLU^_io&i?J}eAYE@fLL@0PW(aYxLRCr?y<`A*#QgB??4m|L8!7NtR* zW>*^TJE;mcfL4%5dCJY;(G}bl`=DC*m;lI}BQi`mBG#z3OT)4Ms4~_Y1xNF#D%=cb z5F(x;-&+neVkvY_f>y(K$7dZ;2yo0vMD$L0=9{ad@0{)GJg$h;FO~rm`^z+0Wvb2B zE4QifykAi+Mp)HuHW&`R!l#eyDNJ*QCK~r)hSw6bt~twUN$dj1UMW@q%W2293Lw=O zo-y9%ZtxLobC|-53>^u1+$`=1jB-IpRVea8(V-B&EU~x?fItoHGfJI9F$fH@ST2d` zDogNPN{AIz8A~zHO+lPY6IACVFH;8lfJ~cU?t|!d)mpGa{s@8Wmkd@5o9>LPgh2=% z1rFKO3Xe(T9=yGLBuQd7#5h3yZKYxP7RT_F7cf#1nTlI#1oy29ftSOLIr|VyE>F&@-n)8g!|0}uNFI5x;n6g7 zbM^BHE)ad!8{Or!UPNDW6h~W<>gS&|+g1(AD{ERt>c8!=d4rS40t9}#w7CfT*=EO$ z1g^XkF{OEx40Vjf7P=CFJ zvbq9kySlB3gf6f#*JO?>qKHnryp+*JgZG8ZcWCx~xPuEnR_jCPJGSM3GlesZ8kKAEe83~WlXc%IQW^sN=UpP#XD~=^t27~ zmR|xm8V4(nPMFAih$V{Z- z*u+G>C*3C-@1Yw>L=H_L8N^-W86XmFU-!UMuGP*Y3~#Z*8e#X3AF?q)S_*zf8pxs1 zy_vFmClt<-pL;6pMCkx(wfS@!8Xwo=Zy`UX9?9_ujtvV+5tc9vL4}UQg!!m7W!DwK|ha&+uF)3uld2nF{X8If4~(=)zd#M$uf= z8jpF;#@E(td{Wk+h2SS;waz`xUFKnl+PGeV1zTfx883eehq~(Z5&y|%2cw9?dL%-tMmZ86E%;Q-m9N*-Yr*yC@A87{$TsA? zzH;5drb$}mI(`0~v0IYbxwJQ71#pRds01!$Qi8d<#Ipgvi}7zJ%PVykOtu4|Cv%>AQ^P}n2?V%Xq&{bqvL57BGNQ@Wo=a=S=fs|Km7lhX}4NHL?fPxRV-P6@2G|imWaLuAu<2oH$|E-zWzel}&AaO>NBu^o&h> zu9Wdpro;v>;{sYS-;^ccbdD16^QAhP54kzfB=^Nxbv}p+=43^UpO{5S_K0 z^GqQkkA$w!pB2bQ@i`edLvaKIw*B)=Tt!uX0$Gnfk~0d^AZ~AO^MR9Uol=XOh=rRF zZeu%2hSC${-0s_qt&Ffw=pxsGRxO^A_8x$-KZJ0x4tKZl(xnW3C7~~e@!{nCLdnXg z*zDE;g&P_rb{dYSu1IUxv*N?T~wjml7DbO z<+1_gw-`UZmt{haXZ-6hiP#%7t?U$+cdH5yd<^^*1S$+RON+kO3W_P9EEKwzV zO2-+}F@MwTze@DYFkpFvu|^4)A<)D~&l%hIAoJDOTI4qW&pr0ot~qCHHzvkrDHw!A z5`xMaV{9?RHH)-1|0yr2lCFe3L+Ojohmb^{#4@5d3}bOFDM&o#5sZuHa=74Q1D^25 ziW~0ww^}hP(Z&Zjp3- zB_^z>({EVd4^P?>faR)pU0p(cnCZlHy8;!Acc*JPW+4(=`0$Ia(koWC5 zJw`j&oRvqWrL1VBeTBgep@X&7_cqn|Ay(wrtMPb#xC5_)zV&5Q{;WJUSl)8RWG!#2 zv%A=;{6{QQ%$H^P!h7?wy>-8(jI4yW&Q>=hm)w)n<5xnqcK&RU_E((K{v5k~t7#SF z(+|-4771JA_YgjOyD>$T*}FgsKF3TjbYGA^BNJ!B1vl$-dZVw?ZJr= zsbz54Yh2WICT>1xE#mJVkmWoC%{h^)j;u47jBdM~kqaJ`J>e&N%tmQr7`(5r5eZNH?nbwu`CyKr$>CM57N8)}4sa@AR8 zXWJg2Y}cWM34JY62ZB6sIb%tHPX*q2+V_%}KP`nZKY9vLOGHeZTT6I=SFw1&KN3wMUGz^;i|7b?5PS>jmCQeR_uE)Nj z6{5aa-Sm%1^`EIKW@**%!PBU&8p))Qa;p)j6bW%AbjnCHJo*jGwKtGV=e@dS1WsqW zmq@-8BMYt$^gmX6$@rmDwhSRT&$RQ&gT%x25dA93Y1@ zzy;(fDTCnjkeGV3ajb~LTMOACnp;asj6|R#JTr2&WBE|r*TJ#g=SG-ABx1!Kd%su6yhNY@N(vr#N++9IG2hn z-urElhxNfWhZI9zoF+&_Myl!JD2vQAi8pBJ&oqtS&7MYAl%9B=T z=_2h#vbqIZ{)P2{ib)8r)vBD+?K)N>(d|`Mw{yPOtt8h_-A<=lC~(y+n-_g2^TdIP zo-wL>C1w9&_t{_3{XJ|Q6Nk#M6*`-(NvALpppwh3b~G5+diivQz&Tlpl|bh`86ZVk zy|u@=RROs07|QjV-YE%v*Y7^&s980>qw2$>DrkAyuD{h=`>fo`*4t}U8Tk4AT#0Qk zGSC8wc!GF1WF#?p>##(mN|3Y~?K$u4;6w z_Wnpb=((pFMqizV4;m$>XVv2!pdeY@UdAVgq3fC&DjSt0XT2|((R3=hTxgoIc5mzn zdgPjg6?bx22?ZT&8_vZ!b2-P0bg5(yI7k$|#$9J8XyNVomD^X1#QU{%DHd6BF&g!^ za8^oVCC<8DD1h)h=7Jgq9nXfz&06=^H>8PELW8wQJ8x`2Mw*b29zUauktWzJJ@XxQ zMQoR>^`3bf^iEBq3AR$S2VO#Z35X6}L3f3lmONseSko9Q%4Rn^aCKAo9c>lmr=s{# zg^y~Ii|6>pX4lC6BP5C-Tcz{f5rJjZr7iN7+mj+)V%EcuSzy6dMZrlP3gTr9Lq@{ySWWI}G0wS`g(^A4|i*&NEL zPGy58zhXA_5Vt%ui`Gi4)?DlInio$~j*PGshbHe*jS2>q7SY4eX0FwyM6f?(wfR4$ zJMXpCF6|Zb?{X(0w*UiPRIR87L5^T`6| z(j27t>@Q4$tdKI1X+4D(I78&$4PW`fX=ZQChb)DNT=W)~BihHS=(;ohxL9p7bD!Q$TtMFt0uc#Lh0T>#MkgV@6M8mu%|;$%1TMF z3!SPtO*Yo@?!0~?DLre(!{pe++GHaVhoo#u$oAFOcDUIaL zSbbcZkB~sbF>ieO=Mx8Ju6>6&TpKC|P%Z-0B%TjkJJt`0mDD~_B)su16EG+6fv*R| z^(K(Zi(&m*fQzqEGqElx37k|_QD2Uq_crmc)|!n`5Z(xX5bqzsEIn3~evAmDTDKA~ ziAebr3z)c1r|Ib;Z1UDU!)$vBT@i2HFZdN%KH5PZYed&*BxldS3NN@nG@4xX&`#gl z{w_yKDJYE>)=Gq*{fK#jhbH~?LwTP(hg4%Vu1g_Qmy>*S0imuG2y!Z}v$-MQ&*>XKeAR3YW&C`p8h?nH1oi&B} zyk;a>Mzr9^jupebJ7;C)9T3}QAREl~CY~}%Jfx1LLY9NKOJ~ZV!W#@8(}KtJr7m+5 zkeSLbv}QWEM6UBP1AbRQY?2yYXlP{hI7fJ-YEED3F<*zAAv(!1bFd0h0DE#!gez@o z-w_A3*%)1W#mc6gB|?Zw#1%*Lm%HtoPfR=7u>pYsapg)7r_gHte?JBdF`t|fM{JHW z=e3+YrKD+FmZh~un+F>|n8==b)YqJswSVR8ie>y$isrnO^O|{Wtn!%1(+?Tn4smpd z3Ob!E5XT59wrllhyG@WDQD{>9S5zLN#s|(<%)ziYiGJ75{b4VmpN4F<=LD%PA&;X3jo%zOWS4s z3vaU*N{|I#_Aqrw&$=vC_tf3<;ITXE4mOtYep?m)NJ<}D;e3n8jX`U|h+Kz4s;796 zD|{j1-$*?Th>wMjT$ds~bv-0SDRvRX5+De;B@CM7YAF!hzU6s^MTc=qA}}t;n`emA zEYz2zv-1-otA{uU=G|@F_$pXzX*vO&ZYG0lXkt_(k;kQu)yjNYIj05OQj}6Df{`8F zhP-jVC$fA9kI`ze;Pa$T^aKtFLB))~;k`VsXZrohNlesm2Qw&p8+{ zkKSBgbsLJM2=NbSGMrp(zG$oQa8x^{qA*$l-hIyjy6whmRLo!EtC_5IOS|B4)$SO% zSFsHg`cC&xXA$C~)^o=cn-X{V_zD2UmJ`zq(-3pBJ^`Ga19*|kz*CBVhx!(2Mq7oXS~30!r>xFbv1%G6v~eSCav1vU)`Zhk5%n@i5@ocX1p^*Qv=y4V;u3vMR`Q(8 zMhBGX2~%$RT_-2V>9Y{A%gCRELBk&HR(xfQYT?Xp&B$x_;se=h98>li8P>HSXD+eh zi(FdeX9jX;6ywc(YLT|9^5;$xpBs-+C?)5+^unyEg_FF`-833oi(Vr}agu~| zd&~AD#FcDSfz=OTHjJUxWQtwOy?S~2uJ?%bcYN?`3$z>4IoHt+&#qpGNQPZRL&{fB z#o+5pr;&kg8!^E3>Y(Bj zIMj<$1quflc?>0BBI6mzWMN#Ou6^<>s`2_L6pc%G5~BQ%&;!2Y!h1|HdX{+qMU7eB zRx59qy3M;v7%JmZ&IP^*zL;bVi;9j+JefIte!ubEznwuVm4+m|!mlSGJ!CAyMFZa! z?VYeq%B}W6kT@WBu0j9lfI%fF+?+P;C(@2(!PDTsqhK40R+_Fwx#)eEWm zh5#&LKdHJ-s;(bcHBm3BGPr{JzE72nRux}kF6E6oDIb+M++Dw2--kPj**+mv8jrDP zVeqBj0bm6D##+jtidE@~WpbYkQ{+#lQedgj-d9i+T^*Y%bydsOIo?t9*s(h-M8`mu zY3(~4yf8+q(S*Lsf~gYHYRg}(?!(3XJ&oP0Hmez9(pi4=M<;&52~@@tZV-#hnDr1x zu5VoCAG!FN0ZQObo2_r!AJ* zgdMWAC7@Jmd>ZF;C>D@v+o@(>9dba*#axBxH*Ll@2=~LRN24nmq5nJrtfFgb7ZbUM zOV7q{N|G#mV*Qe#5ytA+O{JEqTyGf3AvE4NO*0KV0L4Z z1)m-`q{Bjv9(d(UT(T!wkSIRH!lpZN~_!$<_O zEsne`owy~WYgWv&n}9nTO~3BlksdjHX()Zo;Myahdm^VNnnNR}Z${u2%8H!6J^VF< zaR+8J42Ny4&V4QXpR2#+jLmh1O!FI&Q`MnV^(FinU$5o0IkEN#HJ1;Lym));*d2~g zrgsN5muE({S7>Mh`Cl8Z!iTP`pqAA_Wt!ihyb>sOID~Xd<1|+7o z{8JI`1YAZkw+QQ>fo4ICIooN`M7azBsfaQvgSQif6*Pg!M=^C%=}*hrBx?*#_oSPt z+#eccx2$BXs`CbE0<}BI36r8mQhsp%VpmR&IXlr+vE9`_pTg3hwj5?O*k>$~kt(oG5id_?{5!mz-H`FSwYgp2mWzEIg;_ zMw-uNI^I`|b$dV|OmMfLhIr^2U2G|R;VW^Qe_=c$YaGo#oDkQ&)-WfZk~LtbJl>*R z5-yCx15QXYhSBc1dVFoq+GAp&BjQ~0A zI#h!~lg+@L$=b)qaj%HhY{kDG<@BRGu$(lAuQrK7gHKYnhC3C^+@VX*&iyTc%!g&v z_8!wXI;hRY4_;P#JWPfxGul8IlL_x{aKqi!$Iu(bjeoCKNVc!gPAP=SbHA}4qz8zI zag?h5zO^96s9%X?28%2rtioK33?U3$Wm)h-sz_R)SAiTe8I*qpvK* zxJnKtCNeBXyd_n>>A{UHL5UsUSlB~=woS?5?JB_3lak-?@7VSs$y*n#*%S{?iPk(q z@g`mEHeG5?BEYkJ3`|<`)^*WL*BUfwvbQ1h44a5ts$sQTC+&EjpI4eBxk5k93qP@J zP=0tFc>&0ZYah!in45JGA!&Jno$wfs|AOVOqfyo)h7J`HSQHo-DecFVU#82A6)!I* z5!}1Z?!4fWOGe4&&$U`I=1cWrRb3^U3(b$#JVjf`R1bxQb3vlH+Z`#Va9nd|NGmu=(=dC%+OPJ~fKqA~0emqG0eT`g4S)$^_TiOEryZ=2#hJ ztSBYE>jR8n28&bj4`B}ojf$DIxW+yr72{=_x?ujT^ZUaMEUy|FFk7Dt*sjFHV6z2U z(VC6%Pyx}38LuP`L;Wr}ce|NP%$H+BtICVn6q}a+Nh6=5H)kXy2* zx|7raf+fvYA2^If*~FKemy@iLnx5OpYpp^+aX2aF%H|M~th~c*?gY5(P|A#Sqn=vV z^>d5d>*#1{rP ze@@hlY{5fM#5@n{P9&+~iUADguoR|12P^Q@E+Z{(xA(yxN>|~n2~6`d8^X|f8_)cV zRlU{`F4b$EK7Ran4p<&KtaEsr})We%((EYhZdndiDZQ^+lEq zw!{;ky!I|1-Uy9o_=zZIqVIkleaTsG{XU0oQPyqZg#2bOEmjeKvl{ylm%~+ z0qR1%_|7*ovWQ%djI-VF&t&2_aVv`eKLa(B-oyiCK=>M4!Ks`^2trF{FDv{OMt0ID z{!14w40MuNUpgrM_RNMXOhx*4V-s$O5vD@Gns@aDt)Hti|jLl<|goo}lo?xKS z8lR(4+)rSdkv;nAjx-mJT(qDCub6RiiqgpK)c82kTyIf35sGfgvKMP4eVZPrZJ=Dp z?D%W{W!caRSEtEPdW~zWp)`k!)KIW%?HfvwtXZXKd`jQa#x)m?aO$Zth%{FV30C>f zPUvL!{@6xgfu@}kq(tq#TPG4Rs{X|C7g3Oh(&bv~hP+P~k0%|@$;BXkE2EKZv_6|f zhtV5BH=vPZW7yvq40fBHw%z8X(#Sb`D6)(_k~@SmEXMp|St3?nK0H0h21!+jgE^pl zfjcoKS&0$h-Fo0o3|1EQOj2aROR-QkRnmY2iDS?y5Fr{%E}d>;aK5U$D?Ca(CQwyE z!62{iHr_@>sO_S)ap>7z!Un(?HJ{O<_v6u+_gB86-L{wM2T!v}nCqn>t39(U1^qz0 z5(BpZ;4N+eKKu}@X(%@<%hZz8J0zVUy%_#hFkILfCcFs#OL1&YNNR$;i4^}A&wmC{EBMWjq10efV|hr3kVyEn(~;At;85{lQr8h07CD`8mUuh*!C6#9 zC@u)9fQ5;MqXI&0QC4&66jRf6-G3hrA{#pwt>P*k>0RDmAMRw43aYti-^U*|v)J4`iix4o9Gt)IdV zTe2~N1mL-3$3`Gyx(NPAbtie#YA-v%W#yLV)VjyFy&Q$OQOCKG79pFZx=V@HBFxg?$h;<|JPCT&+ zr*RXr3YdTH*98uUCg**A-J`NCxeH*hGj)F`=6h6*%UyD~10htU95|P8z^_iv_YTN~ zw?NaS4u971CpKNvdUN&}_2bo941_}C>Uvg>UeMy_-qM!)qD_-p{M{6E%n5(QsZv*T zMBFo+vUUnbkg!58lptd+ZMXR!EFtuKv0^C96xydSqdAZURBzQwGO&@Tez~|*8J?6>vVpVBM9);iZT1bW&*}+?J08llCk*Yh1}a} z!+nH?>3i^SpKQ@S&DmFMOe|oNf}4HjUtmAyX z?fSe_(tr}HW4jbP*V9%O5^n%7S1j0S6p(vCj1snMhbMk~ zp~T1E$VaRcH#x#FuC^&yuuBo!>$B^}>KF_(q7Yg2whHDYdg=`0fdJi}gpZbKY?~+V z+l?EziHM9NuZ+t%n+O)9Q6Bk@AedC-Kf2eh%Z?yJ7(NaBMNeKexW%R zt<1b=7E->!C&Pt$MLJRc@^Oq*Apl%@a>EVo`pRR*xc|jeZI_Z_MNZCGJvMT(u%Yr; z*c~}lNPulKMgIP(3DH(U`(Yn9B_kX36v=aIMrz#~jK$nT+`xOn_jUc2!Tnm&>aqaF z*Pi4;KfjSD2pGSf{IvZ1^>+R#%^$RhKTpeV?~_gWS9X$8myVup;>FSwO+BlXR--d6 z-Ebz}*KGXfNI{N-uQ8)WIz4DDeP8~;7ptvA8%o(r*rN}g7|_5Dim|)>Y9kwmOe03i zOyxw%ielp)$X=WcxJT+n1ehHfoy+%AY<{R`s!@JqSx32(as-pGix)S5bJ4qg=wMDyt#`H z=6L#>u38Mgf?+|xH?`2`EGE<*z#3gyfb>DKk6KFdWO;YZldKr$t4F=gNb){(j9*6S z&uIQi`KHfG1D&Se0MTU*-YHr(e*T}nL@s#L#g&~K_*V?4+Pr@`b>c4ABZ$^R+z~Nf zE^#%H1FSl4&7k~X$I=w;e~3pTiWUKBIr9DEYzq!?ZW&qlE;9__^pJEsD-9b>h&66S zy@DG_T93JgX*I1924TNeo;LYa@Vmz;(XI(br{%_$XSVn=7`e!xwB@d3tWnBZ8CI~Z z)ccoUhjW+n6>Uj@`Ix@4Krczt0tK)&QryJIzug%gWK=O0R@0EIyz+`rqJxYZ)BwG; zLYWW;-FYI$74QvMB8Xl7rR$aw)vH!Q6aZHovB}Y#gYiK2i6zs8yeYwrCRcZ@({A&% zl%z|48qvT>>@Ghsw#wBC)=@4$kR_{wqXA9@edm|$7Sb#%+=V#YbW5YEIp8Hde~}ya z7Jr)gX>@tIBQ#DZj@SRddXnl(q^|OO2Xi?`BMUMh#kUt1!u?$GArET!;^1hfjINwCls+P$^IJJ5)Cy#{Bs#IC&x@Of4qB$MMQ<-y*~ev5>RM2y(&iNPK>6+%Aan?q3k1~OC{bJp|4 z%~aE#mGS4qPlONowdh8E6OS0v+@4B>hFU`Ffy2f0qN|A#CqvSAhshn+=2$VryEFQ@ zGy+ft+ZJfnL%Z>tHcsE*ogyqmw7mmbr$4r;pa;~%mbzBbgc~C|B<(le>kGBTiIk5aBt~lj!f`Z!yO{ z^4lhcESD%aCSgvAIH`EMu@s*Y9urxCzruMD6?PV-mwP{9W8&ro`VZR$nn`sIxA!k2 zX}zF$P>=SIdQT7kxsiEW6FdHx#i3eya3Q5*WuL**Cz7jMwj^%Z)&$iLb_ICDSD_YL zd$l9;<2%Ba={IruGvvxzDebMCjwy!Sg8g3Sz33^EB*O*j&jFNY0bGlmN6sDmF4(i( z825X|42CS%m7*J(q+%Wxh-LdFKudmQ+bXa3M`0$JkNfAt_wWP4dwTxLTf&#;FS!ww zWuOQQaFQ&u(F5u{E7qSwW^`YyKzz5iu8dk{F(o;Vq8M3)FhwM?3a0Il zHg5SMBu+QU24$KRnPNEUtrN1^To(&WxB3%Up-Fl*9_s7qJ<9ZrC@nD}@luo#-P%{~ zMJZP?Z)ioix9(T`j)4!=EL2ge)$G2~V(u7iPFD@b!tK#F9JuSEF&k!=2;V2>QQ^VX z8CG0>`?kBNbWNOTEuD*bX>3Ku+IR;Gcm$+Z}I<@rT zbR0>sxNbZCM@uvBRT$7hf6>4^S0BwJ(JJ9mpxzJyc(8$4HePg#(pBSME+pC5a6D)* zAX|;$+he<%14VJ#Z4Mx_!!)qMudQ69Ey2<$G$Oy;4{cWJ%;Y1S76wYq$xaGkO&3Vl zZgq#oMrJvk&4DEHD9j^$%*|T2L_WL>9)*`lqR7210k{ye5iE`bNz{0-)3RvJuInj_ z#6>yq7?&Mk-Nf+-DU0&CVSBzN1+b(x?g!aY>kFcx4D@Mo;gPJ=r!QZw^=`>;Y2Zq{+BWb` z-7)$s@};=!s}Lf_pVxvKSi)d3`5Ia_@7HnECT!#>TRCSmAkUP`Fnl2=%tH~#kaTN2 zojRIUYwSu+6mspZ#r{><7>9;L^8beU(_z`YiZp79UF3eA%xOJ= zL1cUO*~4cbKbO~|48dSMfmCN`h)!zvZsU~{_3RFN#cD()5UTFdk$d!;c=U}6!@&Cz zLlWuDO>Rrdd9|#6vTP*xrXcDTH6UaVA^`3*3TW>7=pJ8Pd<`;95qE2!%A~t4;sdu| zUkBI=Zmiy;U+03HtVytK+H1;e6E(s_{CCgC3$d)TM6ADD&cxR8 z&tlm#RdP{rN7%cKemNf9ktrg*@HqL}5@0QbpbkvrRccFMx;zfp51YTjek`PCGZ(S4 zyq~7^7waj=mX5_~EGoanA<3JMnb;ARLT!Co$1|Dhik%Q-k1 ziLIu7hf^2mk1M5Uw25XHXpa|BLVF07!(mzJGzZcdqK#Jwue?H}4$$kiaV1DBfbm=g z(kJ8ULqcyTPkeU9z^I8x*jCDHC5HWsuoKoAOMC$lq(Tsg6i!J}p$Qt0_NBLnP;KZ!*fN}O3eFGZ~f2IyQ7flLjO3BZ`T}+Uh53q4pRks zX8(kQPM(3Cr(E$3G7p6f6#%8BBDR@tHxc5>J}ME=zL}RBLKrPxPOg1Y0Z{uOg_2g@ z&_gm<0F1EH5`PY#SP)rkUfac?JQ~0klh3XB)vYyC5L}T6Kzu!j7GLD_7^}vxR+UY$ zMc5wiRjKowpAJ76Fb{~9ZY)wDW{#_#9aK(3gr1H60Rs70(Vk57%+V&7T&v<$oLH8n zLJo39CI;4Al;UC)TaBk@=*pK|Yq~O62}zH!yxlvm#d65{A)f)3OJQ zj2Q1Q0BwZ$q!Hu3TRH5(Hg`#WO?wSEx+AAY_7HmteBzNmnm>}&^wzFr8yPRDtXix9 z5-RY%FeFE#O@PaG^CnU0=0f6MhQS-NS959AX78Capz}1VTk-EYX&hJnDBBfGG{p%> z5!~(*6?&UmrDh_1;I4!a6p(4pD{Ec#%Z6a190BcLgd?dB;2z(&tCt@{Pw5alXOK%% zuHip`1?(P-`PjUfgFt&DK*cEP~uGSuUM9O3{bz%avY40izm~JBmbVk;Y zR^%4s#g8`!h9||AK!~9uD@jx6p(Wr}SmG1#LUUl+kTPGnv5e)QA(ek|D`82h6r!J@(BuT|M?q@5rTnGtf>O|KzDI9{zRT zt&><*xpE+T>=io%zcFBWFHueQ4X2()dIGs==qdx5i7HF_`!T-D?{g+46GC##g?4Kx z>oq}WnPO}b5{KeW`h#2{Ex{#-Kn^EHhaXqn!PU1_EGFp5 z%C>A?;?RWvF2lG15dso~*=lAeFiS?6AvRC^1!fU86Kp~@o=)QdD%LgC&vJ)yuXdBYbR;Y%Q?}&u zIs3Y}c*L#H``k%T)=6W#JXXn~ATm%s2Il6z6%wbr`Jjhw_t3jY?Z8)YwOwfnmlR|f zONjmn7R`(;$3n5i?-JtGN~El8%yOELUqX<#$te;D5 z2b`6hK+x$lO=K<0Y*UCznl>ugjdM;UXyy&U_JuAGFwt-eU8RDhC`%ks^qnG!0w@x*4Lr813)Sa9u81IJ=(;X$94oYUky9DBemvBo+vE0I{QHfKck zaU>DiD;43PatmuObxmL`$y7QbzrwZZJi?_Z1E{V_-qM{ig*=g9b7YvbNd<&uylHpQ)K0!@8wek#oe%jhnrkV+8lxAwXv~mJaFxlH>Ajy3r zRVWAdIs3#F@>PjHTg1W76Aw+ou((mOiaCfVks_ggOcG?1f=218@Fnxd12i_<+2QmH!fffQok2yW3^8V z3_yT&^Rii%tVD7Q-7-%3b^|Tk)ZS0oDReT>u1G$leU8yQwm6k8|z z=`WdIac?0nBW2likeYe0{A#~5~4KScnqizX7xj?XEZWN+h!%7GI!Ct$v37K!#r8ORVvV|D&&x^u*)K>alM>_WYZ#h}G>4na$V4tu}(L z`cSOZz9N;T=??(9BwVt@0n!zwdZQ2u$fZ+~u8#pLG^HE8d+qDnEyPVtr}=WkrqK!)05<+aWnwiC~OAr00nsi{^+I9fL+Hf$w70+~< zExiO*@>9IA-w9mL7YUMtc{+`#f_1c?K2}fAdFtESJoS`JN|K%PC!ipmG4axM&dW!c zsc2zsNP&akQDoGXWCk*5*)bGkC6isaNzWG@diU2@tdV+2_P|0PQ3yxjXiKRQJPQ~r z#V7Pz1!GC*SS+F(EP&|Mr?2c|JpM@a0ldT+_1MRU{Kw>Lg@8qfzL8?8S#}#EMmI~-AueOrG@4N1Cwhv_AD{W%JqOCAWe5=14c#?U+)J9EPQ^&2C<-&e#|sXB%es-Sr<;aADB9t72d4F73>#Z08%wev z%5_%L8U7};OF4i82K?kd3>Cjs5fY0%bF9Msf->PmQty(BwMFa@9HR9_@W+P6&5QLB zmf4Um3p?GlMfQ+~0g*fhEsA%J+~@igp($KLqFA1|u%}e4%R8NK88`N_j0j?iMG9nG z$CFmP*BnO)-daVjD=v}pzn13uP%k|F*`N)zZ1?e;bpcZpMtUNt-y^}d_#EV>T@awjN zA0h&^8YFUaLqm&3Fpy@2FJtc7zXq-6v(dGa=Fy^H<9}7&akNS_{Lyjd%mUfS{i(5% zL<4^ok}6dBjEm)nspWIx@zOtCd;5eVz!=ry^9V5l;K+3Uv>Z-dsi+~GMTP+NJD8Tx z6|@^adPwFK!a#s{)HF?CwAblE`DUu%qCb_|O30ib_y%OMQrZhHT?`wlyOz=>BT;G@ zkvgc4{B<{VsALK*&mc=w(?~(CQzA)7vA)lvtwJ(u5Z z=fD=Lo!kCPJ5Rmc^_A_g{>rXzmfenKw=>3SXW$yV@YLJp9ors~)M)L-8D*p5t&`|* zj4x46hGmtjk_Ow2|Fz4t@L`AlQHg0BjSpQ`!D?S0Sv|<9kN%2TD?xzVar3f#W1C8% z&7O-Ly&uL0Io+8O&C%oCQQRwhhF<)+0H1N_FKo^xn!HmQTmQLQ`t(6()L$Px%Mewg z{PjpH{8i|JzpmTussE5xXd_eJsXEryzu=c?FR`YR!gTrw1wu;;=O9#B>>o`a*NU~r z?qP!giQ|8a{o^U#C_~R!ART$;@!!V&v4vN$C6mvJ>I-{|e>{})|ORJAKOkOXD!5$R2u1j&FZ5Vk4+TjlBT&v6sd ziIHHj94|KC?!Sxs>KNheR&`s*l zt~MS)&8M)B?W;-7*#u}x@pm@&G&)isdOMKMU9~$jQQd=*v${vuZ{e*rM2pJb7F9-;RFB?mm-f~k z6L^uE)2?x+T|@r1sB%)H>wlye`t%xKU5^|kdGf?uQGK20-?TB_+NUYe5|JnQuWLPz zjP$A(xpVf}w$J&qd^O+GTI~%G`|8kqy%15zei9Pu+1}@Otf#8}P$&N;@7N^2{nMi@ zMXYjs)GB=1y?^P2ggT$K5!DMuH7)u>Qq0-QS`7`S>Wf_)POL6+1`o|JAEo#6u9TZK z4HGd9r3Fsu@?Y0U8F9N!D`S@S=r#$H-l;`})YhYm_E zC6}1*gO=qy$46x|EWK)4a+N2!DkHh7!26foPOegd6#*Kx_n(QYr|I&vH1U)rPj@Gt zWO~L;_S2kfw!#O~BO>}k#%e@%#PiVyn})uW{SMU*;G$nc48-~A(xb~6Y>OJcOwbxU z(;qfnrf*N1`@HKEUzsUclM_){rcgr&MXMOyTfPvjpqiOuqJ{|uPd8M`O zGA7`9!~$XRlBT6#{9~Q4XYUjHv2$(xa3&DH?m}d&O=tjZuvJ>zy?SJ$07h_olpyxD zgJx5HsVh8*RF2@aEu2o3SW8_D!M(DpZy~+H@<&VVYG*7unmtVDw&P-~tPMp0Djo+- z;)k%;DBY!~O|q%i{(;g&iIdCNsC-^1MhXCV8ODw-*;4VYgiKI<+)oOHt`#y>>`=Ef z7h^nA%(o`;=}D_Qe#2p@-V6Mqn-#owLpEGNxLqrhLJ2THKoYg4*AYW=s($l1?oW>? zrJgUQkT>JpOxMspjn*u;fJSXzFkXr77Ik;ifU)I>1gWM`B*TosYBnq}&`%i9(#Z1~ z9ii`_Hssd3kXgwx9+rDfu2ySyPtITki6@+DUTVLULR-a&fc0H1U&}mXb!C)1*Fz;q zMO$fBHH@YCM0UOkzSmp(f&9d6;tk~*p;vD~P+IIp2$>cSVENeTXem~75|aq$SUUCI zbBA+YVmKU;Kb1%t00miHk4Ve@=_KZ|+&8phbnH#qB20-11TG2ex7RF`{jX_KxyEvO z*bp{9xx{5$!G(Zdic!!jB>N`3SF~62!&|&DF->B&ZV>^AJOi9_NeZh|w#m2+;1$L6 zrtokMPD*4=T*BU!q-=USG`_gRY&sW2=E$-T*Rra>sl7b*V03rtBxxBe>=c#$tR>b5RcV&}Fo;`9-l&#lnE=ZCFxtW=2vxxV`IAXf{53pWich zMuzz@u`CCORkfBXoK(oLB1yr^@Mmdd_;PM+mlg?g5#uDmXU>)ny@vLo#b$YHl|sG> zQ?k9h{=3|3RhjaDsugw=+@eT9aN?K$v(6OjZR7kRj_;{uayrtdE-U385P8c)KN#F2Ar`SfCdt zL6V3$?%tu&v|leSZ3z^~bo)a^NaVa=W3;BpfjfMe*lM90V@-*vz;*3JN4&ZSpxmzo zO2Z>fzX%c4DboG?Xfm6XT6(gya+rvFzi>#5zC#E7Dh%Jio~k>IT{&!XF&6S^Qi-@5 zfm|t}_)6Hnw=i)sG4b9`=0GhS%TIkNMqk^zgm1wn;oMwGqLG`eK#hY)0xH67n*ev^U@r$a>&4-a4afy0lw z?yPfcQ?w%;-AS}}x+<*gI=(S9;sqgNC-0K9d(GTICyxICB*E5G1bO<}cN~x^O#kBe z&a)?m23rTWA_6Iq*gnA~sdE4o7qS${=8aMVLzVfi!MoSKt4zl(A!LdIcD@&A13F#_LnWOo16ylYKr0zT}1f7H?2z?_pB?gLq$h9Ed5}7RMuf%ya2qkY#%1w z5xd_ls9sExG>o3G93o3Bk2U-AbM4rQ`2^h;iTx?#W=<*A|7>MSXintXzlCSAghAXc z_%mF;J`K3UPD@l%Gd$*H`WjDOO&d%~qI!lLa#o0SD?5ZDR(?Q6*0ix!SjdUN&K{q! z{sra(zNqNc1E0k?q*b2C0?+AaGm7@l^uXs@@#kGP(GnM6f@@PrJd~VXX@SH}&s+No zrU|qWjtNl_L+&+ZO%-NPg8Q!Jn*?oboD1>~XGB*MM{TG?CTyG`FNjb%(h;86co`33 zy2phfSLC;O6vZ#z??%cy+_u+n2{H+`_!fa0Lf&)Q4u%M-EbmHrCsM0`G{EdSkYP9#E*T5-8p-xp(_lig5!dwt+`y-Ms6W~(+a*-2Mzil;o+icB<6+E6^Q zJ}?s5%DDqu~hQ3_DFW{0XT#Amz`0!`6RR~_KVmbNlmG85Nhhnj(s7d2DtA2_71$>08 z9k&$>`VDEuhf+ahOi=ZYW6vc!hs~Qb7gvuitwlY(E>EL5`ReICc|s@|?%>J*HrtVX zAv-%N^qSG|R=;GU|BT2rBm!|Xe{J4c#V8!K@d3Ia_zS_nHoAx{5`+cD6l@@;hFeXq z!ogVC)6JrDxfiuvcx!R< zzuKI-0(%Fwxs2wp@q3(IIG}sP#NtpgftW_4>#d)coE8U3Hv78nXPH2j=Ymv=W$ass z(z4GJJJ{}hzIZxOO}(*B88nbU;(?tmLJFJ>U$AhOFS%H9>af7 zNJhQ&qJhV>PdL;W=!u7AdTWJ^UVz;M;qN};uCcTCsuntogD8(7xR>aukYFM&G^){Q ztEqffFA+IAo5i6@HPSIU!%h>??5C2~MT|AM1q6%8aSR^iFj8vz6S5Eh6gjxdIvZS= z5)Kz%NbR;#4Cqg8duAPGc2HM;2gSgH3cQ_*O++|z4;G8cJeI&TTGCy}TK5$%c! zK2%yOx6yM1e7KUOx;->PzHPC-8E?t^@5E}hB3L_*e)P&G;1Gxt*4-T3`gdddTSBPA zzC9JI+^Vi>N!6FBNErBmj}VNB_GNoQ-}i(8nnSP2G{zgNeYh@L*|lcRB8> zP%L4&RKZ8aH;yvW776v@tv#RG+*V{n)=nps-S{%P#9rqp_$c4)jY+Bv5iF>^Ny-b^TSy*Nt?WGxJKl=c**W+!1K zR#i$n#`jdU(uI{BrF!vfEik*MXiSbXloWR)%DT9hDNFoyia(EV5Y&vf4X_YMM+WFm z*M&7uUw?w=L(q5GQK_s~<>H*5m`Ul%&U%)-WT@lwHT`wdg%HAHo%P%P;jH@{d78OZyWg}VE zTx16}TN-VG>}leecuV=YHS?f#V>PYHdrU66U?U*YgAG)5D|A6+V+^{j-B|E6SQ|`A z7%VJg39i=&cWKPSTT7THv1B{{UOC#^qrs+h^EdFL!}FgdfP=Vj0aH==nV=dIBq0~C zo3RJ7s}QA40=xZT@FX4%UdUOg}x{wM|_Oa`JgY)#C~#$nJ1RRvr{}=p{XVL z-(1ygzS~oj;!6&Hsz=2T8>L-mHrxMRY*}ss*s<(LT?O!Z^m0GlDq%0aJgU4thoINS zU#YUt0@xfE7b<(^Hm(<&$gg8zWTie=R`Fy8IGUeEf?0@8G7isfbN6+7FKw`G=3xuM z%zD5F8r&ga#X1=o)9c&IN_D@A&Pgo)ls`(QD-0#()^G3||BtYD0gtM@7XD{46PQ4B z50GNes8P`di5fJu854D2GD#2uXbj*5tzYdNZPX&n77zvoCsVVt9rYabR4i?2OOMpj z$`O>yQAmI$Q8_k1ia|jlP3;~xS`-@)m3+VT?g^Ln`#*o4hs?gb`@ODrt@W5yGtn|pM;njL+L`Ea4~ZfB||@KNfne56{zd}gxz1_HaVX@j`|53!V}aMCeM z>fk7DZ~CUcnmu6eJ2ev`wHL2O2mT@U+R~f6E`QKv+?1C-e93@jPc&4HCi$m3PB~Z! z*2ZjE6vz7z3$sb|QVc>$B*52Mi6vgwhP|NGXrZ0G;eg=R3}1RMgKOvPK{m5P&5L3I zuzTya?*DLr>HUMean)oHB_n&Jq@kq-(;V^8xl~bX=&q=b*=U4S5+f1Veg+J>?zaBE zTA-64w9aA%8}SMVum@gA>0eL@e^^crl4&C}c-8qHfdC$|TSw1Llv(@G}6|+ViwlKU*&04O8 zFWiR9sC^nX;p{& zrsBif#qz`Laq{1lImR>MzwCE7TZiBP?c#)kHS#3*yDp5T%O?~>u@LrQfF+>$l4_`n z!A*tO!U--+l(`o_65p(NoOur#tqOqh)WAdy3KKm5P{v`d6jLpHm@1KxCWM7H^UiT& zJ{|g0kQGYvZMau`67G>7>s~l~qgB~q{eB;p+awoor?cafc(@7)>%Xw%!h9O_tI5_q z+^k`1`3UPQsqJqVDxje~DRtLqNuj;_nWw%jT*UWhPrK@qdk&=MeP@66Os@96Nucj7 z(B38Qr}yujcj4aH=7<^I9N&>ka>3X4w(NcI^#idrdmr3PtVzQC>_-}+uP|aO4?MVn z5PEw*&18wsie7V?+qU#vr19X2pB?mxeE`}^<2Y_@OLrlMb1j8E*Ie@k8`l^My>`AD z!6c6GG6D`LkKe8g7zYzG!0)xskspNIt7R1X&r@b!&&|V}JMn%0Hv>RI*q6nZp;PT^ z_39J*T8nfo{$W=1Miq`Fjgx+V{CIdtNqQFF>0^K>Yz+x~=wFqkk62Y4)wI`klBf+7 z6 zy(8a$#7rIZYwNeFuUn6Ka*k=QeI=h@JC0icwMCXj{M)`d@pjakh~%D7P6i)3T-`QZ z92Ga{0x!9lBOH)jRd2L5>?#tSvKhQL74>(IYw4@*yEP z%kf7ik6S1!acnf9HIP8;vL+EZUVH5@G448%=*cmH3;3N{1^k@7#H>bgTHz%jNz%2( zEubZN{kio$`os%uGjc<=xyxdYV9S{P86~d&y|h+j5&^AtM{^El%O8DXd>%i(Oea@C zt2t}O#>S)A$b{hvpmw<%CCVXp0svUaee})J6QaVpQvv!f-OsYGW7f`JIfRXweVNDBuMnxH z#fb0v7x<&!O_4vGDxwH@oi8;f3#ebWA0fz0N&I?DoK*1>w7PZz$;6=-v@MgnYyfK? zJ%KaX$)wo~(E4u_l=ismg(&Ek(@M=iE71ZX{`hg%tnAH z^q(>-r-In0W=VJuGMwJp9{z#~lwt%h5hxhsPxyFci@cWU90Q`b|^M$p% zPf!6o>S^eVKr0g9C)qcDGWO{;sfx9*b4%`Y>1AeUa>Jfn4`O0h!!15y^VZyoU7k6q zCUxi9J3Tk&%Ykt?vNTc6(1Y>xz`9o2pK+%>c!NZYm6#z&s*PbfJ_(zI{E;8$B(DhO zy;;mfLZ^ofJm%3yN)8|E66JVz+N(@<2gk#iV*y_d5~{L}CRLIljyYB$??nIJPZJ&e z@2BUTwfD_&EeF#3yS1OR*xvo!`@09C2`KNmA>=qd-Bv~=Yd@6%a@Ih#Xg0jk&g6jy z*Kk5Tk9K%YOh(HumsMT~%qa003r6=(^ATfmKm70ZLRr9T;V@4nbN`qAf5GNb{lAF* zZyVv%>(nyKsYP}7Frag)yP4zEY16=l?kD16bPTD9^dNmR=QBap94eGPz025Dm((#S z{VM^)LDnJOI+J2Z#82nlC91#9aSHP2beJ=VuDn)-&z0$TXTJ~%X9-Z*Nxp|z;#hWc zegfTMqOJhH`$Ex%4YD4mkuf3vsJcA+jv8~2exs%HBqb;(p3@pV>u7gkm+RHp(h&Gak0lTAraA3E7&f#)zkI}tfk{+tbX^x+q969Qy?)O<8Yws}U z`?+;e;5`cL(|hb<5u65nvXGiAWS+d-zr*LUhs#yNUaov{^;>V>Z@8XxY=*wW`t`Sjppp8LEIN%firjoDZ`RTrB65QeeIg4}& znZ3!|*Xlv;IMW-reKf(WX8MS#Y;0@JGWJxws3otHG9hnZLV=b<2keS}Sg0kx%Z0?S zWPK3hi=7Oph;Vo-tt+C+)Ph;{5CNn<7f$E@i1v*xvRK!OP6$Noqq^vrQ=(%I&oC@R zL#SVe?07A?_qu*2)*>#Km+#=tR&rk2aF8|PXt`3I;zlT+752dY{tu6jro}!~B_JET zbSkv6(1pox;zJMeh3P^d4=xdcxN^YO<#|4e-}n-lu8&zy&}I3CgB4orw!uGTBObRt zyMt=m8p10WULM0^Cw{;q{M2)s&xs#@F?wG7_`_tLY1#M!TwOE^k5c*U9}rQaU6def zP5Y6GwYnrxW4O#LL!3|`x}a`rt}M`WKT0cZBHWO)jXS?NJuiB;Vy}3v12?ufqg=~H zU)5l@ag@Lmj}#l-=JX;Fu#9uyFoi>+3Tpx!_Li5& zMu^<57h~N#>m#~qR2{O@1F|jW3nkb^o#*IOB{iA2i4d5Py<*mh&B)KyRS8$msw>e( z5=fA@qaD@c6LK>bIXAmM(I!AIc0-H5%`lxo9}~o-`~W2KhF1UHTLdA ztcL(&<{hO(u}u7P=ZekSF$n9y7BVAqgfL{Y28ijyJ*xJ^Hf4Q*R(hYxgWY9S;@J;M zYR?=TNRL$88>rp4_-@nF7tBUK){VAH$-h3oO_tvttF7l8kM(4@XQK7;UFz#LmNJZ~ zg3ml#0)8N^a(zW%Bx=2hZTK%fPPB&J=DII%{6T}$lviRegB3Z=<_G3W**W-JUi~Vl z=cb{;qHkmHcitqsXA?{4kB-{pm&eDf>XQ!(qr@+=&&v6{&GV8Y6s_}~LcS`H9g51l zNaA>wKBy0`6MbH@r{cHshF82e_vVUJ^!|$F(K!|6`V#w^iZ#(YD%M74RIJt?ro0Cr zoj3TmwCjq7_;I=Q3La~+Rpk2tc;Gl#1Kw7`laA>9qiy#fJ&9Bwo%|C$f(kf__F>$vrrIrn)vAJ`kR8PF zRjCs?5-szs=bm(ELUZjFePmi7;bcd&q?icU|0%#%zrFFz)WZ2l%!(vvSqah1#<>Lq zcNlefuVfhueOmY}bh7~ZAP}39{NXr0mcu;A8Zl4k0p;@qtam|^rHu7prJ~pEdTt*w z_~=D#p)1|?dCCQ5%OS95$Y*^z0nc@qf+>IHkSS72>(3#{Nau}u>4XbAAGsLkGJY-t zXVRj$;mOhCuhzoZRoE$vlWu1@!VAtavt&g^{R`4FRhB_FGE>m~`QjADo zR+nCx9zw-d@h{a<%5nWT#ECaVCX)VxVQM>*?=L85&T4Flj+{`j<&oUxtVB;s1*xVd z*yyvmiH}Q{1ELYCZ80zgh0slsKDA56mQJaqwf{owyf73^_AmJM(GPe^BQD|t9z7u5 zP}rZTVhAtEnl*dA3Nb{Zqrq8Z&}uz?p-1eDc8r*{gQr)y-x+ow*+0J=apC*+MFbJb zd5`dxt^JAJ#Ii~ByCk-4;)LrF(0G61UCdNFUC}GWFL%u0QO60amS^Y7Gp%tDy^tVl zv?ytpVo61J( ziRM_bC~BrUyGtguEDvOJp{zhW#G8t#2p3S~4%Y z>25c%sm1rAOM0|*GOfMOs-k+^>pmtCMYwc#S~ab2zuDdbmDRSgC1QYbI#n!;t6dJh6PKMn>tk9tVK|d+5qV4gP0XaFraxZ&Ztd z+q&=MYtc!*re1Tv@fkScALIOpK1a5gIwg1G{3WkWK4|B`Y3e}-?A~RSiC|Na@jqn! zW)uTxFvTPBxkrM;nihnGG+Qxo&e zWveI(WI!1Lv-U0e7Pz9m=aI8ToK@`7l6!fJD%_U{WG%K+cNYu3ky(`n_*EnfEP*u3 z-+yzZY~L5Hzb{&VX2!~LT+*dS<9?% zEriq_a~sv8jk}A)$QQ>+eHu#d$>!iON2r-FUU!RKl%TraWdxEYh;;dk+(ko|cmv&! zWE*?O5{H99>de7D&y3M{N=pip7^m_Ib*dazE*y}$-bSAFLM^$Gj%SX!+o+ao>)kKZ7#ITxMz`b$&@TX}tE4+J@4 zb*HR)Mf|Lc*pCbZV)_{2*W+;>2i(Rxi-|v{r25x7Ta*ppv+A)SwWDTMY5_#Qmy!TS zk1g4E70j7~CxWyDc8K0h6a@%t0=p22dJs!#>!0LEtHP(}#3x;e+Q=7OO_S^eGw&7SoPn`2yv3s!a2+XL&4Oo=?;E3Z?;W%3 zY?UuI{TXY_TY&5BM5`BRj_7JK^_?tA(b&yAHH;J6JyT6s!`{)zt#FtZfg1m zMxDFWMwEq6(65}wM!q0 z4w8RqQLq7w!F!F`*Wnx!Ef=*~xp2s-YUiTs{;f+Wd1?QJ0)g92y(6G^EsA0YE*x=<+;0(nh0X~_#l|}Lq}Ipao2%dQwdSuh1kx0br+8#m^|$ z?>;6vSrqbztu*)dhr0yku-Al~>zxYrQh6@sEMi`bST#B-@HQYbis^v#oa_Z9UizO-^;&$&%}nYF|_37ghb;sMHUxtC{qv%67O?u~ug zR#oJ_zvcH&x?IbSa>7fEcW?B6+vU2y<>udcdGzH*Db2V^)&Ykt51ytIa%kxu8OQMR%q<=~bRgEV_rXuuP3Ej#<80$DZ}jfH+52ez z{^@z~Pp@_Dn^JgxRsQ!rcDcH<8~McDxlDc4%~zgq_Xy5L9mC#>FD`Z&gN*6k=tcKW zDUi}_RhRRBEdP1)HVlzEDoK$6#1aROu=#XC@^EH88C-hXX89aVf%U$iMh}}qq3Js> z%jQ>R(3S1F@|mp61`@94C#!s}Wk##h@1rL+ivd$xXbk_yy2F8ayz1GKNqE>s*o2S~9?SbFFQ>NlQS#OqZ3 zvtr-{lwUc}Svbpgm$tb+Slznx-R}k^k;4(zWX_y~7VeRSUAk33$mkp!ZV?ySa3kMXNcJhW!K{B>CdBfbX8x05|8Ds&pX-X? z{lCV9@o8J~w*Eg$6%UkZ4>!tmQdn7frD9K8scVqqP+K@|y&{*K_I|m=N0J<`Ws?>B z(qH=c747?9_%NkEO93IC{hh+CiuEbxd^n%ssV47Z&pK1rhAo@QB`OICGKiBQVwl&}|+>;7NTfylP97n|W#8Av#N;Mor_O=H82f<@u`kmJMt!IG>{ z!mQ;iv!quAgQ~N^j~Mv=>>e=%U`ofew1qB5JT}(-L2YAOs3-$6#r$6BdN2Ge0Ahmz z(h@mu>2_K3fwOv@7=_dm4-V$XGJ4xg>ifCTJm)KBYjf`s)_EYt%Q?mA}#0m9XB?#nHxK6}2 zL=k0>>y+d38WnBvfYFWE2OhHs4UZ74?P7S{!tA*0>tycgSBo%0jt#QBvTN@74bg-2 zRc358VvZdUT+EfnVC1}J)Vt!>9K#9}G`LcfSV3Py&|Bsi4^78Y85`9VND4V9$o3bz z=ru%RBn6Mw_%!Wdi?7yYT(>A&l0jqE)ne_v9!8Un)UGh670Lt8 zI#J=QOV#5SPH=Gmh8ZA4_6@9@iX2qGj$()hg z!$n|jv3_=W2p+UOqy$;^L{iyK`WVlUz1E-SaBkjeUt@GT)mS9ebOM(cTlsonZeU?C z73ssJg0qslGF3z;+mo@=uMuApJ(!wQxZzD1IdOIt=9=drWweUN2@AYwhzton3*X4? zVjQJXT39a~78(tw@vStbo&-i>)Zi@Z4MvHp{AuPT8GeGPR?yu^0CF(_hSJvVXlO0- zROecvo)k=SmTGDT5$XocEpHQ^7+W}|@f~-=`(+J%W$tb6HgmAMLz&rvGYvx5Yfr8j znCbfxi}Nv^F^QzwZO-$J>BMyH{+9I*zWx@q;0t++jf3%MXG)5%l&?D-^G$9Sa8AKUcsG9`go{%=ve<$YQE4wMyHE zIa;65w&}E8fN|&UonNMFfKihqS@oT2i&bN5%|?1wc_wAi7$)e%o#c2ic>wz;!;8sq z*CxbmyLmH?b?kQ(QA~T6_0Xe$A6pW08lyyOd_}qu?ih#8bcb{)(NZL?H?`XXwL7#F zj0L#^wB(QZZJ4#AOs)JDS!d5(xz=~c?8mrfve(5M7S>+EGIl6j`=0d*2S(PtT`!aT zIfMb}p%Q#d)yS<$v*`wVyT{`}JTZa;4t^#iW64!v3!321cniX=%N1`=a8G?#I>JsH(Pe>e38TTqw$54U3wH5gmkezr1+D}v5o!ZJS=p63Y?#O=V!F@Q{wy-J3mFv zPpR`0bbf@Lq3SZ{r&4~}LbYyDIh~Hez?ldv3ZSFjyD5SQ%ZjWQbJyrqMq3+<=bI`< z^`P5iRoe#L9nFu=AL~ZIiLz_2vGoq)m>38wtQNh@KS#$Zz{zA`;nKe`ul}h@93fb; zFR_llS^DAl^*MxZaYg?Y{~zUI2D)#L)|o%uz-vfv?r7OL){ZL_JdH6!C&T+~bRLZa z6r9baq~yO=PorWT=M`H>;X<0R3bn6|&nGhbcZF3D$|mm{$(1QXea@-rJh%}hp;##_ z1mE4lcMc125diY5JERL*V>zIvY)e}e!qMMMkKxGxXQ~e9i9#G6T4{A^P$+gfX*S5q8EVr6I3mGnQS*i zif?`su_xRmtb=A;Lt<8St@b3lIJS>`m>wAt#}$UzL-d{{1KWPfx9KC{1{Phogs3E) zu1C-}$r)ADk2ED68llX0MI4^JVF)_pGtc323ZLz0?{`R8fD1%z2c8hG98NWsi2CTM z_&WVB%?pk<7yF|(ra;-TPGNxvGN6vdVq+iX^qHY3%PF0zD&d{@p-YcQo}}JIZ?o@} z*iumdv&^ikG-8UCg8!j-D2OY%QRU0Q~q= zOZTEfz!jtVM5L{39CXxSJ0v)2xF<98^a63NLrF-1j1UzFM1TbA5ItW}6hCG>o=pvh z58lJMfg&oEOFMf8loehV}fRDtdW#zH1nB?xuLVB&| zxDQ(rL)Ol1c(=@r!-Dmcfc~dtLU%iurE2?6tnd8(lvix^T_ER__Z#P`3u5u)3tXF? z0je8lUo_M>F{aJkmzwS-GXQG^ttj=IxB9&eZDpQNZo^w;o=J+VMJFZ}kT0XY19z*N z2ShD^d!9M55KWZdtjXgC-uDcG3$|dnNG&<75bYzqocg(q36iK(L%ykr2NByo*hSD% zU-~Wv0;K&j$y646OlXEkJR`>_d@YBcPA5*W;Bvx$KrtvVlr1=gBPv>4r2KfI-&IVv zZ<(j6WW@B+L`zQQ5ZWy?QA}^Pens8&>sWCYLU;CWVOk$_mjfA9OYYj@b#3E0nD>c~@M9ho}8vckp2_k-}0AcoP$?Fr3yWM)Klz`QS;jqT(a1qLlGC6fAY$BJ2%k15*Dj48|8M>LhP`>7yYez>4-O`e49##@ z2pfh=E|LN#hZl(se!uAqGA^_CrvW{VI9X=cRCHuc*n=K%?Ut^{3V+yU&mcsPM3`%{f)(Ie|Tk{%T(i z?&jTl)|Ou=j(J=3uN*6HJ?c|I?Qiv<0z9f%0EyMMPdNuune;&~V87)9!9>VGfujnU zl^!2qR3r}o3N)7GrC-V#NTil`)SmjMnMeC3d;&Omgn2b~KjsYswECx5>yCR99EBTb zuWSB=n>T+1=jLP`SP$;%eLXm z%Z#mRW3ZW1%SlqyQsM!K2x~Ttj3K#rFXRSYP1CdiT9dg6(H<0VZo@kzo|^o=@k6{saalml=_@^rn* zK4{(~aR9F{1Bq5YQJKf}m&bZz7nl#@H`61UxSPxGD$pmR*i5wM^$p6>$5-3?IhahS zfWF)!;$30WCej?35Nx&z+=MYD!kc`vssaZud41E#*9Naoii_ddB!cp$NxUWi?*OQe zQP@A49f}w;3r_~v6*$erv^bgEtXFFkZx?OL%!`+9V}od|fAM-|dgEKVsnM+~ef*&e zm-_(0NYbD3JR+8^4sRrJWj^DPIo_K%Hdy~QeN|jDVfMVE&+)+?(|K#w#STX-m|0=O z#IZq+*@%=EmR6O&aG?AZs=WTA4MARMuXRR-)}0L|ix_oh6T~cjkYs+TI!WcLqLKBf zy)!m`L%DvQ@mXdLHvNH5DRBYB5){@J-50;1Iy$I1a15VNTw<1`2-nFwYM{PFt1Roj#Wb3CYJg%y>_oM|K_$?9@`( zsvHs!Y>gNdOrav&r!@NKJcCAmZ$@qhxfM=Bm?W!@7uf9>TgMw6O;ZN9TKP?2@Qzl? z-&B>2%6)IEg`46&Z&TGE^SgRgs`5WoknmyXT_-L(`c>k~e%*FVIO=&N-rH~E_o z=`fGv)ce@abLx-Zy-foo{?J+BD76R5Pe)CSukBY;bC~6D#Ubzd1YCcsu7S z&R*u6-1y(T(eGaLCmb4G*cF;C`-kzrN~E!yaNY~-SzH&d80ON)Pq2@eHNJ5zM1omd z6|cZc@*0Bj1$5A}HU$GIiIsDU@JHh2Ah6Sf`hYHuIRaN!xy?QY-yM6nb7mZBy2c!~ zG2ZDNn>7Gl13e^}wcniMHxA?+RnD0BJAIb;i#ze5d(7Ungk9z-Rv$_dZtT72v%c2R z`tu-Zv{R4O{pKyLg zt9@~XbxD_k3snQQMg#T`aei_t6LQ_5gjtY#WaRqLz*}0fD@#;k1D3k)2+gjLgI*W0 z-SPhdwBOBXXW=17T2h4VX*u`CuUoDYX|tDJjOSK0NG1_S2qpMUPMj|5;y1w#Y|iL9 z?zJroQF@XZlao#MKEASsd?;KinbghrA-TW(k0QsU^>$+GpJo_}8MBBK9-If}sVCYO zI1Cw)DvJLdK*BNH+O!3(@0hig9}b)1Oi=*}N`DMMT-4dO-KP&xC?fs7?EETUAmmGT zaM|oB8>IUys)_$2(fjm!)34E$iie|v<2O94m)XL~iBqchL(*5Ph54;n@)rfB>8GSF z-cOPAUCw(^snsm*iI@LYe@ZA_b7FCUYeAzKDhQCtCOMxz+0QkPXxf?h@T>Tjt8jsx zPC%dY9O1$3yoJfvUYkDnQhGt0pw`4eciB!HJ$M6&Ki`~EOwLw1!pzgS%M!(-oN6v~ zKE0;O`&%z~QcI#*?Y9H*;|m-qIKB}WOJyt&x*Yf5kY$?J%oV1<@QewdeEj6h2dnebR3U&mi1*dx45)x5Wh@eU0x& z!BzHTeg``^XS{h`piDoKn(dRMwgfuEa0Bq{CD6ELV_yq{%1@jne4Fv)O*x+8=?Ybr&loK=G**bxBK-^n{OLdcKa~>qvqR&m)$;G z|DgG{yt3Q#^gS5p?iRbYTk=_E)={JsR+ZDxMzPGQ!#+wOJVvCFu+sizx}N?J-hkX=C%q$px%)u8ut~~_ z2)81PUUV|dU?yi&jgDTB!kK4Up*?b33*BL82)C@SRa4RT?4ico%EY!xof1{s8z`Gk4z*VG4Rn9)Icxc|W6%S~McWJRAFz=j-QZ0da)>Tmw z{UN|qUoj&6H@S^yjUryv62IkdTJ)_If0%c1#qYI*h*c{d)*9Ey?;NdBoB=9+q$RiT zYcCeSlwjKxuWF4?@|#}8ABh(G48M|!Io-qsfRBcN6uC)5?wAf(qA!J?mF=vyORqIb zt=<4&{y?~sFHKG!juF^t1rIy(SZe=yvpkiVVn=?N;m%lI>m6s=U&UH3O|TFNNHik8 zFzX78KJUm?AEh_*ST>GwCLEvy>f~4~F*iZ4Am0xB0RW%OUYQv$9~&LR1ead}8&A*% z3Vkkvpc5`BK0`IjpByjku*=6Vx19{Eb1H96yb+5Y93z2NZCRDU3TFc=ku z@QYG6;yQu=&K!mi)dxg{JE6d+#qaTTX`55K1kWZ-uR%0wTuqqi z?IP@{eO*GDiI&mi0dHHZ5y}=$f@!LQg$%noihxY``yn7fj2OQV4QmV1q$Sf+^&K1v zOApF}=*=ePVAJ}S9v2|TfmhG z6<|d#PAsf+MK4Unc5EChHP@53kO;x3fT!2v5K1WE|9D?G0~(y|ud;uqVsmZJOB272 zr-WEom%{H&D9Z+G(jF*^V~l>9T#IuZfx#r2g@|Trw{L`fK}Lh7-8|2nP-xEK6pzZe zXDNJ5^Q1f4LU&+5zJs{WSS&TwZnN%tmy|=b+nOfbG46dP5j<~SM#5QzA_w!+X?>VzRiS4nEf zmgzFKm5KTAmdVX%EgTL*5*hNCkV*p~aR7+rQlZ39GQ!V0TMSbY#*0Ks#+jJp#k8$L z;vcPKGJy#OW<5v1Dj~K1hZ_4rgWN=^2o;JvHdtUxE6JqNz!Nr9DBvfktzjnttNg^0 z(;9!nEm8unmK0$H?y9jBE;5+KR+vltQcPb-Nx%6TEQ3VU(w~Ut@XYv6xo`Na#;9#V zXUs6B7qo}h{P&%`gxOekf40PeR{K!xgcZPlD!kg-^scNu_76|UWEf3S2cA}-7HQS2 zZ9--iUXf@kY@Y5fpYPX}we1F^Ii(G<0D)}4nA34J7?*^6I-Z};_zLef~5#Bm;weF z?j&Lz!b>U+fLUd3$>z=E*d;jPq3M^67Utxf{$EBQ#fGb5(YMkcpxJ3?uW@(w1xvj8 zkZQB8u>873pV+vy)=0rkPQkyWRSfa)$^pycF|;n@k@ahLEG44VvW!6z)Rz#*usv8p z=fv23VGSzXPBh_C-w!kWi_k7P)a22O%%eJav}80{&STF8Vo#fsN|wmkfQ(nml~?bD z>2Z|c3qbw>5d*wueOuAj=>GIMyjl8#o_^*BvI3)lbXLDL{Tw}TKA0mPe8wkVpdgkB z`YWf6OwC%dTW&_CrpTGGGuGO0IL|B{*H`8BN7dBLm#O;?>I&LD<|GDK0D~5YUMGH` zh!hcqp;Tg7JIL&ihJoR$_5k#)pj6*{Dc03G+|Kr<4f#$R)ph&{{I zGOj3}x(kuxv+{9!_<8w}4JupydC7?vp-_8xH84&t}DG|0=>GPg}JS)tXg#c)3-;U5DqT2ca2EB+s9&ov5! zWaOn{Yz0F#BJeH&4m^afyD2vwc$n+A>@SQ7G__*DMg4MWXJQC{?~hN)^-7RKwI==H z=V9#AxYY2Pr9+XIo34{P7~DW7^G`=vX&jFFD$maI>b8(gHJzuxV#beAeFGJ)Gp*Mk z2O>;`evun=c79?pp1ot@<#_bZkSWHWsKp!-=!j_z$7;+)*OdkqaANg4U=>J%gZEm?{-(jlxly!O=F%igLTgoj`5r z%t81VJxnYX>H9&hGG}*jd4cJH0*IQop}u#3h~ukrtDl`}ZTY)wWfHOC4Y*Sd_X{qE zZ({uk&1C)8uhdKUlU2H>&9xd4yhQEpvC3ibQ0Gc}(K|Wf8ttf{T_{Od?;g&3Oc$~? zuUNkwaP%3EFH~G94X98LM}F7lc@eH_!650PtA?d36i?9-gD|Q%?Mq;}eNJ`GFty~j z*d*-Q5zg^WEShB7q^I!bO#V!atR)YbO8kPtyO(y#O9+07)arOcTb^0z_GKtOoICO0 zTC9y&;nXZ9K`oNZ9`@fug=*j>1O7B0*_ZZJXM@Sm3FSe|1sv>iaNQy1N~ZBN>h1x5 zjni3gQG=3_4Imkx-#h{?cQ(44RSv&^3{Y$QF?G$$CgOq3i{D0r@#AZw<$b|(v$V#A zvgF|v=Ik0lWDm++l{eY4AlrN-&psq96HZa!*yAtH$C zS*UQ=%JTW6WB3j%SDA>+Ja=HXkQjNaJt546ea=ayiZ^4Rg7+`{VB*K(Moicm%vs;2dQ0&g~a&6`Lm4UwK%8+0Gs zS~uJpA(7b#BgWg->nJ2p0^6FeIWeQN<(_vQO58z+ z#3ZtFFxR@3X#kJ*rZ17rGDwV-wWNrz`>M|JMel76om(-aDcm#fcI6Lm`L9&ud~&?( zMZKEBh5C5yHC!?9;q5A~?;?6gO+jGtGX(_6uR&@yxvoY(pXW$%Ye)isna4AzcPr~^ zP*Vq+Lg(7JwRdRi(W%wtX^krYWJ%GW`}(SKAJhNMeyFd_4FnH1M>bC)06A*RrrP}i zA)VGQumY|akFm+(f{F>vwfl8qx=z4w(jFwgzmNkz!{XT4V_k@B8VC>qzy`*8x(>{3 z#uBsy<0%-S_F#82S(B=x{w&AOUMU|ONRPn_i1O488QeshU8 zL$1V#@ZnIZlz+ z=<$@^q=+dRm!*GsOuCH+Hb_8|jW?^&cvYm(>R@{VmfTp!8+$G~VZ6GCr=}ji=$)bJ zQXihPQ_s=XPs>f#H|oQc`L^RcVC{fIwlRWm7@RXq4wfDg(LVh!^Nlwuq{eddRrwXa zSmO=iLolFM@jmU3`Yn?x%=e7wOCCXuihz_bMuYlOfC{V zg}BsG!)$IM=G=2fwOslln+De}9!jVhb8dmLHF0oT-}o{wk7}H9S8Cy{+*PRp#axNe zt9gy_YMFZCHC`=s3XbI6y8sC=ENtqN$=n%~#L;-zqS?WOd-$ZK{=ps+vi)s+hh+%%rR(Oy0R>QY|5D9uH+gBIThHUKG!r2JI;}>2O_X zYBp0ax7f&i%uLFP4jo?@VI!ESQf`FwBYkK*y6d9Pht^=ymTQbS+Idk&pPDnGcp;TZ zf5^<6DVb?ADG&#f^ozKhFffO8<}Ce*lEpNd{=Nxtb_62Qlso$aw7*To^I)gFDY{^xQA&Kz{puV1NCuj z+`6I%0Z2;Lj7*hFAe5L?N2067n!J^qZW8r1}L)h!DqR_k#;sd1a23rIquDP?3Zrs z$9K`N>PVq0eGAu-qiWt=?r07j^QF(`nFC9bq$61(;}&2NA{oN2mG(;+rJG@nRecC- z)uwDUlEqT6HXcaH#o`I_jlUrr&*RibXiD?pJa?Nc6k0DMC7TU=b4#9QLV@k^Ovn>O zq}q6n6BHyTI^3C^(MTz1DqT&3&Py{TeJY0Q#W2^y8m9LbItZ#@}v#9a2*f}PlV zY`hva9$C9oS7iHz8>!I`{=iGN7I)fxRbTuDwB)oCSF#aI!l8VIuGbCJhn z_8~sdrnV6y#A%rfFUB6ZQx$XP{@m0X$LxtDj^%6`BE6il_4xpf%WX{lNc#t7C_l&* zM9cvxfO$51KQt1LSgzSy(mWU^B zP-N__gHD{GM%~Ef>M}^?$V88)!lP#=+Whu~rlPdkmg*ArOhb#NZMmh$sBc_$ zG}f4k4svT-6wQ(lh_#K@*&Dv;KN^k)-7YArC~zC~b0X%XkqS)Z;4an&}; zJL$Udp7h*Qu$n4`3v7(I=jNHIAcJrpmT@~Yz{Gj%@7TUOcOc&7*zlsAWJUR=Z);XW z3nzsp#}5)RJ2aAr4@^{fb?Mx4{$4$2X!DG+#6eH|cvkds=GXJc(9CXF{_lci+nh0? z7327;h>mqLdI(chDfNl;C(e?%gob}6nOVY(=_ig!kusTY6O9Hxfz)h%2JyQ%-m4>HSUv?jsY+kA@#XWUX7|WHPM_V= zX6f{qum^#B1U$lxOScQls4P<)8y|;BubjAyO8H$N;mb@=mgc*T3yE2`U0XhYdu_~tPQpV^)TI)QW?Xw?9 z)vwqHFXy7&M`;zD^RBT6eU<7(TX;`)Te#ape9T>LiiEqsdf}BRg}1ov^l-b%sSV+0 z#0*}>4i}tovM+7|tZ?Rp9-;eFLk4Zk&&5Z|fttwCU{RqTsVnk|zTic1U29KPQi0IJ z^lC+<1g4sUMXNkmYo&w^^kEUGcdx3^y9SyW?bkapoRm57GUGYfgXa8vLoopj!Q2v} zA1O4#G1pox8W{D4&MHcy%DY>Qj)?O`!WzXZ=>}*o*}!l48-j$i#NGTgs|(E;Cpk!T zx4Y5;wB~ctQ3PpRV~02(hOzz^TS54&y$}QFM!w7=p1^os6-q&FikZ|hQ>_nMXSg$+ zI8kLqhxG-|4-(->y(5JtP^Ee$#W2Yn?piR2?-eVq2C`|aQ{%|7E-ScJcyiE~VmXZW zhE^96yw4S+Z|w16x;m7|J+jSZb6JD2KH^}}UXsq?R>W%_;kc%ZMq4tjxhgQ)-J~Wk z8pahGB+|Q{B>Z~89-ZTm^@~z#@xbz5vcAfq5;b3t19zGfgV|Vnb|a(Os6Ng1;heu0pqjcg8H9O4?Nqs{gT!4a#v~W9#;hZ%dfHxsWz>jP>1&&B@&c{~4 z`2wMo!^A7x16dnNhEZp_x!DjEaB?b2?xLQNTJjae39I!`TgCXS4Y5OJ!&u7?GeW+Q z_wo6Dq(#qh-gH`DT2ml>Oec7xCZqk^1Jkv%l$m_C9EgH(8G@sJie z6R9t9I@lKkBP~iSMh5zbQ>W|>{fAClq_#+k#S+Ug+UrcQmi$~8)C_hmiUg`kw3IkH zJKf-GFKRsQQhJX(jIPl;}eV@!ts>inh{>7!i|=(Nm87ksf>=)wuJJuEze2U ztj0e$xXZ4}?8qP-Ys-?Hh}!||(WW{bI*BP;=8RXM9&ie#g7;Sy{>9uZ$&KQWxceN{?NT$DC zaa_*TB0A?>2|1N39ITsbUq_D+?olrsYt(j?_1V?eT8NMmMtpbA?t_UIc)S)f{6u0G zn*HsOOFb}4$4JDCGan`u>)RqrQ3SdjVHEv&-eEMbNWr*y&T#GVenI_VOr3kQ#1XFh zwsCU$SRVfD0eTad)uBE017skHScgOmgf(B1o1;WYId9CSfcb_h7VC(epP_3>+b%X?f|=s6@1gAAC%|j803SQvz0|Ni+ zkuAe63mmiv9LVN1mGD#+HT59)nc2$^pd}6Oh)v}BO0E|LMJ+R<)a2+sJ~xsKKaZI2 zw{iCx=v{Yu6d$c}w-LxTT3{ku+!rk8+q2Bl$I8#vkMP`Od*!V-SVV7^$<+73ZIk?U zHghTW!GdOQ38QQZ6EUirb(A3W0m6EfV0ary#JXJbN16H#y13T8XbgtLqT+IdleU-F zC$#6b*~8kxFS#1uhr4D>{n4zoZn}~QtkBw%WhgOTZ!9svi|39E)z1w_FcmlI_wIk`b{;gNBC1I%>v&RiIP=Wpl$jFG6Noa;9 z;A-p8CjxAQ*B&Gd>3^bW+0dYWnSBiKF0dtXLn8caUiw^K^o7?1^@|(AI|y;UuDNm$ z(Ujfs*ei^-MMhiy($)39E9=znP$g>Dk!IAN6(y^b0tCHs=~M)Sgc+i(=GwJu+*+jq zx~AH-&9yuJWfQd;?}$oV@5$MTk0<*f{Zl|3XBV0iQ+P1tDqu=`;xTUGv9;)v8VSN8 z4g-$FYbcRB@Al>VOmO$O_wn(`oQ1+0vJdkKxX6){fd|4}<+EPboYZ^@5jE{~mTTKd zRHQ#3CVBcg5^9RVkxV|doz}Jv6rE^4aZ}DYERMtbF44P?_HNDjT(6J~)kg)25H#%- zQXr}k&|D6oHhNKT<-CPIl05=JEG`B2trHl)VX?l`el3)iW6oN4f4C!k1Y=l-7{Jad zGNAjK!%wHhIIi*iH7KS2UB+Dd`a}th@-0eB%ZV>NU!>nGJ9YM&M8)G4fH)w_0PCFaz}+W_Y!-V{H8>%g~p%9?V9c4>pN`_C57ouuZfb zTW#z?QPOJ6BQb5EM_)cs|3Z5?yxh$O-A;2);Lic$QA;#K0`JkSC!|}nP6E3~V#D*? zlx!&BZ$z8&W4V*h$mS^d)uO~6ZsBJ88f*)?2y)m|&F)*BF%bekzrbhh;T7;B;ivhO zpOx|>2Y9l`TFBax4>9Ma-V)GPYN_8qBrqK~P37ZQJu1{C%nN8wEEX}qQ^G^7@izG) zRKct{A-u0sHSAzG;&D_asjZH79^G|``;wczqN35{{dgn@t3cvPsIm%K;6=wS`dr?A z1{UudKPHGVeRv09B>h?1llyrlclc6Dq=>gX)8H+G!!gtpLEfb+VgG7(JdZp&&&uZp znAj{qU}~F&##Rm08zY_?reuflMwIS12S;Y~ab&(mN8Z%f(iC2`ppsO8qVcW8u(wC% z=ahR8pemG}UAs~UJ`$)RG0y0=-avGuzSf#L_yR#K^OA|mCEHWmtgi~_+qEafEhXi> z)&ny{4poM%FEK;@jqp4iRtxY=ZYhVYUuGTs^lKLJb$2^D8G5{Z%;AQXdy#H#UuNy& zRcg`T%}A&Fwg;o5QZt4m+WpBs)=;ZF9tngl2R1^N+xZaqs2?zYeaPaRh^dwq&Mf@; z^H!qm8#FK?*hD^o2yY8w(C}vKqhH~h*y4$p^_ykl?7@li* z`Rw7^Q-7umX+vX85izBGs!eW(M9P5%WdaOoHe;RU*+ZxL4BVW&L#JZG=%o`9lQ`Ck zYC5k8NFaREY@abd*VLOLCaEJa+m0CXhno-QBV%%O14l6E?FiIv$Vk|!l+Yp-C5vV- z;LJ8s@gfkB4QC!!h$VcGTEZ_VR<*F4=oMoD*Wr;s?TSUYI<^_H7wB|eOpBPa^8mXQ zM*Y(${a%EkoN<6vR^k~KLOv6p2{1s!z6KZ zxJ&g!s=>5vjmW9~1M5B@)LL|xnB}a2RRw|F*_es9o1VySDzASw#zb~GeVjVnIH65F zEPXNbF8g5WnHu)!xHrpdTVh4Dkl6Y?CcyMIjW;H&AkdV*X~Gl2pCfL9KY#32dTs9p zGGXf7qTto*;tQ{G>9r2Ft&*)3Tds^ry4XSNCjwUGo0Vl>BQ1!th_bsde)@Hdw!THS z7<=oU&lx*e{x-LiXX)Oy&{bK@MC>ipZV0D7e<(reszBb1TORYyQ6|=?b&uyu{}%#tCcH!@JkzCrp76s6Y)KeElalxNj{BAXRJmE92?GUc9|D6VF@EAE&W=tQJwA$Oe;`nXlA2P zD>Wx!M~XSMCdQ0+V+m9+KKd7|NZYD%+>RCE#J*6#7yT15H976}f_zH@?XfN9fK8XD z+O|*Ga^aqUbW;3!tv}+P32)ldR^@XmORF=jDB-&PL|2V^Jp7BnSyjYp#Ba&^Kq%ZJ zemia6jRTHIR9JX1or)Fpg$NyhHGhxeUO9qBzUMTOO}f`1Ua|SvR$_Oa){x4RD49j- zavMT^^ttzm4NlG1<{<0+ZJC4HAZ6l(>F%ubC1+tXb21Z+%%qqj`OPxf)$qP93B2^p zLrR{ti151Ar==r7%bi$=k?y^u&S4DwZB?V(_6+A)nTRCutrM|*Z$p*p2sYC-U$fEb z=!f!p9gM}^#~13P>+W^wn~={8vDcZ{tdamZk0D7y9A((^!6Op;>r5Na0V z#h`^cLiyk?ean3g6Lz#4aws#9x;5*NRC-#+u}hlZm(X*)>>`NcK1|L6wY{-o=H1Nu z@fqn@qQ$0nGvTSNpKa~$zXl3BF$QPfYwzH(lOJ%vv$%UG!#cw@j}^zW2?r68^n`Px zmvLgh$!9#88!baQGa%oWqrIQy(e8lX!=s{r94#4FQ!m0S?iM+Yr+rgZ0~vE7%r+O` zmO9^22}!bDV<(N76TCx1UO9IcUeDkP_3H-`HJ6$pA()ZT%+A8{wn&&M_z z1T~WxR~F>y8-xKR{MX@4$kJWb;7zB-XLOJga9cgLvQAEOa@mMw7=Z0~|CynDb6OFa z9#d35u+2EKXlIE(i*VTR(>vhNh`bYCXSM&AlHef+(q%o-MTJ*f%DOn+C)|gmdB?JH z2Clmm1XSKKgCie=4%M&*7Q{lE}o`; zka$!wxi6JLbt(teal2F&_bBFm&03iFqm?dw14IkV@DZ+|T4G^^OMg+Z$1rfSFz23% z8_o(UVB4=KcgL=3AcY&@l|*jOTAll;Y(5NdVSDLH#()}^V0N5igt4TQ)aD!Q|1u}w zbQ=AIYy*9n5?jJQiUS~2dL`!P!pi0fvBTb7*vZ2do4?;3UcqaONmwnLv^6lKxz=)0 zkweuimOWv9fqZauh>}| zwqvgr!EI-dIV}Z9jNJ2 z)#*DxCOE=b&j`ycj=D^XK0MST7+_dH^{5akbh9f=5l%`h7O9hL<}qUR=w z(xYb)ul|Bh?$L9t1>IkZ@b_MptGNzCbjgcUck9r)X#iAT8kloQ)Gcc##gq(B8HdLg zV*1}h^nV-{E3F~(aV@bJb^JJD{cE;#gg02^&A;Db%8NO5Cj zW%{R&iZ2}O(nmC_t|i_gMZqrX{&^xtz>K&CQ&-7RL`>+;^T;{V*=k)Fy@oLme$yH{ zP{qZN^YU=-l5-b<2|LTfJ#&dWRf*sL?!oGK_iO5E4^5+K)S9=-k3FWjF1HCG!~do2 zUBII%uf^|~WC8&OcYuioj2ba26jY*Ui3u7qOcKQ)5~HYKv0je-qvt5h1{4N@lV~>E zv9#4zt8KAhOIurMkEJ16&4nhxax`2H1__dCTKBlIMnDLN%=cUG-jj=M&;L8$^L#uH znSFWpdhhF9_cfW9Yb)EU(W6S38*R(1VdnP)i?ElU2Rs`xSZMu#G^aJkT7!l1t?R6( z-&VCkV+iC()pKN&!s8?eAW;H>MQ}yoOcY|De|(B0Bw4G5aqW2)pZ_yW(vXCQ-xpn& zeFQ^y`!I$j27ypN)#^!}@cY`Ew@#qFsyQvClSDU$NStH}sn$_o(lH;8y{hn= z_A52V(25djIv{lr>7?I89?Np_UqKE$6kyK@mr`;+2W`QEj>wgZnx~kv?+JR_;4YSZ z!pX`(UEXEg`!}foVY0qYie*wP*gDfI>&at(f`4+R?1z#xawJtB;hA|$S@ddRlt%xY zDD;I#RINIbR-BWKvdSEyvI1a85F!D4^b0&w^$SIUwKKU&olucE4Ar+(x3n4=DSJZQ zDGom3fv^va+talhn_G*goJ+CR;%U717{%be4x@Og9Q5CRnI|}mn2&Gb!c8UxEm1NJ zJAY1m?UlCU_mX+6(~GPhv7WptGbOomr;^5ZSl{_K!IF9rFik$Wv&?*I04QPDRaBgl zR^1*YwLFVz6D6GeSwh_?cZB!|znrRrX`4c!z!qfTxR*)_AsCA-sb0t#cs90PkvH1A z8rlZlA(X)$E3!ToGoCF$=Xv+45%}8@P|MoQV-cH0x>QWW{L@A+=2TH@q{Jjv!Ub2G zAYmu1v%e`}dyrU}H>K;>8NCyG^q@(|v*_v}-lf;c$^5XNJ%iOnC6t21LE2|s`(0|l zm(Rn*BADWM38-L7a%-*KO#reCb8fbIeTLC={JpAtMCMI{!|AB(JKC1p3k0tRiO5wJ zTbWXXJH<$&cUJV%GOP47JMvSrB!iWEu9cFYzLE^*2jLQ#otn-ygHqF3tO}{bMUB?qc}GI0 zzrt_wHqH7s?v*nq*LTRfgUSL%RF-(c8%xro&1H72@}`(U%;we-#R0XFae#j@JyPm_znEXk$PI+2T_-RK|eBhu>Rui_X7w-c9!jaKvk zYuGHERu+w9KofKsrPH)(wfV@U80xMcMQ^Qt!{AD?EV9iID2Dle zz0fK}LaVdLWcA_;p-7odW)CP<4gscPWhpRA^=I&jOG3+=SC=D{K$F1bO33WsYo zw@aZ4sRlDM710Tc_&{#`jli@nq!#5@R_G6pEF7sRC3^f~KH>P7b{fo&+`relR9(^P z&icFf3|OkMblYjv``FtE;+gHMU)|r-o204E(<*s7Xo!BLKIyKPRcDnQMe;|iv0m%8 zmst9@aPiugs&Z$5_!Q<@g1FF2aTNx|Nmo>Btl!B{F_6^0)~SaXakp1;M)K6SOJ9yd zui1A-S7Eg^Mgnm3TFay=IAFR%4&lK=7CCwGJ;vq@mCoeLt}% z_&~s{xZfzRi#806cJ+FjWP98+Wnz=j9wRYPS1;?nvG+Wg`VOmFsLJv>D7!}jp0H4O zk7Npkw>B!0cm)2@u7ksxYQHCUYu8A;7V_X-7Ck*oMP$`xe})BX^n)WYe+{oZ$J@Cb z_7>7~=ZpJ{=sF%RYMD^AK_Hw;2HYTjha)~p3Zl`&LBTWUP&VSh(QaMveXw0{9#Y&U zA`}R8qRK96nBW#dN`wBwDcbvt6a@+G;IL*HN@0=cJ8$1pZ|5U%c9jD#74kOpvXX7C zA5`nFDJ*_-h)aSCjkaO!TJ>*$#xlBe7A$IX2RD*}OpZvU3**pcJhhsqcwq+TaYl3W z){&sZsoeo?-J;qs&kWw<6hLhG>YxHwx?Kp)r@-0tB-xL=UHv`DaC;J5=s;O7%%$q2 zTg|6W%RnrY28Pds=j60fR%`MTpn))f41@M&Ws@O}9ib*=?v$~57;zVt1XiD8Po;&p zKoMfvSRNoyerr*We0IJ5vE51U!j|6t~v_vIB0VSt6?~0tCneqd7SO6OL7@79w4oD;4<>tC(C%b}JIRC%bLDOE_I7j(gfKwaXsoM>PrO&tM9x%O49) zrCsudvC9D>k(@bKT8*8E%p=_`Gsj@e8%m$_gba!i#C=5)pj2(Gn()b8o=1q0IKIA$ ztn6EP>(fFzhmq5&lJEvlM$CeA*XVF1Bug`5gsgcF9&z2d;Dwa0x>`zvMkm6Mw2(Qr zxqE157O`ySzkt zp4cLpQQC~ij)MvgRwZwgV;Ou>W=SfR2#~T-&25m-9P3TeP%L}0> zYF@;-R;5F!j&h{22I#pW5U-ODK)Mxymf-mWf*}|WWc zBt4+rz5k-+BwRBiJN|Y1htr_}Ew@w4WFs@$R{1)o&0xz@Xp`(LS|*+1)epb@W#Ry0 zs}Aca4w-(GEfl zfFv*pLvD&V)%U6rr>67H4S5xA3C{GaE%Md|LuN2s1#3Er(8?5 zt=TdMYwBqds(>$eA;QE3+FS9@F$e7Tcy_{>S#9v!AhmNOAD`?KYmsWXKBQ`vH{BjX zQ;ypsqrDk=dg~C@H7!u0WZEz3vyK&c)AiH^_A6MNr3e7!mI-L2qLw(N0y@Kq;V-<< zg7|encc7&XfOg-Sk9Po1rQycN=^+#QnI~QWoc4!ZiQH#4NnD9hf@+;T*pZJ|Y#p!7 zQ6y&?@S^T&R7Q`Qqa-e~cy`BsAi|;n1r}aMf!ipMg@oiLbFr+TJwK(!i+J9xS$cgj72!t`?gP@uvBo}d=zeV)QfYwcBIVwzSHC~7d|JB)xVjH71^sVsm2m z9!(0tqKD9|h{Q0FIj!5iYtHuON+o-cCa7uY(SDm*Rs6|aOy~sj%J#=Tx$Ctmssv)R zIXkg;%@^%|<1_u!*0gF$$=njmbh=!7$oA_7YW$vbIUc*W*Ih+hC7%|diiuH7chWxM zP8e6X>Sl|0CLm;V{zAj@|0jUddc1Uy{A!G|M!R>bT9L;(@D5 zG0y0l1LLo24he2#lG6E+UtsX-%k|Cpy|@PQ!|Xe(wV#?`0!NHR|^()rbMg(+%5kFqa^8%vyB%avI=yWVm$`-Pj;E z?jz#Vr2&a#v+l&^MrHcuhOGe+1e;@eH{rovl)m8Mj`a{V=<{6akXB>?LRzD!7-H&4 z*lBf!OIToOrFxHiaSY@{<~(MF=|SR26dqw3tjM1@hat;HY8tbtC9rn-V{ABwb5f#_ z-2}0=FOo80=l!c+0F>^*F#yNe&|M(tqsN8$BpC3jSr~94dNOqoMt8i4!AQat? z=%>QFGEGtjVNbFc!Jq^;!OJG2Lz5D^{wRCK=v{NDkZDKFV#Ku4S^05YSsv3 znY!;gV*rCLTpcNU>ExPi(tv&;p*l|kX3=D%12fc!-Vc7LX}C#0*WHAKp$i7K{vKEY z^Heim2XgJQK6-PCS|P!y@`Fd4inKq2B8kj4CXNNEe{B$?W*5@XZ3>dnR5zSOsFJDJ zq#je0BVmFToB~J579i4eK&V5)@s#D-X;vxwpnruEpjQbwow+0wqJ!k>1byh;bB)Hi z(4WTfykp+aMtxCa3^#5kyfeq_Wlo#u^rNS}U_g2}@=fVSHa(E0VXkFe#k>r_ zrJ%E^Dr{S2k5PV9`}RC$76PexIT2qA3qnWDifJn^UOlOxvS)FQ4a?Od3OE2;Vx%Uy z&VZ@a6(}CL`3NXG#vKl^UsTR!s3M9m;ufBdsvY zkLJ&UmzbgtD+u*y)dv`JUQLx(p&nYVwlTkbNJeIb%2@+P`GHw?#;2F50lTn~N!sSl zwA=rinU}2x7!PL<>~ENr0@)$#fh-VZoCGtlU^pQ&5}7@0L$Ews{~9E0Y8}b!&vEC| z-9XL&-zOEs`zlB-fOhseNr7;=tvpI+jEbp7a0*;&dvYmoJb;Lm&X|1Re(c6Y57#Q~ zAtv?8YbDXn(){QOg!!031)lTvj5?WLF?IFXD|7RMQ#DZr+4r1 zzW~asVt>ltHq*lRcdb{(wX; zLWtw`Jx5`bxg<>}>)Ul7x~pyM9~pw7{^V+taYKD#HN#24tH{8IWst^536zk&T$_-r z$=y4>jo}J^>VkSi3g!#~1<`9Q2NdgaigBXx#CgVB6AzC)(HK83oRc5fv-%84{n)-_ zs4R?~whx8&3A&rbO3Z8M+wl^g(xK0yhvu7=5KbPCBVk0gkDoNkS05(8V zy=zpyE=HUU#Q#+C&Ta0Pb=B-&^$>P-YFZ>=rrMg0(2e*=LZ4Ns@sq7Iigb_?$M7%5 zR1dbFi3fqbDymZV80bAjtKzs9Fa55*fow7{fY=U1n#xk1vKm1X2LD{ojj0}hY$o(*Fvx8?6OmrPzcX0z=7ldhskTdqy9}+pw;<3q>5r`n6WI#2+eUuH`;qqxKmBS4r@MU zo6N~Z^qpI0FcL7;GGKq?YiD8BNp3@HI5KW~6x|@#`H9qs|Hv=vBy0A7(YmGL4aShX z9gqx?Sa2C%BzH>k#2hs{JQfP{9?DtQ90lV0twDu&Y1@V79WH$=^*=)WNdK}kph;YToNurSExr+W1%5OMC3t@q_`A#P+kJF=19180;!ske4;?0B%;@kxR zLQ?sy*VyY4V-|(ZReexKP*ozc0i17-wzkqf2Ii1@_A1Zja-wl#{rC=8D2_vQlGlxp zE#g?36hbRmt6xKU3^IbO+sI{A!Dae*6vJLLU&q#n;3vg+3%hQ{j!@256CGa2mS!_E zhochajl%5AeK^z z%yvbCqD0d3gd}|TcE~A(>1DjH+)kIA^9>Va z>b0pNBfydcb?Rt=6a!M-a4L@P<-=qf1cfS1$Dq0?uTQY<;0p;JT`{N)#cmt!mNvXb zt=1J%uGgxi#`rrtNW$i~@4V)*)4y$f{mYS79VcmHfB$ZDVTXZje^YfwBDQo{4=aaA z)f=t)QdUK>jzR73gDvf!YCR8ZY5(^I)iK|#qed2OQ{5SYQg*S5;!s{_kyKfS=%-JM z=o4HaKxXqoL~~mewL`w2K4QP0m`~3qvskOquFXbi16{xWDZXYcj^f%)3qzZ& z5V!RZRe}03f#g`E>SJ}n8FdZV`RWwEL1Lo1;(Cb+7H|ldxTpYR!(GqeV>GK}BAp$@ zO6gm-XT|hwD(kg405 z#TiIE**ob#av;OQtW;-6!mQIo=6V^1-o#w}oaCw6P2*l0ewN69y-OFWz((+F_-*@`OOyN%Vk-JZtf&&r^>f3 zRhhwsv5JNHE#dUo9Bj&c_ED)cML>=RBzc`mm3Twyx}WkdwlgSla|JhvS@Q|1K){(w zzY>yK8{ZU3b9O)L&oF{`-iEYEt{eU9G4aq*w1mD{ZEd?E{knCyDJ$~eVIO-WZAp{|iNs&D2v1j>LJm6kv-sCLA#P2eQgUbK+N zZ9NTsh|Ni{v#mS@U$^j~KEupZFL~#|b~Xid$Yh3j0nAwmaqeogJKZyQ^ZlasF@Ysl#V5r1jB;fcAHuj z&ggV2wlT}T+*)!-Z6CZ91VgE@>H93qxX7o@HysYE**7{$vgb-Mp{TGC^Detq4NkOK zLfXn8C|M^_UmyvtbO$0Fa0XC~5s^?ktYNHCkq;t(6PZB@J$L1p0-by%%`q&H4`tw` ziX~=KO<2OW_7WfM|&;t+Ltsx`WX&JadPwq=gDZc_m8GnXA!s< zvzv#q>W0I-tC$-!$-GA5)rxnEu`{*Y@AR=5zrEcbt}XZP?wZ(4elk|_w|>Xo-F_?- z@S3FyK^@`g?CO#EJz?K{Bg%%$p7`{>ntfsa@!j{Gf2W`S!|i$CS?1UslI0w+*=k7i z1@=A#$`>vJh<0DiJik6O3FZ^P;6&qm3ULLcBcJ|-e$vbF_YJ#qIB0&H`ba(ZO<>W}Sq0 zGHuq~>I1FjNp7lE%<+UTXbIlrRpkdxJad~*$+~nHIeSGc*mnl@tuRLN`|3b&KXa;- zI*g9+Wa|qd3GVRqQ%N~ZylL9nEcjWdZX%Lc8LVLY9P1s*4uT?sMGOAGb2ld+r+1p5 zB3{rXwX15-o>fl?q#QOtFkYEhzIMpnkn%uFX zq5!%MTi7j(ks?scXQeXEopf_WdNeUiA63_kt*bSjl#@ndd>AjIiL=b$oUq1P7(s9> zYtg||#8Bu#Po}*&XDZ3SV(&})d$1LC{NbaC(fV{HG0|^dv|`ExGc|Sjykn)Ke0spV zF^M~%z%6sjgyj@X-(Hn#b(KT-nuVoT# zVo6+Nl2y6a+A|kgko-bZNJV_}nO>?(oimT;1tm^vgesF@-_z{0tz+q;&~w-`cUhai z$)SSLkmOQUDjegj_(!jQDeTe$6;Ivan*zcKV@SiIdh0iwDbRZu7SGD@cu?2P%JtYI z*4&LApEq~sa)zmb+oj;P0QhFWv_+@4OV|&PP52TVYnP49+f|1Zz(4qO>snnMaaF8) zk?$(j;=1UG>}5j}xv>rwsKOm_v1@Nh^9ekAsB__MNlTOa_=|n-+(+K{Q#@kH)D=+x zx+~;=L#`C<85hN!yvvby7e=ScuSZwh@cJJ@yZMx`Od(qNP+luvSNjoeH+Z;>Unbx~ z{-37H&3NZ#Lmf9P&<(Gv-@t|jd70+CZ1rrS*7$L^>U(%4RX@P5TXoL&Rn_c7k5$iZ zm#U?havd;QkGvGGmyc;dfTvPV7QgYA)WZxx_?d@zu%Snuew(LjY2OgJdCd9lrxJt3 zUM?~Y;+CVPE)PUcdX}Mek}Ty*hhm+OSS>hzxj(;YIC;%Z~scZmPzt#Scu*)oVjMYOjQCXtA<6V%XE2G2U^oq5x!_mlh<5$UM%E7kv3Dg zU`scJGhY)JYF#)Q%(z4bicYuWlh!n8q_j@YQOno5iOQ>{tL3{viiELp)v6!m6CtM4 zx_M;PQ07H>DLZeDYOUHoTFnRrdJnJYu24+%p5P~p=vF9hVx6hOxiwAROPxo4RkwZz z@N$V!T95kGQ&;pBx0!MaA?~SL-^T3_xfOAHUDcnsJx*?-`uo)Fe{pMZ8=c-IHHLH9 z5%OJYn%qkbuMOpoHI=`h!ov7BdG;^Y^50=&Uc8?V)%eMRXZ)C8$pUJ>BwfAg`Y#jK zcj=<@LVOdbks3UTZ?PWcfsED{JTd3^HcW+%uM>Ke<4=*Rl+F=-z{wF>NxPAm%e8e- zeIylaqhxgY({f&EP7-6a2+WZ(;V;S*6PG^H9Ue*?fSJvq2mc zx;Cum_e~iCW8_9ISEn0o{8EO2YH+Uz)7}y~=-Kcx_lfcj zVsIpI35j$O$-0RbUT?2$X|I%brIvSBMGhjeHZlbWJB`0;dvMayLOKIfwE(#4TO<{~ zU~9lFT)^*(vW6ghHpuVlv--*$-2_jQrj{k2O6hats}4J}US^R8P-WIIo8z{}uBZ@~SK(?!O$6yFgUnW!|}bI<2Oiy zI8RdRS_z5@t`hqUj10P%2sYX<8LGeDYP<{ehP6Tf&gdu%@Elo!YI1zJUGKB(B;4|V zWmzT9ZXWzBN1kE4F|b_20iFqqqr{BX1+>A8oZ28nma8gMJ+&H@F2HEkbDfT!{8_T2 zIr2#;-C8D3=*BeZF~qvq)(C>Fs9>0)UwBt%S}Pre!Wdi!39+8Iu#5#`y^se{5x?Cz z!0E7{Ojq2AbRt98BER(|g%BvLx*LZV@pDCh=_{PC->h1lm#`MO%|Rx*j>{Lf(SCDe z8-LkE1(7Z-CRTlB_Ex?&aA9EZ%-~eP0lj&$RJ7_D3?^EFPJ1V`!ZZq7OFo3jZdTDJ zM4mK-0yIyVS7SGVDWSCVMLB0obATHLdAULL?O^PB zuaUiub6})ARE_IvT5Pr#VqN-wnFndSqjA@!zVL0V9~L=Oh#ykt>ZOs+Zsx zhUmVRP9@YZ*q31zDT_{?PT;9qAjD-nl||(CZY1}K;1s)S(4LMS$`S2P#BYTW+_Re? zxVIZkTFuMSM>*64?9Po$-~HT}nGeY3#vr`Ms66_J)>q54gBy0skN?QY{7)x(j}@D1|rMQMC~ z^U4vc)9}|_>>JkT2q}W&5X$&%PDf>~Y+Ktu`(TnY01&0DUl5_{p z#cMc~-A$-=pA-8BqBSBkqo@Z00VsUVF;RdXSt?@1UAmKL$JI#CiEA zwI@GjXh?V5raj)pl`{A$-W}m;v*!BQMq2Q zHlg_iyIfe408dGKE7vmwIIIrEE{+2$m}RuuzW`-D&Pyd4wpW{>C#}r{{B!yyjYfb4 zJAgmfy8bu?@wy+g7*UZKmCwfXP1bGPI#Xg+KI_c$K`h?^CTa5!W7Xn0>*PTY|5-QQ zVTT#2QmV>o5IX&NDQxst(MQJ%#Q-UA8<=eZ?X*UyUK!2dQZTooqQKma0`%aKms|^U zp&Od2{`To6LW@*n5KXW9ovIx~)8cW5bp{p>jLVr^E(IeZwjM!-&!JV_f0Y7*ND8&l zr3IW?vNlB&Cqw)Cr3%CZaZTm`&2i*U*jvhK4W{dwp_BDVvBmKtL99TNR*vo|c!S7r zF&0gNgq-=70;yI1S*mCj*)5o}ncP*Jk>TNp7Q>k;IUaAU91OFtTE=AAzFO{=-~DA` zU*!G!%+UK)JN#HockXN0_h9G2NZY;#-$&tX;+`IAKtg%&!3HM@`lHwDcrWentSpul z-X@7cQ%QyB*k9*UJk_Z1>Bae>Hl!HJ75M@8L`l~t8xcBpgOFYEGwB?+t)UG1P5=V` z4I>ZTm3;Xaf~LXgF&zTX9ZZpo%V7S;C2BAy(QA*@9c1w-X`aZL7|ql{gZZ;!ni1@` z8g<9BP;AbS>qtaDvsfY{Xj|$QzKofK#6Oh#Xd+G9@~k`}KQ9|T`UU3fYq=09+?EqE zo}KQXZ{m)M361d7c~Uar)4vw|!iUGE8i+a$jlK!`6*q1$Kch)0J6!m98m_CAoCPnpnw>ne9x4HJaEVo~XD+X1P_1t^|J-2etN zb}MqsF(-Voh!NQ3u>gJ6vYmcuVAVs=mq96p4jA{}EywT*wP5Q9F%9Me*q>2(F4YU!dg z{j<1X6#1h0C_zAg98!F>1h#-^NWiw!2BLfi*riS)xE#gYHcB_glTat9| zjNw`2v3|T+9i1v^X{xyUwwe!<_G}MMCQvLxl-wBxtuVJ$?zKVwf^A4yXvdK0Ik9FM<)CQYcPf4j6V_Q z7W(t#`O*ok=31aZIlPh6ghWbU9(jpVg!S5>UlL8Ete!w9nNqS9u!b_sl3srNW{Ftr zkxD#iKbWXMDlWhd^SuCDD8K|i_XC?0O{A{AD8|45h&PgPFx>?V#C}jdd#8Zku}|I{9}EEvZWA(WtGZr;J@vTm-0;zCP7%E3QmgjAq4>hZi~C%xu$L z$C|wQbp?7xWF{^1wFA!d{XrV_{PVI_loEsl#W(!Hx0WD)A4RPxh2CXjsvf}wS8}UI zKAM6y2qVPQXiJLyJ2s=ntmf^vnx-M{k&cRjTe*Ux)#*!G^~P_hh&3+Cad(BU!Xegg zPGPaF<11^L+u-nntg&34$Ql!SI?R`$j(lq79lP#1h`RKt0%{f61tnTe>?YrA{IC(V z9D`?~Uo7ufg?uNDsv=KLjN!B&D|8xxWcOQ{r9$59v4=YR&qrouz!>+{jWGFGNCIyE zg2vFwDt@f*D$^c!ShZ?lKHu=Xb?C0GIb5*^cO7{tFCjy`s34LN;Vkx>fjTo>C#%nQ zQ05LJTBIYF{!j)RB&}y?Zw$fFapH1ci!aq%V)sx&3V%#tYp5#b%t=5M)Nxz1hpEDz z68liJHN{@%PJ(qUvd+By|7;S($NhSEc2VFeWHY&D`y(WU#Oca-_wa9y?~L7+z|4r2 z$x8UOvfm+QGqADS;ijcs_u zR@oa&3!2b=1TE4Bq8-WPF}AV=tgBSDO0N+vGMdD~O1{B9nKH#fD1fDXVhe7Mt2y=v zaigU92M_ekb`$-_fuQgl9y`auR}eo< z%n%Da>>AxBes9pnvtVK$_36Xh#@Sgl`yUylS~aLmw@aH^iv`Eg0fmEFiygD%Vud!G zgCpaPzTM&s4V6~&iFNLvN*|?yNV<3H`EILMT?yO8K;#{BE6s0-Tt_@GZHqszdix`q zkTw@x>Bg+H3tMIm_p!>}tJ}$O6f65QdSdL-3rJ71^xRn4JKShLXgt2J_J)+HMbTaY z0g1$egH>dhWVIYX!2aXdEE8*tzH|2fpRs`@XH*0+Tj_(U!v-Y7@yC+pI{dja>4HkE z{irhg+a{Af%pJaeIPGPJpg3sdJx#;+Z1jTm~~uZH$3C=oVRK2t}{>NDfC7lkoULS+})+ znYc5r;j5xeSv7(qq>0w+imnJxt=V7idFzJ-XgVvFw-%{)PAA-Ch9n+TKDB7QiUR!4 z^w5xn;ytr1AhJ&eMG@m5iP#_4Lz7m-e$>OynnNo&<=LljSgT|tbU*k+R==gCVc#mvY6KozS|pM0js6Un%V(3#=wJGSpU ziLL=+{M6Y^ok zYM8J3jmWh6NY6|R1lMenY3##@c88rke2m`G(Utn=059WLov!uV2FX#Z!K8B7l@_vn`$3tpNMo(Qeb zVO>$-6x^uQe9F>P&t~!rKY1DE_KIS3}VO|OLB3Eb1T%|GG@(F$E;EDkc7XexH(pFgD`9~%DP<%bi1^+ zd{qB6vjrA>BX@Hg8{##H0516;D?GaHM+w^d7{NAJ1n~={86~n2RA-z>^RdUXs#q`V zt&b>g2TR z+et?V{b{Hq5YdM7-B8Yr7FLZyEmdg7?Q8)vv_4k;YGao_ zw(fn@m5ww}D^)_lsCB+b^9+@1MbSzc-Wmw8UO+Tv{i;Gt_g?id09y5#f{H@x&B%Hu zUb}=xa8i>5bBw8VL@~`*A>y^i#B>Z{sgu^POkym(w48Q$@nz3((sbd`&Zx0WR8K3P zwq}{`ve55A;utG`Jyuz#cC?cV6?s61^~-aVx+_T742dk)VO^Wt3p$}$Ux%XQ)F~r6 zvFdc>1w>cH*moE!W{OxhIERSXiO>si`b4MJd(B|ZR!m<`Bv!IJ32MAzyinC#v|{T6&M%#7a_~%^q4WqDJfT z8{O@SH0HDyQLGBEmu8gSZ-Zt3AOZW)I<8M5h&w4RLG?GL>6ey7Pp9dxh(QfTe!&N1 zU360BS5)}Y0+u3Dw`lAyyd49iAOI7gwrW0!xKSQFVOeh_uiWH2moq$D`;Mi8yX z#>0aK{dYb&CV=stM5(_tc4IUi(~&V<489R(%l=>nS5fTmPqA zCP3Y3)n9_oC|oZlDca1YxZDd5{W-t(2FF0H!}_}VM9!5F5>|MyvT5HG_a;4DAYK z3kH8lF!&v{?pEvj>_7NS5c%p!D_I>4=PkQH^1X|w1x6*hVx|Y%ZHcwI(fuNR4X^$O z9KY&`uhu|5R8K6_A&0V%Lb9`CL1p9n1af^Dq!4X3gSlW#HY>^r!H(!B*tnIlxdcyG zT@F(mTJI#eRAsAVhdXGLE##z?Q(%tYJri^Tq7h9)|Y)wx2saY>4>x)nw$)hI@o2VzTx5 zroJ&>e_@%AD5v)*wAhd8)+tn1O7r0b#+&G^A}_>laS>tRW)7?4RyA)$Jr~-D)tBt5 zHMB~hxIfq#z|5fG%DhuwWG^J75OO(9#xPr{cpjqYrFk*VcM@BOVv7W+lQiql^pcH?u>224k25dS?6?ol{5C9oMMnzv%OVOO5g zC)sc~auN3Q&FX2zQ#(Q*2FVc<30G6>6Qpi9qJ3CYqpeRoq8N0E(CIja01mn{N7}ww zK|?QinM72CJMWH_XxhPE1e*Bm-UF>_pMR^2=kK76!tv}jU+WAxQ5@pKD%=bnP@k%RRK{W0 z;R$`uh-i%ae@zCUoI>Wb{FvOWnq!=7Emg9py#4t{^h~6G`R^M~{|GbOgf_cpMzl4{ z-eXp)d(cIf5fkRpy3E4%%XunoFq(pp*-!zrj+w+d)A4eGKJT0*vm7X-&wjqAu+xcoD ziutSqGcpboWw?4(GR?MBUnxBxPEuKR-rGi_S(Iz+#g>$>OjYVjJH}K5+gdIO(3YWkz;h3#Jv<wuD-rKTlb4XMv??yvged9>LRo>2A2bJRsf)gRB5i`O9Z2`kw|bLfEu4Yegh@){1Lt-DMt&+6VQuj|ws z_B9+>P}h0kvpgd-m-TY@sYGXaN9Tj>`^Fsz)ybphoJU2`ru5EG+rHaRk>jZz>6n~o zh;eA2pJ5b9PC6PYbr^l;c^V>y1CDNe(Rp;$xfT(fNW2}FVNv#A!gKgHd5Pnan2XpR z(U$D!yP^vg^A>9($@KbVp2Z-l&%n;Vj1^jnacmsyS1EHivznt*@)-;UOLTmrNiPwzmk@!(yAa`= zjY=i7nFN;yAKbhzt(uk7*?925uJ;?MiS^R_#ZcBWXO~%72TDw{rhIbOdyNP79mwu2 zjfYt&>|tdLTlu84|VC=%`yA_ zuJW5qIgr-FkeIVFI{hvCnmR`Ia@V;ey(8_ET#WSO@z>Y#{)tY1W6}GK_KpMl_H|Ju z@>W&l^Xw*jxYCKne-Co&)1b1XWLu#_=CnDq61K01kt)!$wAe>n2)}laUxfJD8@?&k z4a+mhDNse=Al+Y*uV=0Pn^ye}?>Swd$l*~6LRl->o*O3~$zQO3WsZ%+BVd+qW7$xCJ71{ir(hA^^e1FV$HXILr7I_Wc z&oJ`JZ(fxR7q>Rxja~m{ZTU~CB0m`$yFN!N*;yMHT4dApjVuV|70&wXQ))At0cW5S zl_=ph#+G>FawNwpH|4*pkG9Wsw4%eDW@R!sNVr2At@p<{7DqC5~)!oDbb==fwLh}*JfY>PgMLZ zO`7pNzNk9+rqQx=mbPVc(S@JfRS@aWhel7YUV4Rn*4m+x!?~gAWR?C&;p#6g&xc#rh7m#Ve}}`uG7;`LrCaD-%vz3-Y3X6iA=d{7^a2R8V0+W_Q4o^_fwdk za>8srJ@#p8&TrDH=QAcWY7%p|pvwrg$D4UUnW{oBVv%dU`c{%oLi1}+yiPGV0yEN) zAL-Vjqd{Bw3-)M_-J$SdHzClg8#Lp5xr=lgEv1ETE-mQqqE@qB0G(c~J^p(x2KGp+ z-k_c&d*zrh4*E1a*(cpC!qBg)rJanzGb@E9)T(cw zL-7LsD4xY=S~gBt5XH8@u)wy!g20Q!b5#*xTP6tq(VY4}GA;4X8E;`(ntjm^hW>9D zm)H5QZ?ykQhMon2Z||E`C&$JryvtId`fF3MS2A|T*Gbt>=X2hM{(bY)ZbzZfrB&}& zU&9B=>N7W2aXaxy>VhuhoX#o*A9=E5b(1Ni%czwClvF|TJB?adye6!pvuxwjsH}he zX*F}ChsiY<7tczy*cjR;R(55@p_szfo$u}``A1$DK;bB9(^uvf2Q6}G+M$ltsio2waTA$ z{89DZgnz-r@UX(kdMWIV-N_mn(2PGZM{?o_VQjoBtq{0j$qXl_)d!gz9b~O)C)=Ck z{o7$=U=We)FKOGv2eO}QR)!YuD!VQ@-Y!DYESmVMmP=doOGMRZvybw2l@Wo4o6oOi zp)|#cyQX)sv9u@t#5fwa+#El}uK<`N05~2#U#0+DEZ_VR0A*Uu52Yx#zXJp-+7q*RfURl0k9lKt871@LkGf#4altHc zz)Th}697Y`D7O!JZXZrZd(Y6GkZ`BQEeqpUyWf|&-(TT;UnJjK7pNWxK`6I9`Kkvh z3#533Xw${et^OVUXyr|)tA$}TO6JGKJW@vGW*6qcrD}>Xn7c~gd`H0QnR59f1#5llRPT38YgyYY-z!ti|zN>)gH_7Lpwxi-M@0P4DC)s#R-Pg=p?w6yB z$$V!F2;-Iq2C!IFlp+PqEf9C9pVoDrYSupIjRDlXj1ZLDsJDG?P%T^xvPG z*d?Y_6WCj%evv6-oA4J^r~^OCtXOCux4Q?E1Q9$+7D~lDQ z_45lBbdhE`zG%DOoH-oJ?HtZ=jRl%WG1}vziJlQ{@!PK&dx@9|S-WVLpP>N~%>J%u z!xWL)IH`lJ?<=1tvDFpAZ&79UG!t5EHq4IVYg$#b-&m6)FlSG%L^AZP9ub=l+PDBV^Xnk$9B zp@`FC#TjA?M)*FsT;qBl=X@$6NrTX^{b;)0Q^mYE?6e}#7o<;@N9K|&0t_Du`7ww? zXTpYvt{}-nY61(NV74h)&%&c5&c`@&392Y{(%FOt@S`&n4KIs-nEN>I7)_JdXS-Bq z2=yVnS%dYGbJ&D-p!sK<)Co43a%N= zDLa38)~Xezq#fI4`e8CNtVbvyXK9SsAS4QO*4fVcxKOgAKXyFQ5|t*TZL z9o&E(lz^^O8oSZUkC+Qv|K3+`spKXOM}=AeIg%?6lZ2uQA2Axz1;MXB4CO5i`wh>p#vA zf{gi^Jc!SjtYlr0bgkwS86h@K3ZY0UyRl*;2iX2-uTQIal{b89&dWiT#B|+lGErST zL^_EiUsAGmt{hK3Thb9s(P}n2#apF-$F-7DF7E}`MBX#!zu_})uJuiP4`IKKRb*G` z3}gN}pRqe=EaqZPy;gbj;-39Yr&EcJrpJ2b;T~Owa5POkiHUTrc7Ju7?Ds0hYGZ-i; z2z9O`MpY*W$JvfTilW1uAjD8}uk1&7H~nj^lJ0#Wip20Er5Q0I$~UcLs;ibS@;gyMVWEKue%A`fF1Q z$A|re7l+de@4y9hp^i_n_3V465~&PNG88=WQ$~6mQPXMe_4{P2G2@Ms%DY>9BRuv8 za)Q_6n=*jkrMl(6N(T0UG8};uxOG#-_H05ZDIwp$`m02t6jcL4`#U739 z@sOy~aF8QRy2@0bJyYz%)V4TaEY30>%|>^!AU9ULu%$T7YZOo5&Fz!J!&szx4t&AJ z)KISDXhjG_F$J`RHx}Vzb0WHz{F}!0ImTje+yuu8w-Cqbelu`z@t;vYDcK>b_Em$Z zmgSoV%LgUt491)xAqt@!oYU0VyY9i0oJ*q2?ofr~58K`U98q20i#CiJpj`R!UT69L zl))4q<5yEdn`s#tB*Y~xJyn8AyoyLpgjx9 zir%{^B|$3eP=nyvm$hoiF2bP=nlu-*<3&kEq5PeA->p7xWm>_4jmt2I+L-qqL3=CL z=e&mxb+aPgJr#vs@qKI0zGXnHMIwRrar6Xw+wZB!YUk$jc27o)M07{uQ>tX@tz#4`8 zLq_3*z)%qID+_Im(SVcA*|A;_fdF#8wd>{EZ35=M5j8kt=GMN=dV;s{z3P;~V6Nsp zt_UY;hF(^Bs=WPTHk)BgF+*(=dt~hof&Lih$eqT35Kv=1lrHvxBDwY0yZa<{?jf`0 z(33pJ5*o|gO~fi85|fI8Rv;fCOJeCbh>2|Sv&7n66S|_pXQbvO;x|G=3*})%UR5q* zbjV8K!}wLaC;;9HUu2xAZ<_cv+t$#Z#@YC!8F|$xe-({^oj$32lX2Q8e_B%6RdTNU zYw7l2Q8CMm1;`R{*R8ilY$-*cN7F(L@-DP3e38-frl6+hq7B0bEad;*tu}e+Wqm|^ zr7Srq{W9Yz%WHc~?}%aF5o+sS$3w`1E^AH_l}sh5CBYY|j)d^*WF5Z{z4ryy@e7jk zTB{aM6=m31ouWWvYDk_l3}BuGb>xShU47O{U;byyMqLqlHt+3WEe>~byaOCfagX*& z=mm}#6*h(W6s@b?Af$t=ozRmYU853^e*L6xg7ZY=SB;>`gxKePORWM&ADRK ztp@(E^|K$a%t&*z2SJm0Ylis^zrdOsFt5)x=N3WcK;C`{6)Zp=wr*A6{Pqq-W$m!WrOGPaAta%MnT?mqavwMm=kY+^9ug!ua5@NsEH9qM zy1gM@rsVbQ(dF5o4+*tH(X~b6s|hPECt;-Bcw4fH-k6&|J6o%HSn%qtIa6Z4r?0ZQ*=cZ2Y(&oDIwPhtP!ef4K*-P5LU?}KO{1CK)qhD zqDYG&GJ^$wJ26F)IiA%U!Q-2*c z6xkKA(<9sLA!hmO2Jy}HZ3*J0>pPT$T_N&X(SH*{9QUYPBbdV`GW8wioLttju_Qa0 z8jJ-_{;Qu+G+%Fs5Sn|(B=B{4hlIYY>?D0kq=8EwPdtv)LRQ>q*qG<64kf;!hx%x@ zH~;1NGVz9@qaQ?|5evasCCB8jGX}yu_!tpuJZ2NH456;DHYwQOlpOm^8G~v74eq#G z!y;bDz}FQ7vyseF^fsQb;UFFKcCg@zY!8V&%{y~p_CXcK>@4HX?D#Ka9721l5b)?1 z$%5lNE6Oq-&dpzzt!Ea@$dOIEhh45jK;JH=XW-$bJOeA}N7Xw)61j4Fp8cUbhyWtP zT%DW0JlmX;70y(J{BZl~g7Ea=efDT7D!3^}{}9mD1CSJ``H&Z%FmFXK)-E4ElC3}E z7K&NdONqz(cxZ>VX^Hui@Wgl*_K^@~cPU9zc(FK;OP);YRwCt9UE{6KeyQuOy3G%u zd%iQnSmj4vi-f7wO}~l*WGQz1T@sVF1-|SuT;e4-E7M^j2oW(vccT3QPEiol)yB@4 zuNkw$9_uwMEeJ63Uy1{h)jgP%ffQ=4mpW-#)iiINv_Y5|PJ0jxK9~sv10?YC8;21- z#g->7h>-kIIM~WpWdUf_-xiqAZRSJi`XeS`YDIYHGlt{6H!Gc+?cr2|v{MxsvB1fK zVjrdl*Za(?V>e1rnc=I4wic^XvTB8wRM(sxe0&BHSYaTqCAlcQqHh>TUM@F5AMvXU z;xm4GAGLyB&KL@nr&LK0cE^pf^mqd=2+>S~v}%zWh^U7MKNbG`3SZ=G`y!QBlrO)b zuwVFZNwTucD}F5`1*B8@$HW#2@UiuKbdSOpbYsjCzF#%+68L|%de?K-v%Ey>!~0Ud zK2pXcMlLr>+SiB-0A&6YGeu=!J1ajY_~YqzsGD56+{tIuP(+g zi8JSKS6vGF!neTv*6dm}M9hg0sBv^LVLH5T273)5f}d63=j2Jp{ZJN!IXgq7!OT$u zhaGGvN7b$P6A~uMT~zTcv}!P)53!*na({-G6iHG96Bi`UNO<fOV0i`-n#qD;y2N^|m&Clp?F+gH~x7 zyrtmVZe^0Hqzdtu63o;zqVF#E#eD5sWkVc!3ByL92_a(y0|k0lgvg^=u>dRw6hnvU zlN6@buj*NX;Pe#UMGH53oCPtnmqL`VreYs)VE&Pu68jD0vS_|JiMh@7WU3Y*2a!E_DNN2Et3rOsMMKDn*|Hu}VaT~#Fh^QrrW>sPDaKyA zwbcGk+F&JE>;O{-bEhFLq64JtDy#;T~{E)-> z?=CxYF-b?3WFTI8*YO;XJeqcf!-PuWAQmrdR~58bxU6c$Sa<2vh?Rznkc9l(rK&&6 zOl=8{6_&(0b&8eKVf{O}m?+CcJerjuzC~cb*#lXq6CXr zXR4Ws%}GZ^3J1He7vc9VG$I708LesnGI7ftp@D>`1(t#Qy@KrB16H8uFC;A?tydx! z>$roop})ybMeHk|h!xi&KyLAh{Tzd^B2XLfe$|jX+ng6DnCCakG8T_nmR3-fzSvI@ z?TuZ+n%Uo%^y+T|0&LC583zRv39v%lwE@tb%fGoNyhQ!WPHub|sE7WhG@sRv$*OLy zkMLtv)BUxn_e-4tF#Z5;8-QcT!kR zduw9&G!8~tUNV&NUdsPtnKa5ogBgivMId44NI6;{Lgc=*S!-l_Q~mxW*e5zE9IuyF z{%{3yg=F_Y#D4|bEr^ey7AK#g`yfRg{HxwC{;SjbY5-#WKc#+wK(1z*{#pM|{%`wF zi~q0vr_BG{|LSD_7k{PykN&g%kNRr=Ju>WbG8h75=ZLaEcx>t%-`cr}=m!U@PTmn7 zv7ml3U5=BpHnE^tLiYR-eCLi=v(d&z1&8PDN@a4(+s2S+$B}$S8&VJv6;$|_UA;K1 zAeg>{>{=32Y_Lp9_O!%x8nC=ud@18&Glqf%?VDpar9hz(&H13B?;%9OTa_eCh-MN_ zZ<(52^+wg(hwkzipM|GGmnh4Xu7TiyUh7YZhT6T+$~_*!2N7*(sM8b&ZRr0Qe+$Hn z6e65fbz;80+}W+shE&?08fqI;xnokO{p`v;(wA#hUzXt$D1G_ot)Jija$rN^i)EZc zowd-Ob54PJMyNimrBAc{ena-0fP7Sq>Q7zV<5QcN{FlIn|LIjrmjr+%OAJFoDe5wCWUrzad`Lgyc zr&A3d`#@$$o55#@G}nIj3Dz)%fk`lw0ujCIiT*{S+}iKRYr%#J`^5=G2B`q?&RAO8 zlya3})T+gD-W~_hm>fO@!@-&i;P|g#-n|fP3i}d3VU>b{C@+|i8pQZWXj^QMQNK7r z?E3JCLjtnsDF9yz{afDQl5r+DbwQ_CKemth0<}NV1JqcH$1X#^(q1qxeK8?nk}AXa za+x>iy7F%C5o50qJ_jLOvFnqSr+D}1Rdh;{*;>xTYtfe?cN2Hzg3 z{Iewe7Ub>k29GURmaMXcPMEZ{RT2`dFeN;5*?2i=#G6@+S`Po3)0;!2)%xMfT%Cj% z>98LtObyQ{Ow(6FyBHmc_LTFl{+Z7R3{D`pgwbw&5)d-dNh|uS;7uVF-Q-ES6=tHyi6m^l$>YwE<^jbEgEYyYo)`O9A} zYV&({7To63hhucNXusdP+kV@ek&bw@Aa?8Ns*^*O4F}bbyt;#lQ0u~36U#ZtoZAsY z58W02mfRvD_S9#{?d{wWcya2cobWl&(e>kHkk+Cb7xaRCOlXg_0K+SSQuf^+U`59- zMgF*{NJz>%(zWUgpd`NzTC@1vo`4hNGUVa|_i38DaN4zh#;w!qZM>x#>tZ0uLqK?p_pB^#?HmWdb^&k!DY$6W z|6w@?XDg>Yr*SF|koy(iTL)Q9@tKsO`)W+I>P(K-wPFOZyKqu?RN*B$%C0^2mq=r- zr7^+TRRx#oV#ruOMV?LK8J6mA@|6d(^Q)^?79=j!r{J|UQri+JIQEz%kMqH@Cr4r8 zX{&=;`v81Q6f7I7hbBqRvJo)KR-(T>H30q>?RkYyr9D&hZ!kI0u7id1^h$)VD78af ze3skaLUikKTQVu!Lm3Ax?tw`V)abK*BSRv3Sfv54ZOZojO^*0?Btq$)ufRs$ZdeO29oIoP6h zqyX))!ZF86y*{_PD=97^6+4+1Litgt(G$CQ%ux&OSPipOE!2Bpffs;sJ?Iv@rz)FYf#4M;UpU5yU>$SjK(u2`fhq zXRJPk$3{ONq9plQ}rkwL|7D;BlKJ6Q!_#B5+LvwqP-tuE^%u(Cv;5FL;> zSID2-s^$L=W$ywXRdp@?&twKNfxrn6AxJ8SQK6s`#hQ>&1H%LaVq+mlEAerwwi?@7 znZv^nGB_E{$#JZ0_14~MYpb@j+FtArFyqtVhZch7aRvGWu zkS>vBu2|vN{625&s*`dq8>m2zevDp4A5ua$r3Qag|57$duRh9Ai?8`mWB|x0kO%aj ztmkO4JfVE_Hy?UH5Vj)F68^ErctkiRD~BlNupMTWQ^aax8*wjZ@gCV3J@BjJ-!Hy* zlF&j@g~X6jpxu1vDQ?Aljy)_gjq@O-2e#>cK@qm;Ti-{ys*no+(-e846)`mfsFt|(9eZVA}(Xa3+2$mG8VPb%g7BCdBu9kQ?YfIb-Nh;DH&6b&JaGR%9(jXMb9yi=*vv~*kgVA7)YWXCe%Y<@FaL5l5`Z4 zRpc5v$HkdCs1ZAEGO zaF$~QGY)wcpl?GYo0LFHQkU#-5*WtOth*(=QX($;OY&X~+jQ!)q9@MN1I5aF)*h38 zG#2DwP`E!$sHN^jO_-FaMAU;CTko|M~KFZ#ozIEJ%jlAQ{!XN%XU z-WO3JQ<#r_C}P0qvnOpy({Tsf2TMb%O4K87ilui+WYfw&4H)hFwM+=MhdGH7P*H7A zVmnfTkgqw}L~q^B29w}|uxR3hbQ0HEajVke7gLp4+FV%Lp~WO#22Dmc7K~i2#iww` zWxB4##oIoyumIU)qrz%@pvxOKzb(~}AgEjF5&O-}@AU(Wv*k~$b#&8vqm1f~MD0iq za@@okpV8Em93R_rxGwW_xy+2ceR*t8v~JnyUh)j|T;7x%8EcCUJjC_bU+2FNjoYH4 z>b5nP(l2VO_ZI}|+6Ma5FUq=oXbS87bAt3y)`Ao&@1Un?)=^LzxU`t%9eQ4i|8&72 z6jLe^pzwZsF-(ain_ha$MH9^^a0=h~R%{wZEf}!JF~?lHc!Z zwZD?zJG9zg$Ztfe{h9o(#S@I*x~ACM#}IL7DmHy^x>g&Lx2q#H!8wr)!S#B+8f~Mt zQ-=G)N5wBEu?P*3fJGkqtkv@H2vda*ZbqA35*(vXLW!JMlos8184PNe!G=4M56Q8m z)faq63!~qx?nvIlgRKF3;?_)i{MJ$S*sWviQCl-l@TUL;CRjZxF6`dsJimXy;Tlye`*!(A}UM#a5a&9D2o20d# zI4x?RXxcK9Kc+nTdK95#ofQKiBDy-C9NT||HI@CqW+Ru670YGKP9j&uN<=-1o=8U? zwtRq}Qk`&lDv4*fTt2@%dLp3DW1Nk0v_b9+j0^s)SMNLm-9nwfU^4GdJSYu9;JoZm zPEqS)*{m)zL%Gl2&IFzcZgj)AvrRblG3oOZaRngPS4bE`S+kOba$rY=sg&IdO`$G2 z^5Q`tqL&tl-H1wJECF2Tz3dP#zNe^Pi#}39$)J1X+5N>>D+7B$fK(57&W!o3v}e-c z0g3Dh2Y~&b_*77BIgv53~E%ggE*G;)r;9s^!No@t%TEDR~k|ue(yVdkDgja@j}ukiM0SC;J`WVnLde`Rh4Smuy6Di30cd^CRil zOgAISPhsq&w{ix*Il5^oTj|4qsWRM|=_?6D3q}&giXAk%*gK8B7@up~*#hV3l)fU` z5PbznzOd!JfJ@uHqQDz{-g)LX-m)zsN=Hx3Be38>fJS;p7@p4~nZ;WCb*4IbG0m7I zb8ymj&Y`?#-QIT)V2BDH*JgiCaCYR1V0C0^swr~#^@b2E^9FV=TbAHi(cW0@MHAT%a-BSXrawz9kjIcSe>W#Cx5Z=|une{=tpxyc-mYY;2w znK(1!T_{+wTdOkw0Z1_fBO*Mh+|Byx0ZgsM;0JNWB-XCAL48$oCTX0BCQdAzk>;j3 zk((8euV?V{_%d0*A0@9=@SGiK4pu}$Lr1xYQ5Fmv<*%bBDk4)AtR@bOa?>2!pdl^Z zE2G>r$LKOkkOKD{+wU7|EXz@YLsXD_iPx-2(5#24swYeU_yzZyNBvo5Q_>tE=7)gqiIu|)Y> z5Po$Hczr=+O7w&-lAqqX@>dm72lE6G>&st_WJF85)69xayC!<#+(>cs#GFV`^u*f8 z*P1+#zN;WlA!YDpuq?~FXZDFbM!1I{ z!O-j2-jSd{1aS}`NSb`aE1~OL30?P#2vX?%uD^-{ix&S6RfLt`*S0S#@H?xO<+Ft6 zE}w!ABY5UXK1R!KZOn_RO(d97Tg0s`J5?KLMiv%~7^v+epAOc>jVD>oUm2;;TzeLy zmoL1|7k;STkk=|%aMBbC9m2+^c-pk*-34CdxL<-75izmXYxFmQD5{E-l~+827eGtejTW4zk7f7|Q$&TBwlldCA)OZSuK1U5luTXGU z1{?-QFo99IV7kl&lP?9P^FV@s2UElsvOknbQk5o!(5Wjx--3$@oB)B=PakMP-xNK5 zzMg@8hWtk>zb)p z+j;+Penv9RGiZw$Ju#SCx!~B%n0fby`SyjC>$#+9_!GBH}(fo zYyKOq8>}m40nq2&@uQI*2k0u4*YCb5KsTBk2gUdsdNqJAnm)>`Rn&>HIAHLbjRn`KIWq+4?zB zeDGt-JMdwq`=Qr(i6q1G3yQ++Yci103s$h<&MznocWa?=cfYt?_xNE1$ri`p#8y*E zV4sE{tGgw1hNsvF6{rOxhtob;*o(5ZjMr*K&T+IkORMeWVslNNGS`W}&W$oidM?Nn zo_*ryMaU}zP1dg*CI$;OF;rHN+WI=O7&-jo+o$nkycIw2>617jmmp7Di9BshW=m+A zmw=eny@^nebOhqSE0LVb_qB!`L-kHeWP*StN7=Op=(Hf~b>g@ zNOv8rI@7U7ix3VaS~Xo9>C~x_ug1S7hvhS5Q4D;0DM6N;Y6b$EU}>s4HECF<9Iy7F z9m8u#5H{7ZNz$>?QXO;5GoMA28C_4mCKAZ4HLQdR?s7`j{+&Z|x+8Ie=KSbBAV`Wt zagi=6?bWBKFk)1>nsP&IF7G}4i~joTK<$CZKQ_P9$m|pH6Whc2Xk5Lo+kZV}u}U^6 z0UOH_Y|`RCQ=2g+ryMA|F>|a8_hfoo(LiNJmN8Y)^(cHp^@~LNJJ;x&C1rZeug`7j zOS`2}seboo`pUb-7&|L5AE|yfgos!K=$-bOO9FP!7C%dZHtK!EHL5+2E7{~E%X0Mc zfELf;0kYI8?{vkOcIbtPP?{5=FubpR;YD7tvcdhzM?QKsn_q3^Q`F!)F;oSM17x`P<} z5+k7#Y%N;kUwbZN&x%}`8hhAW1pn=hDiI{XR;MDI`ztFtv9QFea$mwf)p|nZ3W)q( zBmh)ZfzUAE#jqsYll&#yqhmupOLd`FDQwkA)!m+~e;`Sb(*ydw_UAcCh>Cy?SS|9L zvlEV}7_$f$%Twy+|J7& zCvS-nr3g#@Q38%l(6+a^{7Ga~<jc73StFEndlY(aRB} zeTNI9ZqV3+f)605_R157G0a!5)DqM z(BdykH>GoXxk#*@;8jgX(1=~@E=JydhV-;gdP+A-d!rkqn^#)v39~PKtlXPqfdt9o+k6=TOJ@Th0L2hn({^t)H2QJ8$uvc)~c;uCIKyaZKFPGfc~g4 zv$y}`L$QHDV70XcZ>d(tYpPgsD zfaNTf#ybWXD0PM=TZdb{{%f>{Z1YDFWzc!WE7ADRl+-q5(26}VS|pd5kwi(-taap& z(?NZ9<A5? zplgZdOA*s(A++mKmb1$OwSr+1sr0&lIJ|`0yt|`C0ip~c(;*~Ew@goZ31gx zc}N_>Z}JP?ptvtu?B`sk-Zdu{`ZBFI(Tjn7iG^NH>%C@aBiVn~TvCb38!Zeb2_;_q z6Yr7_#0p`bbq-kuz@tV`uvn;XXMLIX=&nr1sD+2XM~g`&JQ~G$H?eR|rnN!ZC@0=t z8g1Zq(1Y=tbR;Ii>dJ68^tA_TdFi{iMd%|@NMU;L8G=qB@C-L9OB9wBeYu3KoFG4h z`!NnDzsC*wW}FXQ9$LA#-MU>+3X;!Tm3KmDC4E_zpBXLm5|3xEzpl*d*i-5|e0nd= z$%Ni>WOKXqbQ~yUp;xwK`W6KWcSojR!`5g0C(Hnd_tZV?i3bfa4(R5IS<&XZE|3(h zzB}T`oJ{gU9cJ|qPD=@oJ7!sPU``TQkdOuw-le{HLvy?E%aPotC#DXmnAJF)4k^6 z0NE#sr=wi3zNxsR$W+-R^vSJZwJyZis|&XQ$LL|=JM=>sAGKhUxBg8ypVZ=YV&BXb z$_1ZU&8+vDBZn&2M`*Px=mkqoEo?E9`|GoUh7$N_9&fNMBg7IXAn{QB#(He;_463U zS7edSru*`x8U`HZbvO7OXaH`x2kGDdGQ{8gO_AISL9nT{dX(m6Rs3 z?f~pa5>>v)>bUo^&#Ixf&!?GzqJNBZ~Dk&$u}NEDN> zoh&wT9Er|jg?=nt5?-vG-Y(;n!oJAd`m#X%;?cO7)&=UyeD#adAZ~Swy>(@2^^4Q% z%lvhVAsp%Ti$~U%ji_5ZqONSD-4i^n#kCk0+~;Xzr-Vf&xHbhfe)vhMvqpz zONxdYoqi^_ahJgJyD^nF`bpF~NZt#^ebFymR3-1x7aJ7~c%NF+-KWC+LhqD*@0H>6L{%kI5{dO+2jQ>afrAa=Vg*-0q3+Q3C0yX4<=X-pj!M3-+O{{bgh2j8D1s&(eB>OqkQ~gV4luM ziJ{u`t3(Wy9o=|FKbo9JDZ&CONQ$ahOzy(^TzPeYc6VG}_3LF)VWRBs(RaSkM{u1M zas*4asDp~)Izsj%>YKIYk{>BTcm+v!B^`p;9Jc=2DVyE4H;HncNRdCnKFsB)cH zSZMdjumPAAI(J1S~5wg9hFUt*V_UYqwp%F%V zOUUn)u;I(o>q3YK6ec_Y6Dc@objqOv43z)a9p(#a2n?ZRxSBV5h^QBCl&C1`v+whn zt*Pg*-h3uS;rK?e-s3-qFSS33HLrGbj|9$es5!>Nvb&H5yVH6URt;-o5|i%X?kC(4 z^rR(H1cknY9iq=#@hchE1{L`2>#fk#X+&*M^Boz5bc#?~5A4Fx6*Z_VsMZ$t#bBQG z+Ae+vlbg44TmC<`KW$k1<5TUQOZ#W3_B(z#*#0Xmw6AR6q^)b*wr(BX)-}W0V&_tO zme{HRGixi7f9k%|*loRX_sRaQk0h_ay01aa9KR=DD)u_GJ^_0Jop(Wf`ehRToo&(~ z(4RGd&P9phEXC|6vOhPzocVI$k?LoM~0r-v3@*W)q6s z`lY(eA=te2Q!d$2ZZoySBG`b!z18P;c}OuMy&w#J=iWEN?VWr7(bOGoklyX-E^U)P zjsIxsY@&4$r05<2C|2W6opLfNv>OZ?{^dR;9ta+X7v zM*v#f*H!%48;7)CG-}~i!~;3xdH67Or^V~2tZPr#OLkhz2oazI3bgNfj2(Tez8jn@2@?e zS5tK;Q`O514X+rfu>@+rK&m7H;B zvZ=M3yyr!AQt`9lcCd3%b&9fFV=> zBhT(ya8j^CI^WJGJj#@<-FgVV49A@E?uKc6H=q0lcC!PstS+qTDBdY8%+2GAfb|^3 z6;Xlf!kjgXSqARL_e+QFtCBsMiXyqu0`f|xTI+E>w>C*j@$qFAn_<(1kLIXE>qyf-VoDHV~QtXMw>|=+hw}*p3q}Ct0IA*aH8Tv8|jpY-}YjoHDjyQdXAeL+BTvi*t?L^vfZILID1q8d~FtUae45 z$yh(!Ar(6(a)H^Y^%gtzo(a9ZZZniZB-nI)E>vT%k}X3jagOywffGyc12{PoaHq?g zf3$19ziWP=Ykp?(zkt4oQTnWR)uG2|(Q3a13U{&T!bfH+JQDiQ*tM&0|EA?aEgHN2 z`c`t?*e-YXKe+$RE<1~r*v&%T+w~Iv@8!xvxn@;vx5Eq^Jn-g0JCky6sB)B1bMt#8 z>0!flg8@Ls;=iL;s*(y7d~XJ~K+-uc%+2en=8j|pzP*c-G+{zKbV13&-Cf~M zJwHVf1Tqi*MbU2+>Hn=4p&=^n#62=*X)c`$dn5fV3v}&i^$4Aoj3knaq@{SIr>iWp zYi~<&y1%O|i{7ltrr)a|ja_BAay6}MRi0hURR#G_Xl<}tXVWa*>Y5_my2dX(yCy*A zx~|Ez$DqK-P_8Nx&Tok4^eGeWo}^hShpoBl!2bV&PrJT06rUa;C|nAkQrLuuoVCJ8 z)uG`#zZZHCS(;dkf1ukW4enM4U8L?8{(m9xRl^#beM*BwLrs)gu|sp@{2lI9t%|@E z{s9K5f>wl{4yd>N64XPuk@hXBTi=)1>R)mAFtg&2S$f#iEwlVHV^zSo-ES<;w6EwY z2E3MoU~5O3<(5(A2Y0)|hlCfACx;AXw>Yyae0Z?bVL~Bykv}N>S*p}$Mj6M&IYVrp zcZ+=(A*KAdndBi-m7*Qu$}>Es2*a^F z6SE28tr)?(i2jVgz>U(FioS6uSK04Z1oW%Si-;0kOnR6XCwQVBc5d7=;(JJd5z0a% zkyvmnIB8v`_E_th^egQ5VNS_#jUX$6S;zVK`kt6aq?1ozZ&emxxb=SDaPfnfy@7P1 zUF=kzj2JD(_h|PmV$B z*%Q4@_(vo9Dyrz#Vlv;TAhhjd(dgOy`HS3YckhtD+kYYXCD>>R(YU3@KCf9Dl*B4M z7~Q0@OnlJv?nq9VuqfW$_TP=pA$caioq>!D@t;uNUnJKA2vs-r3w()dM~Z(0=f%ji zJUfIchg0G5!f@}V5rw(;tSu5DV78pZ*g`rI*^_2Ak>^WT?(%kLu;K=nSePz~PpkN` zbPhi4lJ($pdu*}YKxfxIP#^BB^PhnYk@CD3o_41KkAee}f>v%b+_#2l@@>pP@_POZ z2%R0Dmy|4sAa(B%D6I%14A!3ysJbPVn>YC{ zDgA@Uvf!G?Gz_rglB%R7CTD4HvWs^uF_HLslYdj!;$i4bHmPg%z5Ckzq9vvZw8Z|G zD))2BN#oy(Tvu~3eXS1OhVk52wfKHj!Ox{oOHB4ee#Cy6A2ERCN6xlhds#3N!IV8x z5c~l~fa)VvEP4501<8xlwW=j~uDVurB&VorRZ&t?*TVaFlcLF&UVS@qu7E^~OX8)L znD_VyZ+^6jUv-$5f5iaV>qkDN6ij+j$du1dmJC*zO!8GrOx2rwQ(ddd zlM;8$tvdNvb*<`G`7c^xf8dEX`A7ark1HJ*L@p9Ub1HmN6%bMfCXA=$*((2AOYA9m zVXtk8$;V#%do3|l)P3PTZiz`od$0Xb zyKn3%sdwXBVj_U`+8MzNtri=-eiq%9xAY@P)ENDVzsNd!&hw{3H{>_oY>qQtySeFu z5wZ8CYR@8hntO?Nmsnc&)zpj;vPL?cx@=#u{SmH#Jlym$xhEk)PPEYcqoN=Xs#~aM zY4^!Gkfk2nYOdHSrrZ9nKnq0cL`0eN(}Wfv=h0`?rzO_6*M)l>Vs$)vJZ;??EM{@4 z({`dgZ;U197^YAod$m;Z)|i1xc4bQ?>L5=|kz9HG!Qku1)N6e#@8Ebkt(!Q`+Bs54 zh?0mqHmeet6cG3j7qDay;t7v3i2(`227kadgRm|J+Y9M6%d?Hs2jl?mfo(RPmW3~^ zxr*F`Z|p4QtH?OxE#n_e{Zs8g;md0>yhq0oV%W3xQ}#Hhw^+GsM7g4z`NlR#djf?q zt!dJtW7d-{M(MsG3|mS76yJk&MdYhUxqVBBQeLzqu#P}CexFa27Os{nzskS zJFp|SE`U5UqJJ*Gro#SjNAD#z>5GZS+$(RQ8?ro+jMidtOYqoYZa;sq_H41gvhlm# zHuHWVE9TZm`P;xhPvTDRmGJ`z(6xnq@dN8GD*Oav+l_gC?Ml$4LymeT(H)`rYcO9X z?Zs$R;Dw)5j~4Qeo29goSY80nCg^a)s-U~TcVOR2jThEg#X3Xml@nV(+oP`|Ll!;_ z<`pPrdK1gWonEvwux^C{0cxG&RwJe^1XBQ_$hHJ9P9mD$yN`j=F5d)R5L1lEDMaZi zCq#vh;K6OrLF+sOAma7w#J(OY*&z;ElN@&VmjiHAJ;Mcpm9zQKA@&P7p}$^PkyX$d zFXN#Ar!~I9y((^vuNru`df@8%fvX$ctID5!a3B$hH^oc!@d zQc#ekL-V#7_kLx)6sY}*bb^=+m%?^19$YQCZ;j94uhR?Er0ObhyWfn9S8fHkZ#Kdjk$ehPoxJ)HBiv;|2Me zgi%bisjiFe%+%uh)U6aKx)ZJN3*5HG7jx^taG85WvQgD9=jjZd3J}e>)L9hDM98eV zC=C3qW@wIy7f#i*#L^im3p!PXrl~JOdGb?YC|IJ@A~pzql0u3uo5(0$kcv&jX9r;l zM;URsb!Nj_66Js;ns2gojx`^V3p;A4-xS2KsarqCBOwAXfuB8^MV7pP;Z(jn%9l_T zyVD?uXk98ITc%-*j9)=7@yudgw8m4|sfLlqFbp+vGc--HuAi{16LD3?^B@Z&#gT`R z${;q7N-2ds)4W zbgHE{PCx8lo>E1Qd?>Z38r`l-RKd8pODtp$d8Lec4W&qYFs!#Tp zuvqOTrzy0dzNOjb8WogH;aRp<^@tD02&MtegHC%cel<`-5*(8SoOnj9)EykLU2s0l zrTL%&j9SHtT5_a>R64mut1~}+Vso<)#FWF7n7a^u1og2vO+ma8OEQF7PZ*@u<0pMV zkU+mZ8cO>|jKtY`--!+S*SkURPz02coCaD=((&09_G4sARgDTQPLy{qm(w${_<#^g z0%SF+l@@Mxe%hR$ea=t2{D`H4=zi0vpW-Dif|YUYq40CUrsW_cUob~$g( z{ABWR1jg1G0)4&Bi{}Rsva9#e2(8%*Ir)h-$Y8;Lf%KG;CWwcN72Nt9(s$|;iu5*E znp6j^M}<0Q`06wkXvC6aCTdgV`iA&oE!Vxt7o(>nB7I9DWdw_F$04sx&P%?Ke)jT#yGCY z-7$H4J~qB`bJ|Q^oyis*JAPx$cph9d}vlU4!Pd+^NgBym*KZFxOk&Ky~ z!W5S!Ni5btn6(pxO*m-XtAx0sM(ZVzF-%4$f-vDZtc!q@FiT1t?3#V|qyc!_|qP#Sf1Eskt5M>FH;eb-CZr&GSh!Ynt zGgCzvC`2Xw0(TNwR;v|$x9}OM)>Ks*aXFCdS68a0<_O@Vk@!l@F>fkOrwxGdP|59+U>1@i=SK z{o-_EfgeWUZ>XG2)n>oyl2g(hESBzS)X7hvg|Qc;Zt`n672vN+q-IQ8JcieO!fd4{ zHGvhIO*kq8L&nn@u9d4+1s!T2z;kP{8nyX|jG@(OovRo5SJSFmlrK!>R9dKp6j>Rq z8spK!MN6~E3#F%|w9cuQ}G9(H_YMo6mEeC(5JBLRVyl0qfhy3$goC-6ipb>O``D z@Av@e5w4;rX&iWPBfzjnC`$m)tWZtU(CLakkqQ^#nC`eZD!I3E&BbKs`LQ`Vw!!bw z%iwh+xcU{jMT>Lw1w~~!`lYd|fM?SsX4N#bgHuqgLFi(wS?U}C?<`7~QFPWm2Zmep z9T;s%WOeaeNEdT$(&4Bnkv|;O1{m3)DYDR&NVQIitfGMoS$KcE_x@ z`|(p3zt|QolYA0*8s@kW6D0@@@!c1|od&>TF@-B26D;QyqAFB3W3SO85OPV6eqK?< zJ}uEHBP7^(Fvp`WN4{8uFMVRSJS^>qZk)^+wMe}GFQANasUjj?X}3C$)*jd}ioMA? zggTM<2;uG*;j=v6mwtW>*Hh}==(jhCZEy!6B5+AvcIQdNiE%;l;Gt3 z>{ZzflJb12aV;sebCaXNWC;ZEiBZDbw^`NX<4WxTu1zGNZDz9_aLm%n3YRRz4z#Ui zQB%)|R8N$ocEMul!eZ40tZ@RZKGlJ#(sXI>%qGfv+ne4VftdnlZKpJll!uk=`gn-#Y%96f^q9{Zz2D9_D5Bp9H|veK$?#Ofg3qNl*|4q-30?x${M zIVP$48jbmW{TvBa58~%mkH?6y#9Zi`A%lPX*I07ACz^!+lB>MRatzBcvM&Yfon~ax z4B__d2l{~x)Dmp!Hgf2`?6hUvVBPR7$>Ev;D@cX~C+*7UDxiA=` zkx^&JSDgZZKYFxiQjMxUD|iRwtfAy+S)0u%)zAMg7%oXvm$IQJSlowM9vBjzn zx6dOh3?s-c4Cm-)Q8|&rzydnz9Fjsa1>dHdLK(3dj`+`YMSKZEw(C44qC|$w(M&^M!PWtT-SUf!IEflzn zCE21@6dO%rl&-frCy!X;tq4fhj>6E|eWE5m;BCY=^hY9LPWUfRt*%6_?4@AVJ|QH{ zwv2mQAI&j6p3v``nGCGLulr1W!09DL)q z*7#L0%iBqk)kOA>%~8f^m@~7xAj*tZm{VH9x9A=H*_T0;KG_|4nl%bS}pRT zejyM8Xefw~^z-yoW1M9U0W|{-wKTu!PZ3O&L$tJ0L@u~7`ugG9kR}rOe|ZkJ$B9j{ zBxEt6mt`|3f?cCq%AjHihT$xTbH)|@jm)O5b zZSsiKj_yj=i`nc6p`P$RIE`KrcV0e9kz-jy;KHpcq!fPMp@5KXMMuadE8w${QST-I z{Xl>?35YjamJ|e}9A}4~SmOjyA4nwY+>J#wM6%AgV=lc)EFMMm-aW=E64{Ps5SJ6> z62Z82;!!~qWs6P5G?}{`qY7yBm{owVTM|^T_K=T`5I~Yi<jjL+#?CtQZE#teQ zRk`#+9At8^`#_VjN7?vTD^>OSZJgqHYIIp)=fO3qtqx;VuCYF+wRoD;>^2}yRUH|f z$}I{6YG7{2)#OA;pEZBll&kVYE-ZaN&N^lZX~IkE4djtB?wDrWnTPa9vN)#k7{+h{ z!M`UcWy|p0U)-ID5DDi*_62e<$lnIRNhHKbN)z`ElhXh66}*JR-> z!JFP?eSix?5(+6Mz^ZxQg^3kovz?}gj{y!QzGrxxc$epONuoF&XUfzH^OjVdCAd;v z0`9p$y2qN4873i>_1IDwwHE)FvSt`rm{=Qz8%ce|sIsxMmcfZEOsEe7g!G7HNs*pj zHK@k^cEGkvi;HY%I-rw))e*qBKrk} zgFw_MZ&W>O?q@BawJ2}&&WWA4N$IypxiEY$P?U`*;;j7A-VNiR#ZEY`WBU_is1=T& zmqRee)dhrAy+~?5#?+H$&h(9YJ=St#>~$gfO7%yh)@ct961lTcyr8cTZ54sjbwzfB ze`YTuJSe%7{4M@~XOPB`nokcEmIbOWOC8n3R(&d@lw)tM3|FSXQ851T7t#*ME(%3^ zWNW&R@BtaXfSPS_78x+i+jCtb-r;9q~%tc!u{I4$m{ye(cUH$ zWlQsT#sm+Cq9Po7VQVr4z=tyN;XnH6lg3486eANw!Z9vE-m4O?_2K-J!h8hm(fHLM zTA_GkEJANLX!v(!IL)Lv87f9+S6yZO~@zQ&3+!fo8o3b)Az?b>|_=`(U>;~4gtY!!S0;5Zzu_mhbW z3HG2S^}S-eZbiY`KIGwk9*WjgZ}zdFAR|}h;osWXt3&=+b*6_$kvW{gQX1J`rar;5 zmiZ7(E#F0nKy@IA$M{0w)lb8u-Hz(XK!_WwmCmrQj01@+uXE3tNBV`xP^3bl-A;6Gh+Whs0n~XMlH-&yY*jnLPa-Z&<Uc^MzjWpU2YmPO2#a8g&zC>W@e3_2upMD7;`se+^=|3fx2i4^k zY##*n!_)G*vIKT>a`HJ`hj6>zCce^#HjlrlsMlA5&!2++B*z<3Sk>2!SW_akkQf7D!Vt}VDBtvb=6z?S* zloXnCG(CiJv9LwLeD|_dD^*CtP4p<)BWg~hA-8ACN;qbgk@zzwvH0Z7*9%|Scz&$0 z*p)n{j?Iz(l$q6P@09OK1G9dZ9h;w1Y|Q8IK8OApZ`EWcLNCVpCTsV6ha$1oX~`zq z5mP+6_oFAcX47SIa93q7meVZ|_qOft)1J+aKU$BG+^aBvm}-VQZ9ig!_QKNk>TX%A zqMhp0p7pCzisd6(lRy3#-}orDTT2{bekfD#kN<{;26l{OcEe`BJ^x_5yi<$s<9)k@ zJn?29b{iDI?DE;qBWL0Fa~z*^@Xk8@CVlb_e=QGnkjI-pJOT0)HgEr?&UG7IJP@lSMp`uwdA9w2xG6A=@jub z^<}Ce(^Qc!j6Mp`E8SimJOK6YD3X5Nx!AV2ePnfByeOuiJ<+qC}1)4zTWB0)8PC32>@Q z;;Aam%l|qot6Tq&46PjXL^segYdyZy*>ZL!5&)}Cq;RtY^;BMLNUSU#HkVPb4KsAbTQWhP{_enbbcHn%SYv^ad$)ZC7e%>uZ&LaZQbm~y?>lMu z??VaFyYW+UiNZXGdy_K&h_NoyxSG_=ryl=i!G*XT?4qow#zeDu`8xJ^Pfh>!hqtl~rZ*Z07?Gz9`B%EgbAPK(NOolPngP z$Se-$f9!+# zb>;7pgKF2bX!X03wMF|WO**||`&FTHFvW_zWgBSoa&Sa|s11r`g`yp>r#vsav7Jp2 zOvJ;<$)I});jNPSTnwIYoO6w1)Imse6COMSP|gJA0+c>ZroiQdeFYK@ZD;mnM|VZ_ zb7I8A%Ru0`fJg;)XY~2|+Yb>9^&@+Xwlj0$(WYo*jJ%;+h3z$m>`m`R^76T_Yo$k zsI(z+y74kec<^2+bq=XJth~#x?f493Zle5M&KV=9R+7vo7G6w<_KWwefvMN8PM`%; z@fzy|^dbc^xfAU4o4bS~p zzI=c`$d0T_RS_-z37v7uZ2pomYyV~6@cctkd#)-F86`$5=O)E+;?!afOR;|iRS&z8 zVp~1fiRW(ojEa6GC0#du^rq|^xOMX(bKq``!{ttiop7Sx}~K5 zCTfdbwt>LDC0XV({dW7ZA93EDl^K;z)WB)a)HqF$;QQlM0$drJEE zFE_U49Evi3>g_fe+H?F#j_2u+&+=thjq=$}_p{@W^wejwV{#AMU-#i`CgaT_PFRW|aCjN7Hftk`uw-lJ?7SM+mD3=0nOM%I5ffd6GywAJm zlTx5>o&c6OV-!e@;x_sGL*6D&8~&LZ$fxpIll$4p0hAd8>gQ76QMbSw6iC&pK<;H4 zlA=c+GGaBLk-V^OaX))}c!ArcN10M!v0ETEyuf5BkSztyRR#2$Q;n*@MP==)9bq`bDW=1Mx5AE|THxDK zV5(bSmop24pMRIP_Knd3T_2ISJy>%CU_C{k`u2Tb~v zQoR-zMYj9CMZMQ*pXU)e14Zp_($6W8Z~vg)5eD(FRqRwVmdkO7SwLi;Q(DU1<-F9Q zm)(YQ*Cy|6y1zu;R<|h$DtW)*8D2j2nsMX`Bj77-M3o9YUm*_TnWE4w2e<3IwvF5l z79)QT8@?Qs{*Nq%o%7sHbk`mytt77@C)WhqxkSCljx30LfLcqui&7EWZG zAmEOC$aoRxmINlC>DkRGrs?yk@Ii$YxJPRDihQFcqY$V3yYJ$X;if+q<$@@mZN@=w z+qi?c!W&J-t2G~QM1kJ3&WfGzY&^dv{nGv~`)k&oEwajuIW-xZt9#UgF^)`D$sO&Y z=j0hxiBb&HE>uTIF=?3X<(;^&9vm()vr%GPdjx9xE9IcTARZigT#&GB&nqhlB!`lz zJ%5ii5*X0gbCuYR)F$gj8%OE_PO};o9G{@dvNqew3<()r%<&D6@7Z+ufRveppYDOO zw3pI!3a-j$6RE1@Pi`8Q)xe`Vkn;rB-u2m)-TH)~z>CS788tH4omirS6$9Y@)&p7=ce$N40eP>JD;{%KCy#}i3}^_E2L>i%gHt*DF@sb7x+JxeJiD$(zQRzT z#TU7#tdSQ?J`j6{GO=A{))q#>@s~O4v^0Qbem!7boukZQtz~k5wSPc8;ly%rWXs3) zC(q-xJDsEyM5u@UP~lp3p7p^e&|lp1TL~ME7|NPYGl@lrhP>-Sv3{@8UgYNK>DD9) z+GDMqM+gg0fgo84BbD;4$GW3Lhn4Up#{T%RXx(HP1>_H1x9%%w;C*g^l`d9Ku%%EI9`%~l~ zD)$C%+z32N_YG*mx|tC~bUn_G((xfu6M8Q4WD&H;<{7KXB?>c!Ht&kOv-_En642yJu3=LtA5=K<$-VJ+&Z)+-_^EHOrYb+^|dlvI42Dxk2n?@pOX!jlX) zjta)sPfLMKtGyQxVLpIKQ*{p-kZ?z=YKBMOV4~MJjLq)G9}rjBqu&xM^88vx!-6Lm z9}=_U)Gf#D4q0&fh4Oqy#rM(Yh(4HAY>I1)vPJ-;()Z=l9PtjQfD~eetS8&&4Uuq| zb1j)^a*R-xy_um5@38T@LkC;(-+*+v5)tbH2U_2Q#`{V#6UcI&LjWM=n7x-`r0H3k z*|6|CK9A*O!X z1nyKLRqiA2l!*SRyR_Zgh2hP(#8qEFA=c#qOkWspf?j0A)&~y&;EE3KZaR!(-a(7l zKmGRTD`LAdV#mGOqKb}1_K#&RrAtHSR|w8(rLHO8%86CN!lEb^U=M`*Zs*2h>RSu- zb}bl}vaW3r>`g?A4tXzWh$JXuHBY7E?~UTTJvYoJ~r;ckn{mZd^Y` zaQ2LjjU|qp;wcKt`YNW33@b> zN7#7>lA~zAZ89l>W(SCFSUa?G0&qZ@{JXqkxep6oB$S{`VY5(LfqZD8OH_oe-soep zj>f94_e9P#mzJ5!uTS_h3R|j2oBltSSbMAJmDTh%CPgCFP=SS+npzYpz&^B4i|6q@ zgD)f%dtxfrynX6l;5mw2w$T)#)cezdWpz#HIAU*q9z9;B#m6etBzK{+LvSaD3ieAJ zP{D*(offdVSmunDoyGe7kEwWR8SKwjK@mWoAew4ujvD^lyqUXj8A2ME$lmKvuiq0b z#~#!0uuR9kKMFqdD9VR5XPH?w+clYEWc#t<3(YpsPlG1N1I0s}(Y zy`4;2@}B~Ys%4(Y7;|}n2ti|2K@tZvd_v!oE9HZw0d0F z#?n>mMm^_At3^Q4bjPTMKKbBmsja%5kIEufW1Eo?oRrAU(5Ki_f*Ja0`3EqyX{*-E zHLIh+k>1$B{$l%MV=vlD=I+>FKbJWDWDdbf9L^_Uc<4(vK={j4Z-dPH^%yaZ)@ zFEO_+);}J{gsK%8`bG9P7{sVpe}?|CxpXz*NcNb^%Vfo=a6SSoOJdb2Kt=W?-{JxL zEoCre#eax}M_;}i?8{CHD9A|kQ6N)BGn4cs%mIrW8E&A}|E$znTm+R$JR_ym=sb}R z3Fc^4U608}=CelTJzU0u_jvSI8uEx|VLkICXc1ay-=J!pYKB(C`o_y%wn7+ndsVD2 zL*0#+yCs0KL^WKD$xWz?RdR{B93WmukQx>aGRELt9++In%{DA$~aM~X`v=JjRH0DO>L#>VtE2Lal zmhukHl~TEtEnG_9jhv(rkD2JJs~;D$$8ZB_Gm8uK5m-~(8H8bXa!T=B{Lswe6-Icg zYzxK9l!%mzRYv%!2#JH5<;+i3VFR0t`-v;b5)sGvl@D{V`%fT6F<`| zUM(b@%C*{~e(6dh%%dBwSk*~odsSt$q1FCY%0Rf9?U%U62uuvfn$0qtuC1HaImG`_ zEk1!!#j3YLCwSdKN~JAmOxG7sJ#|haEd5#KTj(aY))P5j_7lQI+pcdh!VgP4P4{uFen{8a1SvRsi{8U|uH$tqzSoK35{cC2mY+0th18+iX6Hz5So}8*+yMsWn zmPV8{d0D7UhkmPaiiv zw>zkM)~ZaRDJ5TmbW4joA)Ygx2SmsQ)_XxvlZ{w9QMyezQ~4GTM39O#Wy{W3y2bi! zPz{nO#bRusN^hYl{GGzvV5Vf4e^AF-$sW+C>Q(U_>Ox)_eN{I4psLI|0W>|YUd>)> zly9*vctO;>ped4eE=_%#S-vHDS$|}_7{pxZ3=9MGr$}AWlHR|_CU@oz0R?QwHiG8b zBizw)Er9WsZnGbrRfXdm;mGNTp!fP8Fxx0Fk3rRvFF~_0gNmIPuRYKhJ28p9KhPvA zbt`#Ae#=X)c({9X#g^EK3`rXEk`}*@=LAih7{yM70LD(WXHsoaJa(OBW0XH&-i`_e zd;%t07#|V0Pr;NMiX0%C15k6gckw)iG#afxxl z=jd**mB5gYTTvS-%vOhiu&g>cC7r)RmWvku4JDwY07(Cy8Qvld_fUhJFLG0D6Qsw~lRl6HwV8@pi^^h=8XOw5!)>PZFG`M;$(a=8;4Ttj+d<6i3+(fx#~Bd~ zA%|Kg;C6L4m>>h(p$3@h>HGAQlhiDr!`AKqcmoy5!SV@q8(A&khkc9kFuuniEvJ7` zZZg61qE!JW9hVFT36Rq<$WM+S(AnPWeUjj_x0*q^AiC<^Qb z^Y(@IL?^7RwsV|J0@*bhlX9MlHE$f|+$fTw$@sxnbnB#|P9VnGEu7u(6SsA#`K1^H zfI+e;BRx_wrEeV)T*fw3pJ<9$iLLsCHC~G17l(aVnlbXQYV*0IsE4qnGp;)DWlEn<}vK?=J8oLy@(hr2p#eRkLduoh1fezYV|RDvty(<~b~ z7iN2-tmj%$F030HW!b8jlgVOUM_J;v8La&1i4|J>e4Z31ILcu^b=dkkxxeF$>`#d7 zr6%`W+Gd@350-VfIIM(QY;$4f#mu?c#njb6DuF>@xc&JRv}xT-eg|_UE3ernpNPDG zch>JualjG)$Mp`uBu2frg!qXxm@4M*Pp+_>(R3Dvc+_3QxjK>+?)hBJN^$!ZKUU zUvr?bO&rad<@l2n^%Dizquh|t;!o%fT#5RADk!4>#Z%l}(!4V6YK2JKVkH6L3yEu; zqAH--VJnb=x{ld!8}Lx%N0A-8VgwZrTfNLTgUo+})(dx6pKVq@r8sa}i3TM#?KVt> zy`3R5`yOe~!vman+?xs#+3~&V6T@At9 zX8IorS2FGHH=)72dny$G5;ne*f2mUXKG3h@VHRy-97D9geU_yH^BZ z4#gCUY*w_xu548{*x_dPP_EUUFWn3)84w0%QIeK5BBcrgm0vaNInBHg1dn@>F^sxxA@Sc8_cd*aH_E3CMZ z16^lc2fmWWJe%8;EvZ$c!W?7l+ktg3*_vYd< zvuw2#;e3BFP^FA8)Md+r43kG%y*akunk*2fJ6i2V)!{byushUpgAdyW&ssc9jjYjn zdJGh}y3xEk&&<6`HnOEs4C$K`bB_oP+BI5Bx2r95gn3PtFn?@da^BHuRi4H^HvNx; zBo;v+MIkMfK(vLw-3NcmIXtl@#JC}orRYo&T>>l+iD@nmDvBvGdYwv z@=pvTao|?Fh!ROWsXmF{PZhErC>A+K$yv4gHuB6FxTLWNC~&FO(U!bH6(@>B?bTdK z%z*M9cN21#Sn@JnM2p5pHqc9E)j+IQwnAp|MQ0|}gH`h2Pds2cMaopZPaaeN632E% zQG@&V>!jng_@YqZ14Mvm7!N40oF3O9{ z(x<%P2DtbgN#r^7b%!-ZwFh=>v(nu5R?^t%&JjS43Zqo*4TE(wc*EO5QU|fH`Had0;LjR6&`LSD@ic<35FC0LI~l{|JYcyh!yRpX)=)M#y1Zl{rN$hLqb+jUs9_2?5S-za!) zEZ~!%1ac^R(mt0*@>!y|fEtZsd@G!)6}>Xuql)HZ1=;iIla-S1D3UeU^vUB z_JCewDwPKiZ})ijnhWxT?Hs{e(J%8GGavzNCMWDH+g|{g>XNE-zWG!kxl55Ji6#ZUR~Nj+qh65CpVT)>sLx1{Jjy#h66wM zHjX46Dr2RXQ5nww zQwXp)8BtZp=`Nu`df4Qc3)uja!}6z3#@S4I5@j=5i>E0&)v`S0ek~jT*xW0NMEHO< zYax@5;tQnE(+uJt_8|2|JB-aY&P{g&j3v3|(i~$+POIaUP6Qi#h?VLT{B!H@2my#Q3%w$?m4|2%%f!%d=Z#8lOIqYLhn&pNg zu5DEO*0e?TTRN;*kKn=V@%U3Hv2egzq9)${KB`0UyM{08HggjGM*;#|peN9DfTDV^ z;6?!o(al{gqdu{K z8NsJ9KNcM75hyRI5OR*@NvoYiSB8*J0GVgz7^R=Zs^)t2@zU|jrQ>|`AQ)qhPE>p* zY~SNo%GUCkJpW>~MES}a@YI&bLx|Afv`Z3BdFmtg^>Esw&S-Svp%K z>N;d!tH20FKSu5N91buuQ%8u4$p;?_GbgHL$azG-OH~$bLH))^dmbh8UKB}{o=-+I z6K}zZW>H~V&BTrV!V|<$Y1{ypgndW0jiEA@LE?0nZA>&ukOR97HvNSL3DDk`f}84B z(3}(9De-#QnRfG6w9;sPd)T$GD)*ISnFVG{RI=D@WD5C{+0T}OIOO7BoMqk}mAB~3 z|5GvaeQ1p3Fr=>($5_4)|K2A)w{Nf{>S1hCcA9u>qaG7=dw?3`eT?y1f8f15lNJmf zIN>{hdidfmSgo1DCE9s}^`}@%WQr8~VINw4N}T1Cpd(HKq~_o-;n3zovtm2Ip$A%X0{uJcsmz{H{AKn61^`K$}4lU-j~v{NJ3t4SZC^ z_3*!&Y+i)G4H7VDgosf=KuJXn>fNqZd}#q}~l>cLX3*oa(D5!3`tkvwvf zQ#_D5Pk7tpDTXNQDtU$TXDPADsP1d<`>YY^L&@0H(vk+&>uF4X(Hfs?P8y19scDJp z@*B(CrQ%#EP9}9cYh9ad-I!%AQZC56@adT7aqun{7H@*La^=&m`9ye-5!uLEVyWJT z>RJE`Q@~Xu5%Tz|OB&OEiH3OLbsiTi2MrAKaf5W0V^nD-&r)yJ65Wh>Q?|7r%T#Ic z4|SbtlPM%&ySaJZRHihnv9YR6h51_%HFMiH4Pr~GfDlWZwR;(INI|e{8wo?EEOLdXD_YN_0`sm!l zb#(0d zJ2>B{zE@_W7m!^fNz*VXZ=M;+U*sol2 zB5~iIoYbY#J>N8Qe!gx(qldmTT3LKz-|h-so8#3aHoM1|uDvE}RW|tU|Gs(&hr@zLiaMx6qUgX=o>KGu>A;YFe zb#@kZV`tzYR(f*O4!ouL%7^5Lk9Mlg)}QU0)W^UOogAK>Lr@4&R@53OB0gYDxFI{XpRVJ&hH;l^+U`9&C3t#55u7fg$t|H~d|1^|9?Lo| z6eq+iSJo9*!N)bPmUk#?l9R&JFB{rErl35KA0MJ5qEK)(ZBN}wIDf*2RE!9PPSiXD<*E3~#paPR_>GVpW zOGViBr{t>9({xNp;WlSbZu4jq8XLzz;R1EB0=Md#T9x+-U$@{$P1lITif7up-_VpT z942@cCG(5628+)ag2>SaYV2|=IaK*&N7UNQ%4uXudtqzNlt;#dNsy@ z%Nxs5UNkn|HjpAxm(O^uMPoD-d)f|r4s|T!=+VuP>PBQ^9ltlSO>)mk7l{b_oO%sb z@H}hrV!lf(@FN2jWT->>58A8^(&}l==A-g4ey+86$^R{reAI1Ks3%49JSpuR(`I~l zgYaf|a7=POlqHEEcMzvddL&y=N1`l%1?owXt)^Mtw5Boy2LW4E7pn!gGBd;&QP+aB zx-z6k8Nrj}Bq2w{@r2I95{-+!486=2KbHeI&YHP7Cz_SfJ}L*l!QCYL#EdKrkQtTr z+VMePs)ffs_`0GI^?f*{nS+9fAW|VY9INQsvRltD;ABWg_s<)k>-o- zhU;kn6RJ9l7evYth>0jm%tK})BO!-xCsF>YV57_vGOA6Uw1g02{>F z@dX@Z1kN@a7Jdxwv#*hpqJPtn>}9NKK0EH=Z~t(c8`5wnMSAN6L*Yiz>Iq+w z9g*Em0OH27-NB?E^uyo0qR2UxiEPcW;Y@Bb!1LmIZQ{v@iF;`Aru}*Br!*g(kSNO5 z(a6|8vZRHu(mD^n#0j>D@sU=U-nnXV6-<}+2bX2pj_lr5vKh*^rm}46XKw#Dq2@y* ze+^Az`YJRNchD)bEGPD3fazM@RZ`ta`6{w+-3rL5?hXE6cIb#JL@Hol2opE2AjeX| zjiBWef!r^(%Vtyw@{kHIS$2;LAeS4GeE34ipo*yqP8FV`3oBLA-t#Ha|5W8tkBmuJ z@_?6heAgw-uPv9|ufsVgg57K8LQnwSMch8!|S2E|Blz)d{gUW$mO8d zD$Ac1wq3LHlDtJizy28uQoY!oHfH2$HX@qTPgx|&BuSmr?y| z{?_&n9eXiwTIg7X5fLBq)>0*XDW+^M{YcIJ1)kZn$Pgg(2YOp2uHw5=u}tgNAqvIM z9$matW+`rIx0hR!jS)q+=0SLqja(K$nKK(FtY@L}njW;% z9-TVXMznBWds&7X-!ThvYs)8^s)uYJZyl=6(($tXf>FBHny>f~m9di&@-o&Oah6TB zo^n^fK5v>b5Lav|h+HdRlfD+_kr1+w!nzD=zsqjtd>m_TEiv`0FWlwT1Lrn=u_-o0 zc#*0J5!i)b!X;g_#44rTn}$5|4{B2cfcq`ADznECh+AzfBDc1&OFHn}-83E=`7}nC zDa3Q#nutGu35`aA-97?!e1jI;^gaVNA|zlxfO_wMnr5v872Fp)&^oK3rAKDr7gJj| zlu_d}Db6)i<->ir{gZi?(Iinn81T_!2=gRzWrUA|` zRPX3Rh#;u>+(4`o&VvcVNg*+bMSS%Q5M=7pUxjGrsYX>GgH+R)Ce zK|-<5#MDW($*#41%OFSa%yzYJfm;YzC?0|X+c#Ypxa?$=p0)p^zNG3Q=K(lCKb<-J zw~J~frL=p`^f(o{VDoAX^a>BfUlW^BwcyM-U5@2?wU5rt4_w5jK`!Cwoz|jR&f0H& zjmlPkv0uHLrh1>+lo!@3M-td>LOM>xYaR7WDTA2g0_W&`WOxpy9(@okdx*X5`Hwj%}J?iA^=M7$&q{eijFhus% zHN%7hX?5H9>BJH_AC$%}r7>ZNFP?*mh-|Gfj4skpTfIW-^s+c83EB;kd#mK1MgEf{ z!iMvlSP6EpjB`#h?@!39Q51iVo}8&QPAq2q>W8_#F4s9@a+TA*_*F8^jq2mf!;_<_ z5b>k~Tldaw#decVN~opN@ONm5Tr_0U#Zoe%)2rVk8+@$#IyGSx(TH+F*iDxqo$0kE z$eD&cg3@A4&f{S9I7l9Q$fMpM@3p^qOqN5bYhigVQ@|Dbg4(f#)jM_W3h4UBms{QO zo>VQ@K6NyRFi#G>T&CuO#Ib#rp%eQ*MPZm4x$H+I+&22LWD1%;m;I1RMCKDhBpdG8 zUG^xI=tx(Rm`CDJm6%ss)~m+XtF{bd%hPMivTKOUS(a0SR@u;XU>~v9F1hLihws@x z3=Ry>6=Ng0w8q)C4*@EWh9C7nHzAMB3;{`@nrd3|oYM_IT&JA5M3P(c`UZ;7y^v1M^<{3aIPzo4>?l``H!e2wWV+2)9N zTsG7iuPEgc4CSroggA6hv7=O%a3*-Zc_q4GJn1UrhK^>jG1fL!M-xfB^)XKZY3=B? zsbq~vR?{C!wr(z+NP;y9rKEh(__80NH35Vzvx2}$zEyx&dOP`;$32o&*qbK`70)A? z*yFvYF~mJjl%-g=WQlZKA-VSj&Py_;lN*1}r64KuJXf|Wv%4=hyp_`k2u_4+J(tgu zX?)t4+}LH@WN9x;%QmWIl{(3yt(&vkH(i8rj3O7M9=-+&5fhNWPhgte>6FZ|KXZ{* z7b?CvJKzal=ke;-aCxp*#Zo+3CH3L?9I!goInk*zpE_f|m2YL)_TRUQBxG(5T!Np2 z;(({*<=|l25~a4#)yvqVAhH5Y*m&m6W2*!Cp9B#)lUzJ}U_=f%9}>nLNo2&sa`M9e73Dyzw_laTEWk zqQ`F_wn#jq5ThI{bQf-sQ;trjJK~_TL~IP)>V8xkF+?AM-5e9gC&9 zT+7oxi%+e_r&w$sZvc=9M^*>b_d6ImYnWC6uIGCcbE&NU=HaKY@xW;F>hm$$EZiqo z(Z_J|8T=e9$+3@pe-9-r_;)A0!RHE}_P4E<%EMc+e!$9NcM~tX)_X$p(=O&TQq0cU zBq{bSe?s%qFAn~5y-bH%Pk&6&GfFNFr267thmU0hJ`5krj?T{rN+8Beq+W4?E2l}* z0ouNY;1p2nAHwkrlDS4xFi-lzD8_P`igGV8@;qfqt~4S~NcB1Wt9KdImx993(Q}Pz z!6nfVLPyWT6vK!-N)}_yy#DU?M?-_Yn2I_gFiYN3ocF*zxWcyY{_dE>)!^jJY>N6) zrQ|!M{Zs7mD!ti#R0r^}rr=Dkf62LlT6**d{66vkQ={Z+BXSqNh1-;)vXb+S>Ywn6 z4?XGednM-wkHjXa1b1*;=;-+Yf+AmuRElv*)xprbjD!p2q^cR;Ox3~%OX!D8y3oA- z32GDfN51$+6b<5x;2;5r8$B7W_)zwvRCRTrKTQSm`K%Yh(yf?$mNv(Gs$FM1O_?ZXx033j zffP5+1PF&@KuHfsj&E!o^ zEvJ*yq)fdk6Z}A36;IbUU(;P1<=gs|bTZbT#=@I3V}1EG8$us1D6VLke{K?PnUUhd z7a!NMYW!(w!l-@9I=dTv0r%RSVFmJi!IlcN9RK$GakDCo+hs+aMvZb zMG|vDzIKswLYvbWC{o7>9Og-_KZ^VQ^J%pTv88v~;98Jxoj(s?m7c(?Yvj z1R?*x8&T{!)wEbBOVS>aAXZGdq@A|hFQzJnB?eu)#fCoMFWhyd98?iRg1@RSxoS=p zT+r8JSKZE~?KM|7b~uo}t1 z9poMjAE#KWMfWSW^5jcMy)eGK2;j#w;BpBb>9QaHaKt%Sl})WJ^mN-@f#j8Kzw5_=wd2$C5iIZ%epsZIm$ zu~$=-GiravY0~#upmNmc&yr|=m`*W;S&8bcu|%cIbT<_3oO!l;SK&7ICJuQfpj=C_ z``|fN*!dnof2t~0!hGXKpf9^Pm{s*73A^T54HJ43a~#ElF5jnDfEChld>(Z#Bhs=t zm)o6B#Id%_F7jsu&SkL_JY5Kgl)ax3u@igM28uy)VLuoDnJ6q2g!dL#W>wuNjs!i6 z>Gh>p?Akvb$SPXyX7?{QDi0=CpNdq47$gxfQWs;^5&t9Bm#7g{FE1G#ougrSEdCPq zn26U|Y}zttQ^_Yu1GW3cXXkLyHT8zOLsyIn-h<(vGVz*bU7ND*Re)`8@C36%A7`$s z=Vk2&{4q**GBlZ(IuSs{n@^|qld2GMJ{^Vs#-dmdSE7Oh+G7w{R^7Bm?f_&Dj>?t@!8?OU2UxS#qFy;pL(r0;rOxr=O3cfn}jLQV0UX; zHoClzVl#ix`cJLjn?AIqNBPC*_o|+nX8E5|nmzxLmb7X~dtk{&SG7LyRAbp7_xB-b z@`q$#)kOgr_z^hZ(Tw6|Iu;r^EZB|V)EXF%*-)5>a*sPp%)C9WGr(g-2;^l){j2%O ziuzaalWC7W7u0p&u_?rL#;;jmeoq1v@{9O=;f8L;8h6RWVCtxNdwWRM0(bCRGU22o zWIv+waqA-#A`-#o#!jmXA9^MA;OrqX+WFv3?JJMs1kZoPI2Bk=W63AJ1hJGKc-dVQ+OTar@ zgIB$u-^Q|wxpgAc@zxLYTpv$Ou?ERn6>=Q$7pfq~(etS*ew0RB3`vpomb4o1&_av1l?4#hzf3HtVdCVSzETPAeG_7!}K)%CJ4W zym zaH+8stZfI<^3^;r9u~9VmLB_ue=!w8fmnv{f2ix!Y}lVRh@8{R@6QRfK@n7(@1SD) z5}_6&!enz$ay?H90oBN~8Yz*t1X37;S}le|hQ)IZBj|b9*>z+UI0&jYr|L2}d zpF48^sM-}1UtR)3sRP6ACv~sypfUk{3A%MzUMBD!nm>%eKa&#Xq4gqA*ncNpij_{p z%_c=tByns$j}ee3Jv>f4TpbH`spzeUi{S7{YpLYr+OR4;Smo)b@>uHGQqPUt$0hiX zAP!d%T*S$pEa#p^WC*K*yx%5J`0Iu!av)&OSvmx-s?=0XXkAu!l@iDpYp4eY2ool) z8`6ymb8IXd=Em>cBu{K8v*Y4RTX@@^{ z?@d+h^;Scm(Rlze5_F2*M$mbKgU;|1g3iFDlBQTByyzO8mMdwBO_Fx0N;4u`Iy7I5 zEuzB1WrGqf5K{enQq4p7pR(`%)$v5@KY_^IRHik)WjTTYq4@*1<|k1lRo~)(uy?Tn zL0K42b`x4*=T!-=$Duc-f70p?z*5&Xn+!in_Y4kz`ePO6R%EsQ<} zv6Tl`L2tj)&cV3g3?0`2BJ)(t=`0-A!8mQc|!d>a9Lts0WBJ!Iu~!4_JMR<4Np zmj?&vRr^`!K;p-FraLXdYH2Qhmh;({{663LE^EdVU}2FDn&GPD-4}$zRV(@%kI#{2 z57`xvVn`A2Fdz@4x(}X|Ik+tA@RSwtboZo8H%s?*S&?mQ=@+C%M}4bI-icwm zQRs+!-1pUgOI!hr6%N^fo1pX#O=%ap4nMHMo!)Dbr*N0C#@Ai+Uwv6d9AUz!{ui7I zNhCT~om`#Ck+kl{N^uAWlI`D~DUhd_irEm-MmSrGdCby*sX3*Uqk&LK>J?hG#M%k( zQW74r0t+ZIOSsKbBJqm2D*g&1@E$ed>0GG9h?p!`!k;$c#1H-iX9BfdCS;mx*Ztoy zkHE18Lgt~VxSsuk6X~vdw!2oe9yK@1JmcZ;C+_X33aH*HkAvA@20<=&xeo6Y*E)w_ zm3D=0(Vb44GC9GK;H+?$5Ps|{z%$llICu)Aj){MToz?4o*%57udhwu`VLZAPzGti{ zJp-#6krQTM9FB@}@FwbCIvcFm|EN46Jk3&Xt^Y&>?b(`^1xGvZoM0`U)v82J{kAs$ zf-j~P?nB@!YSx}}iO_Z6IYpZylgrLYok9pAqN@IfqB0#V^`cKG4yb8kL{10%)=`@9zYp15;MZ z7Qj5z@QKI%W~> zP5&RL_&|#y!On7kiDtp5p3;s$_9$l;e3zx1-IU0&B~gdx$vsQ zchj?Hu`OG;MYcKmgh5rS9ETEveBtLi_+U+uD?OqjXtfV=G9fFom?KO0BeWc2J-SRu zf!*kQl?&1ow}%4&gg2NUuD%xe7g?1xmVdFasF7+HoK{>}XFR-K#;|cnu-^RRo!|`f zGjwzvhy*VCj2org5_9vADO={8mWaxC?lp2WMW!uIrmt@xlfsp`bTS#35Jl=iGhwD> z)xfcHy6e*GxvaoOY)d&z^lem1vS=nM>f>(^3tkc5^xf7Ug=nn}QrF*YL>#s2@7wMzSVEy36e+PZCK;>UzP1!Pd^M3{X^8Xd|`RD!{=-zNg z*8KIrE-Wa)CI3Inb6}tK!4TDljl=kImcoGoyfe&tNjjG(Y+q6fVr@r5((ckp!~q_x-n@b}+w)+Gej>8#7yflndONVe>7N@U4XkuZaw z2qQKlau#Y-i_H$ka6*q$YNFSv`(z^zXHzx_U<(+LR zaTm_Nmra@3qETc|V(6L_wxySrf}++V(KD)VV}&X?&-~+f0W9L@tyq!NOdNse0TN9F z>x8Asr>e5Nd+fK3@3^Odoskrcma%LpQdAjI^(k?QSWd91&DyEkz2f{RM-3|w0>4eK$! zKnXJbugmzSdExf5``fqkKr7Uc858IFvY8txzwFo!$nOJ2q*B$nB(`0U;a{eVRah9| z5Yb?bT2H_EolI$mY@4(P3j4C_m?gm)t7_5r*G*8xQg`&MN+Kv+^kj+_W0eehygePE zN6-)|x+xe8*Jmtjlq|^_P(<>mrD3fAHWkwB%@mYO|4I1$X)QKw+Beud5oQ>;@`Zxa)E+(?daPE*(cbAH6CdwOlH@L#ZdehP;_J zB*m}pq9eV3`mc0XTK!X#KaWMyGYdtyGCsnEWu<+AvI* zUF)mzcOT8PzA7JMZvJRMrPa>c47I`NG$wb`y5#v!sI39*1fmzKIC4nfq{RZ`CI@>l z@$?{N&jUF50EQ&|xSf@SLbjVc%|cZaFSFEyDvK>Xj%B=>Pr4FsGI}y~<6g!)2ikpDNjC&-J|rMMn>>@jtDSl5fw*+Yxh* zyx%swX3DcF&o5b+B>4mWgg2A?YnA*fj;p#P|3)Q0&tY4a>rNa=X=C;U>N595jl@CxzADiXo2D$*{Sib^wW{mofA1pFF}+S^c=dZ- zd`%VmeVy#p;+H$E%PsOwa#m7G>jZzzlvi|nb+WsQw9k=Kw9H2TvSCry7$yOuorq_b zCm-c&6l^o{GMa3p#&Q)IuVTqHrOBU7MKB^YeWt|3skZiI9t}bX_sbE2j-?CpXtBS= zEsoMesEPZD3&+!k?2oUN#eK&+5_`PS|1t#d>J<$C(}z!(JNcskUKt(5u)m~6Lnq5n zs86q`Ph1M^JQ^<`629P!#%f06O$RY6l8W6G`=%^!ec%PFVz~)9BotXni(A8+hSya7 z{uIF_lU`G!k$ihy@f{cc0{S*nTXni2roPW6#JlU<^E7)IC zhkqK^vRtT9kVz*KZtpJz;rIVHgg?%FcMvX9k3*y+!YO~q4%-^xe+DuppUfe9-eYo} zMxg5YwL*iSo4L1||8KaMa)q1qggc^KD$=u7SX{amEaa#)npgvDs~&#MT-z+j5@1gI+`M@+K@Th$I^4I9@JFX3k=PEufXTMOPq|8RVzBZ^zsIukT6YR_d zO0jc)4ueZ9btt@SE%8}8_DZeEbioy!l1-`bxq zR)#)C3$1gq%PMa_auvf^+18p?uJy2wia}Uw+Biq5JubR-eGp3+HGnO4IZhKWTNYyn@Fn>;j4s>-3%N;-*vTm8#CC55tg;0O zTtzMULWcb2soF{lv{IE_+nnbQids#yhDt{&+cxK{-tNE;KY?Snj5C|NfGY+eKui%e zon>ls>@08(fr=n5T&&)$Eq}E22CgYEGYdE7cCsT#{kxn3n41EZ6Qra`xoRAZA1;mz z+f2^q@x()*XS~8lAfGeM(VPzEnxnx_zDeZ03Hf3(a!@2vx}Q8$)(emD4qOyEBD4UR zAI6FYAUi}Vg-+WNaz(+2Ok`gJ!UPxgTf5o+oeCdX#HYq|4iemMwP)Zml){|c5yH8i zE0-Fziv;J^k9nv`tEj0k)C{@2n=7a=BCW!ZFpVQk)wHgm2T&ZcUva*Rfgaz7M)@wQ z%DUI}cgy+yw0!>$16N$fzy*>6m#HLlp%Lk52H;6Y552B#!fZAoH~)XAg|2t0<>iyL zi0V!d$|ws1@O=3dTM^nBftbZu(#|1WR_>dsIu1KIPCuFBz3=776uqv%isY~BSmoqM z!ja7J-pL%b->W0xw6e;{5xhT9mb2EoQxE&5<85MuysoccrNf@}oggLnqyLoUES+Vd z&T_eAseia@E%`c2Az9*mm5nQd`A3clg)6M@!!KrWCxaR}j%zZ-|BF}bS%*n+P-j21 z)>#>o2vw;!W;5lcWa>pRc0bi6iMoUt2k&i@#hd6X;`UT5cwDhX;7MX>D&HMf?oxV_ z#=yr>Uw(9M{#t`97}$t@n@ml(`di{#Qj95@dk2&m54bR4t%m><2OpD!<9+|=2u`NIrn%l?4eH355P?z)$_vup6 zhi!^k_(lY?8+}*1Whq4RP)?!&1kY}}Z1;z9^qs}6*?rPO`s$blX~&rbI~8Iu@~pmv zh6G{y!-n^dC!R)bsdsnU@=kNw%L~klUgw4x;UP={)rUqF5Mls^TaT+_U*1WNmY7!P zpfn!AOJKAdIUjTd#-7B)Z+eT6dr%?c_9O}X^eu%Ddee>Gh%u9RqjU*+jEF=HAVFB1 zig*dhX2zEDX88u0n}$pn)NnNAo?WlJ{PN30EXA0pHZyc2y=H9A%xjvwidR{9Yo3th z-h;WXpcQ)}t`vW>cB@Bw(CI>zTo##R#|VA=mmo_+QERV_u`cs)sU-gSeC@^ zX!5V%BWEvGcOpRaB~ZY9%~`1vJfWX^yhiB>uUWMs{;9acFYawbML88tTwpwYArJR$ zLcH;CROJfZ8=9Tw3fvhU=~{4GXtpOM_(S4JY_i5?&(Dr#HF(v1DOcktk1HOF?5dOY zTGQ&$+%);b&kU@0r~DY@&5flyJ?;ay3?hVw`rsQOnVWo~4Rgf``713M)dI7XiN#%a zWEx}5%sxe5&Brx8AV*9-)s}lgM>36S33ocHPY643Z|I08_z*h_*E@a^iPU!_Kfo7n z;H=P*?BGr6i%-4`;L-g~sXU^jUnXtymeZ zzqqFK(v7kPpV)aK>S;EI*OYrk$K*gP!kw8Mrm@_ak&XnhF3a4BaAA!ffqM(%)#eY5 znjbct7|`C3&lNwzPlP6%-LCrRft99jI4<5MjA-dGUe1MX8AO;P|3+r>NlUa>-&731 zmm7Rpx$KMgR8WtmotS7jJ8cv-BZRX_@TVV!=MKMP!Gx|Zzsg^i$|SzUAR+pAp*42s zJ31icclzj$rhm@diEP8L&|{Q-s6_C=4h%yBjS1iIuDgkMB{UkL87eY^S8=Xz1tlBj zV3USfsfn+$!#l6Rpl~t@>pj#c+<9SgYJTvB>RAT<>y(GH@RqzTBG5c+BvY*^xq*D- zlq3fird1;~Fk{Sa+)gP5;}(aGD54)JWZPZ75aV*h%2TYC1D7s&oqOp8A!>`2`XDh zK3gq7PX?7W}QKao%64wOdi6_|_))*T~`- zIl;><-$-lh@aSAjN^{)}gy~VDH11WJgn5k}#5aZ97AU-KL#a#<>U^sZnP`I?6=5PHd`Gc);~IVT5}8a& z5PqW#3Ad{f!wMJt!Eu!&;e)FDxm zI{gy-anVA$tQv2y2k4vd#p*`35lw*=htzd|FiNV z_nx9vOMrm+zk(lU{wF34MN(Fv7?IU70d!%uaf45MB0d$wF$9^Vj5Bc)lf*>cDI@*` zqWa{ECOTKl?So{do5<7@87H{lpMw=6B8N_vN-kFTF`|Q{HqK0GK8l^Af;OZoRoQqt z2}42gl?-ot%y$N$J9V9GYK!F9AV)6xNC-ipG7Fdf{zZZr>dlGz7hBPJ zWZ(tQRWkNG!MOw)j^L!Mj5tyE{v!4Wy6xakIi}Dj!d2&RQln4e%;$tqw7r|QY}1w; zoV3A3iY;}gvv`BFRy7PotyNW1xU0NqQ&qR3c~5wZ$9glg#U)QfJ#sa~rQH-7kEfEF zPAXll>Z}kFhVeTbS0sUu^IhvXwXkoH zXO^F>(b8Pl)sFdGBA4mN8W2?=J1o?m-hl=`FN{BofyrL?lZEGZr|QLaKuw+nt;rn! zFDnrQorEhu!{tT(9rJMXilRZSN{y^aBMRa@G*}KaC!w?V;VedDm3|h$9a*FP+gkM* z{OI*ZqKw0Ajq->(2j@lU_AiIf-vMZB ztXqa6Um3*{a)N0@k_(htw|L@Thp~WE52qoE;#&&S{AgXr>h(xrlsOL}W3uF1qO=_j! z4q^3jGO_#Ryuy*EotsN1L&i1>Al{~A2$_TO$~H-URMdgp#i>U0&(wThaCcVf3{UMO zkCh%e>J6M3I+{W>v5iIkdgJjwkv&wkkvS{|G+eSJu!Fg&;U5F4chyvG44jRO{LG#6 z|J39g+ViX%t`(}EaxyLnU$MU~c&>J_T}eYA5RI~PHXnTuTXb%aW>1e_t6jcE zr@PJfiCbJDxRgFjG8U!jtHR9thxe$fQ?$-S{EFQP zt_D}_k9xM6BOARQckF2gbneni?;FA~mr)~IBC6{-Gw==XIMc;9e17PtT zF0sSgfa~y1fvhwWRwcliCCz5=V0@Ii>sQPo9k@)e9T-k~x&URlyC>aj^o+cc!nzc= z^fCw3g*EvoVRZ+=*5x8ib8?*JzB(KDU-MTsuHt0_cl3-k-irRnKnjp_iX?ahfeeAjLXE_|b)UErTsIf_0oJ zWh_xpURzMcT*vfuq3Si%WddVD52E%fZ$82+fQM2HW2SFW%`xZWEbFP=M1NX5?ZjQOU3Z_l=#`0=*`dksOpoc1f%nn;ESVQ{o&?t z{bz#|qoqBWZCeq&*6M)0_^3W;l>XKHsL_)ur%1-@$Mifk_sTTgjmPk#Yt(4? zn}g@b78YX_bs1Uu7nc6PiyMB6?TWBdYNI8GwHC72Z4oDf#s00+FJt7DNve{8<+`Bd zZ%&N&FwWeYd_XM8SqcI}=HsDZbc*@7)WIB_zj`~r}3OYX3-X4k!w45j+EiukrOokZ%25dd}jG~oIJ2|69q3?3sq#> zdT6LgKmTmq@q|~-`=A-eZ9*!;BtDigR7%pHApdh#Du<3_Tz|bn^xEu%%RIsKc5k*f zFinyNP#3b`3yMq-69+& z5Rg|$u#u1raAwHp{I!bB5ej1)a1CSf;lxEk7zWN4gRJ0-5D8Mit`;={-C^TBB^%O*U|Jh=%IbTgqC2$+n5++dKGa}pIn+}B4 zb^74OsQx9N+f_--8Xh1AhYrEBYrXE0i|~Y7atk45t9KgJ-vEIaq{`8`_6B4sCv%Pd zg)Y0YPF$MwHJfXHA-5btfAiERi{XG@XI0KY*2RSi4%>@3&(k{5uL=33{4=2$wGWcq zIrnZz$iAJ#_~^oICAa8LK(y|ks+v(Y;#HznZ6`&)+NG{#C+p&*=H(O-m_k+fTFkYU z>izAV3<+by@GoW$!aW8BhPL^(hq+kO6#Vg|mGRePE!<|`p)yBs0dp6K(pYng2O_D@ z83*jzvwO2>_ypPN11YbN!pO^PQuc_u=5y`-9CF~_TIJEeq{^;I?R7&7`XkecDumrs zwFqqHCMd4Mo+@>J#=8UZ$w5$u9rn8{Y5L2$TgYU;>P})+->=i5y3%3aEciA6etHY(-lXPE| zW%V^1WPN$(T%miT`Y}p`6Dhb;%6B;S(myh!coLBb*&@pyE*I!7vvPbUJ-NNGy)Y5F zA_Hffqdjs$&gQADxT0;=nfEnhxtrU)ZdQqKqZ@kyd&wVDz5#OrVxpJtg7)Y!T#`1k;G8Fik$N-II1VMpyL+wz?5e(Hp8o!nc zG_tguVQ#hmK2Wc=f!m6MZ8M6TL9BmM=5SyvWgw0g#4$*;p38%wx&4V-!lx`Oay*T` zbKQ-;f$p;SCcFXwwkOD8r8+XFB#>#VrPz7;dNgz9c6f8 z_wH5mx~k3HsT0W_oSW>y{nCSRP7hAJ!LU>u6zER%-~{&+RS!ndgR_TlQn9z8Bjuj0 za`tGIzU2tJ_7yZ2ZcM=uH4gT`K#S8SrwcI)y83>1O5lTX1K)V;BRTO5_evTR$i{9_39=SmvJ=-XKL>L8B?He$*FJ$?A&9W$W;j>Q!HkcbK3(ZxvRp zeI~xj@mamuM>1G_ZsyJGvqe2mR?l12^X=++2hYLmbwNZ3hE1e%;Zx%D7Jj!v4ryRu1dWlCB9iMco53YS^){;(p^-3yiwP}ga@ipWzj>BGX=ZS_^+(YayFV;E)KH)8-dwo1 zVN;g8nJT@ZKGVI~(cbw(g?shtZK>OC4V$>&D@z!crc*0Jg&#C*&UUvJZf&T~ijGJ@ zW1U*LtneE%SlzHW)7@&SGS-wOgQUGR+O5Id*?!O<7)eB(<`pp&`SpSY}l`Te!2KA=~|K;a?jXv)o@7?nH^$(2yw! z_)gY<16*Yd@$|kjw>NCccJC?d050CYb~?5x6QcueidI$^c9>O5fWq{LfY@8w2|%_KN*fxp-Cq>~Ii?XLb3yws_;4SQq>O~RZ)-$Gq0-q`1?{HG{foRzTCCp=^R^B%HBXJm@=<-X6`pRy76 z6r6y=s4IHW@|3vWF0K^@68t#o|CWzxx4=BKYgk^1^0oFma+A(q*LmP>0S48oqG{%Y zp3!kBDeK@nT)MOeJf~Ei*u*CK?Ef2k2VYKjOTNTsBJi7|Ud==JHP+0?3ZF=wf4!<@ ztpF1ppMu9S``urjfKO$)gL4tfN75EhJ!s9%)Ab2+xUQb2Hm&uX2^T6UsO!dN+ulb2 zZ?j3fBZg17=l9XI3bfJj1d`9RgSu8%uzRE(OPm(_OG!A9GQXeIM-W0DB`(C;lz<`7*LA~y%6NP! ziPgKX*EpIoi$GXeoD4qQN0hCqvDjeRN>sE3dM682JW5wyLnMhC4)S!v7%c%II^+H5-U~t! zf380Q=?-L8)kZgG=o*!+q#%*}DZ$IheMypfBvnBu7EHLgydVi+*TQT`q_8J=ErrWy zWcD*B63IFg1xm-EK&j&sz9|51OaefG%Ye#37)!3?4p+4iNmqg0+Zntu&fq=%G*-v; zSng(;vvSlTSX+6p=BBK8QUgI1LfY~5T?GmZID0}(Dr{(r{p(iQuOH;9-P0h?u764$ zG*|zPK8tU_A&5)1!BEx7>SiY@)GBLVa2-04J_X({Smf~0KxX~@Bj@|Yd{+}uW?`SG z=Q4IQcd4q)reN<_E(Pp0_=&|iu^?i9VUQ_(W1cylx- zHT=(>GPFX?TtF7D0!XF(ag0r6O;|ccOHv^dW!%{)swn$KeDWsxJP4~s{o+4Z>pz&{ zIpg)K8XhE}4otnWcJ(1hl z+_aa2W^5;Dms`C20ENa~8?#wVluPle+2sTeiSqUhbCBlrV zK^gj9yqIMhcSDQGh|t8ibkhfra$JO$lPK}9hb)vKF(S7>DdG3E>t<;tIKj!#O=Spt z^8cp?yF2wD@KXHRB;@}b^S?kIR=gY#z@mET_KL;mC0>}JJ;>iR&q3g0!4*PS&btV1- zHGv9|3mmf@0=)~{1E!7SrCV86pH(=aPTqXLPlja2M+yH37V-Q_^>MgP9idVum6&BC z;WS#uaZ;8XC!l+Cg+894P1vV!AUo@Ey;vF5*DD4>o;6(<6It8vPKVC zW=cL~j-DquD>9?ryTgqJjt;FG@?f4qyH(N&IwPx(z4NT^63;iY%*(v{K^fTTu|wY8 zL$K^mY*$fKRW#ezL(!tbx`UZ-&Ab!Oneo4duJq6`SYey$(%Dk3$%nQEUO)EEKwoD8 zxBv1h#e`7fJ}RZrkae2!)c_;$6KOqrmzwq5BVrue(f}_z%}pRrAr}N%eu!V~aj3@f zimJiB3AGX(=NgwB`2(+6*{sC~&Xi=tro#-@J|R8MDPW~OWQRg>!)0ve-Kl~bOXKNP2>M)l8BYt176&<^`G zJ=~dglUgp=+6QoZ+_k;M(%y@@J(0J1LwFMw2(n^wxZUt^YI5A<@Xzv16#UQrhvH_{ zM?hz2E)GX&>ak%6(7JWcgprx`Lo@81n?#!=V znG|~#FTjkp*cm1IbSSRItU$E9GC8{7@#eLE09+~fF0flS=BY8R>(&RzpPmn3z#jMs z7)bQlN)_Ydw{YtjFH5hD9Y-Ox>Iiza9=`NAqzi7{&4YK+FjIO5eN+r8(dQ6iA>qB5 z?$y?Wan{(0(X5@LP0W9a%n9RS9BCxpk(FC_uPUE`f`Z0QG+y&(Co9fMo!9`Y%Qds( zczVu-h4Bw`p=OJ;J3fXFX@c4_8o}@(1S9jC!ghQ5-dvX7}dsiCpio_LL%>CWk?K8wH-o6az(Okb+42br>C>JUKAXtSB) zCyn(v%tU}8yHqhh&pywD?{K1-iV^8w*{F|^xjufpvtL5RUqK0|ha67kWrUyg&hVT*BJYzu` z&a-D`F68!eVgY`RF`AxGf^mg7?K5hAjnrH`wj_93@!XL{^%J~_;k6NABh1qXmpON& zIkv=DG>i8I-MCEP0--!J>P7R=2W;ob+-cul#l|^JU4#GLJ`ruoP;2o@fqHeD{0)he z>lkqrZ8FM4Ct&&RX5WZ)TTw+zRsMbcmf@+sI|<_3eRd|-6eo;_*3I#mW_eb^-x6=3 z?VS^ZCuU$EHr|{tk!fm9m>lT${GkD&Z2gwMj-0G|8SfvOo8}38Z27!)pR0}~&U3+I zgS*zk&0Qi^M|~q0J>d+Bpqg-1VEINwC*?V|W#%4Zt2j;d<;!oj6_y^zV~!P;j>#i- zY6qj`C^x=&nJ0`S{4GW6CEv`80baV`D^)xVbv>)Z*Y+nRA|fnLw& ziHzaj-yeBFR3tr5DjD{t!{`{5Tt-E$lo7cjZiPj7qD9q&=pfiLLzc8ez$(mfcZ%s( zk|oQrLW|uBR-}gD?ePoi1Q_Fb4&@a<=4jX(7gkw@_M4-Ji>b)yk)kLbJ%W2gw1nl( zc=_R^!8cJJBs@)%?`C;y@=cZ>n?NR-Qw_lW$6n6D>zMmEWu21o8I8VPsSKq3iEu+- z2}3i2U8VITs)dQ*QL;0}&|m{&ZyFcxXCe}01++lC-klm~5Y z)H6xyc~l}&yEiY>@PDl`Vd@h0(Dzxi&?Q+;?-}pZuD5w3yR(|gLTGrjcC1b zbJsBdjknohO?mt9r^ag^nG$nht9!~0@IFM`BksVTQ^Sz~+<#CanpyFtgd4g@Cb)k` z5%xe)xp9ZDXRGo}=h#hz9f&3i0~-<9ARAO2_Tg3OuISCkd|Q-A%0)({YCJrvz)J|8 zjKY1fb##*R8phJx>x`zoT4YtFY*?bc9<-b2yiR#orAWhaK=U6PedpD5S1Px3E8kWC z0gcc>od6^S!~_UYV;Q-)r)X8IijK&zs_Ip=4OT*QIOOQgvE`ZJs!W$0#%|#=^9h;S z;-1}Ba}3Ur4%&->5)`^pJ$D*#r{HzFxNn8e;Jagd$Zk}w^@HR91h_^j^IMs0 z2Um4v>oi38p>bBI4TMQYthwcee{QKd`DhmT299_-G;p2AKAiwaBI3-Fy@5Cpwk)AN z&NQ5hv>k#wb|dz!m#L8vi?C}Yvs$05Cxv6k35ei1Q_56s;kxhBss8%jm0MENdry*2 ztd+#lpz_ML$Sz_M-9@38hgyoCRP*_t#S_5mZsXBIn$GMYW5B~El0<#Gk3=;dxZ>a8 z3f>U^F(!Cc#TIOpgxEU5n~sNfChRfWbXQiX>|CziX-ycR!5p@g1`& z_W0*Tl?RQ82ww4*#0kEChyCaKWF8w4k?Kfdh=To~2V>*+4UcrL2;t4m;#A1|Shn4%) zXEyUatkHSX8tl~YAvYqSHP?%MVBjW>W_m>@p)F0BId-KxFotzXkC63-V7}aV?GR3W zzgBoij?^b3Ad$+pq6r18iZh5&P=Kfn!C->jY!k=c^RT(Sc<$X*T;jeHYtAw7GOIK@+b+PtF^mjekKd*E0W6u_ z=8U_8)2z97y5A2k$a5LhXH%awqg;e&qdJ?HD@8CNcz0K-7J6omkI9wIYQ=8jwXKKm zYL;oVGnGHGAAjKz2$dy^EWVMkM#Kt-Fc2<%rCeJzs$VA&b;K~B#CRPKpi~(cfH9^0 zWk^X-{bkaFid49t`vbc2Vc6Y>$sOOK>7h~mDsw$twbg|=gYb?Avt@m1v9}*rrOiX}z0yC+ zH{L?zhF?@}2?UdfykFK8tVwVt!fzHAFiz`$ryHgIEk4K)Q%Wb zSLB;mb%9kO{(e2oXjf;h`hixwaFOK0m_%4#Fr#Sh`02ai_kT}Vn`|tS!y|5r6#K>- zkG#P%{1YSNr2H<*9fU@Bq%xRfg{hah*kWJ*D-?~)GP$gh4^*5dHVOOUemRvC2lr3E zh1I3lH*vx5i7pGcKGmkn#nqFnYjhR?a zDHWxNYT@6d)8PL2an0!!h$R|UEahAIN zK^l`lCN%Ms-gv!+=SCWfl<$k;G0qU2BTJVyG5@Uas~k5wrIkA3g2+> zl%@bD7I(!yrz~o8s6m8Lk=Q`NDtas-Ra%CKwaxysNB|T?FRDgIC{W^nBc|E*Z-g|r zh)Of+wPgL-Qkr<}a~=E!@-@+^Fm8w?~T@Xc6UvEL`8E(kFGLmVXtK zJ;=swWf4^jvMRSS1I<^G_#Gw;6%Au}xq$D>o0)E^N2aA1|M*wNuQh{jUfB)SWJFwK zj$?Yf8e>gr`TJdR6=P-Lw&Zs5)GT@oKhA!>uvNLYc z%4V^rCAt?^;>{-5c!YSTF!Ec4A1ca-mU*HgEjWe0PEZ=Mrofr8)5!!IYO$~TDp@W8A;jO4{1_YatSKxekq+B>R~`)4r^8U}7w=Q;p#+bTvC*5#{}fl$>uL0U$K!FA!pb5f zABP1bA)z*aV+L#Z5U6_+>$Cy_mDw;(_BQk!D_E! z#gK|c_-jPFXGBHu6(y2Y#CGccBpU!)Uw27* zLM1_Pk1Ol?dEYb6$*R4%SLj$e*C4z@V~eRHbj)o$5)m}kiRj`&uX`@jLTu?>_Hhos zjWwK{HG%s>_8GWumheIy@i7Q0NK%2c&@tj2ik~1pci`$dG~aNcRKI}qz(7u{;C=*` z=#}2|$bOz49ojaPds&jXh~=K;cS{!90;MO8r7*2U9hQ~U8e^PwL#?-0NqS%?oBcs0 z?wP&qna~xTlbZ(iT%O~-LUTP>Eh!LM>>wcgh)v#<*pE3QPa0GW6+=~|KO8-=Y4hhq zFeGXV_F{`x*XJv3a~=ByShk)#2#~d-2a9)*a9gTk!lOqp@QFSl)M2s{kyzB0Qagke z3`YO9P-fB?oo60-ipJzsjU%uvi*Ijhd_ni|`GGWW9sg4F8Nq+SoW^9biyh-3LqV4e zip<6gm)33)KLneM$Tu_wW$43UU`jUR08=eO6!T4qcBrb-2z4V=e9%Ny*2b14ynuLr z1_awZ5tijq1@kF>V+D`FUUiq!cl((XnBS&YgLG?x*SswUjbWgB@r=A#>ForV2}~}2 zV>#buo=wua9y}S3F6A#bBMD|U^a>6Lgo^0QKzr}tWBAO-pVduNL|@yzZlz`kZZ+|? z?-KTVd=&qLYKNk{SG*kWod}Ei34KlRS89dZ6f9v2HYVJWW>kBWz#{`^bf*?29u+sc&vuf7eG zZFU^KYd70KCN?WD5{6es_J&eW)ss^r?LSGmww9|rxKH8QnL6ZP;%6($!+4p(%EBvV zFw%hU3bxeM$gq9F)t%T;2mV=?ha@asq4kE01>-LS-W<3c*Phn=Om!#449h31J<78A zb$#=H_<9%ksH$u6ePMdhxmo}kRbBJf67F)XO#HSyeUAgbMF5A z?$4M6OZwT@*?LR09T5=;VZ_~9WIemcJ~J2wE$G87s7o>IrfPv0XCI*Pr1 z#DN?S6xDT>=jEf~R$i~2Qp3S zrmLf3EDptl42ufrB8gW1b(^<%SAMg!zB=sdD9>;YVOZU&J958|^bzvZG&neSDvG#@9EfU$i|%dmp2RkPuvx;JMTIA{>7KC1d0YdmyZ`kI)F&Bf z`hDhduX%+@l#_${cL&SwX27@lq}rW2Ur4^~9CFOMcorgTxmMqC zt9a5738=O&oUKsS2O=!OdPg?fWrL(*tOzhNw{-=FUS~ysfry&m*DNr9Dkw+}%yfu< z_Z~4C{c7k-J5pyAYVZ>sa`>PS>I|w|VrMWz+9D-5QMyFFWIgkMj0L)J1S@q&WiSVE z{W4#24aEq{C8f<^4vD8d6~hvXsPH4zT1hXd~|=J)*4y zMZljU`cJ2JNJQe8tM#=@xg5$3qaX`6+c}Q4SiV;{yXJ;5E-iKtMp*S=eekxuU$xlZ zc-Oo<+r0!AopUMkF3-v3%v9puIhUb!?l)!$PM1EL*}Mt>r}DY8n2(B(!eOl1t;a8x z$!oDosGbt47O&!(*sb81rL?M$u2u4y6B)O?c+MGCI-Cpa5rFQlAsG$5hVvq2P zZm*$#xueLKmz#R7;jKRB2cej1&3GoKamF9cNd%5@Kx7j$7+!$8@A!N`r@9Vb!kE^h22;hq$)$y3gGQAHad_}X7aF(9#aJ@5Dsp+?$pE= zGT7y*_ZaFC<8H)=N-c#p)zZ%ehOtWD!pnvkXygtIejmC7BiZ zW^TMfMTjqwZ!kp|id$(<3FdZ^y@&t8BO&$Nt)q33rpd1GM6;qy+phed7*lAio$5TP zZsNh)!1p=Gfk1IZI)v}LY%h6LqsM3ypOJ^IY&U;f<1=TxTf&awNb zW_z3rAQZTq4|SatlM#r-YrE`&9ofx*<-xp6jC8?Ou_c~KEu~-OvfCNzx}s^s10tfk z>_{$JHsoj(i#Y#VHAIU&`q+5IJO&FjQajgb?&2)0m}g$U;8{fl98GYjH%CttEzXRyQl|l17z}6ka!@q0DWbdkeG9AEBKz$55z8$6D!o>mJ(~m)IMGp znUfbVwu!H#xdb|;#U}7mTGXP~v4NfeK2^?qRsA1lE z7r3Y#%g~O4E~rY4_{|Kev*Ip+GGDK+77P*Ppnu_7?E!UpS4HAMAdTusb){C#0d|Jt zAgI!&*$MV+OP;80$@6}$+JpfS+K!X(4svdl=W6@FUq(4#-CWAyppy2Pb{nh=VLU-) ztkTrxuwJ8$ppxi|3>Eks23bup@0LI+A}~vC29BMf4KfXfoIpOnQ)3S&!qiCP2ABTz z2df6+ovAEVFys`HA?Va^19HM7o z%UFHQU?`gUE4t@}iN!A=X!I+0Sp7l<>sM{+Iofs`m9X=_csqa&Z4jq3g%{0D-vTE8 zEtin%xqD?fscTgrMZzSCqpjA`A)iBQJvdxetr3h@XWo#HhYqMEqf$X4b5*x?#STBu}oh7n+35TD0Nzu*p()qddmzk!V^fG)UmXIR@ zNy0uvG~91hCJ`%>+Vo)rCl`y1GA7~hAyUx}>8d=pc(9a@V$bjgUa)hrY&UKuY&VX$ z#u0hEg3{VuwIAjYmY_?eF8boPG%hwQ`)&D^(kcaPRZX|z0lQ=lu&NBn~N`Hl}w7{6P$fyY`b$gc)Y(Q308Z21CwNfks1|!0cfZC(Q%Cok|s(G8` zTauOh28$`2-N4Xg681;k@0Ioy5r2u2Z1SVhDm!ZcWXq3$6YIO9{6cIF4u3hwi)1fa;01(Y=v37z z#*00G%4$bm$luk0jOoZ#e}if9=`L}1K|vecz>|Q}bv$r!8bl=2)7)^bOHZ$h+>v|Q z4CZ2oF-A(hAg6^ElNhqdO?VL=(Yzedo_BMzuw&JxD|G>{-7A6iY~Xx>iQiav*lVVx zkka~6M`Nuoi~#$vbFh0<+>(9eUTW)BFvh=8z6En5eIJU6Y@I=z?vatMEcp=+&J#D) zM1-4_7JF1qLyvU{mn$%vnh)>-taVtKA=Y;ztgrq32T}p-ZYVJ;@`N|)BC0=1dJM$G zry>UGY9TWEl&#PiAGHeh1#LR*waxLTjlBkuuprsdjdu*o84rK zXLd^M9~GOLq1%^i%03Kfb)sz-{hVRWy*=b9F@~m8UbJN%~?V+FZQor(eFgIVH zhI&>-3hQSmF6)Ee%LqhjEy4#SAd;}5I4ppZ3yxwVZ9(_q73WExZ~^M3cq@o0!{7Ua zRMujpRMoa$pJg22-!X0PW*FUVeOZ}pFh<6{7#EX?6o{`P0@dL622WG=p-fd{ZjJ#u zZ7u97#log)3*ZWi2wb{;J0%p5H0fIvoVJn0M=*ln9P`Hqa>!BtW-v~#GBNYgZzwmvu} z(iD)t*+RA3DFWV1eo>;`6dz3glw+W+Z^Vfc#Rub+Nj}sWvnI;hk!^kHCr+5lC&#aU zJ7SHmTlHBpSXMI$1k2<9`CFQ_AnNeGmRaW+LBz!<*o%@_JPtlLQH=ts*d9&?d0IL=g0?78NK`DyGpZCzj- zVkpXeD!r&HCuuU2+d|c7bSMtOqs< z8c7&pkzscP#=t4$byieU)YVxrPyQGclZ}c3qavR;_@N$K&2=5a6sll!tQ<>qO+Lu} zvRe3{?%;n+e$KP(c2PrE%SCx5x7x|Y$5T_(I1wKVSRt8C#Z;stIqnI^SH0%~PgixM z14t@0Vrgz1o1U&;$Y&-gMw=o4eC-CA9zm%>o2qGuiPw>ue<*L?Fk#S`(XNjkUumWmve`~j6F85(>plH^M zQhuc;(iISTWmc2`BCX3GEDFyzD=Mv2k4>v|#5yFDDuD>i%uAK7IxVx%V$(Q?k{9rg zqO?hgbr5N6brH=CL=?MBnww0WkDZGNOmV8K+;;GZCq$6E-1LisAAi zFUESe_{^J1%$p`_FBuc~cma{??EXebcjv0^GN_Tflpb#?ZoOsUp5%|PTTu;TDv1N? zB46n(IgOKyUXdN6JyEh_pOdJ|3Nzba>TSE~SweQy1>A9o-fOuQaE4X*%te5q(t6@m z`y}qyxvyZNbeJVOITGlU{d}gK!5^^~EI!?X&&+By+}`vHpGGZ!lb;TxD#tA(8Rp1 zK-*Ue3tYQ(v6fgh8Cn^5k9)Q-XQJoUqPIiyr@M8$#7JpPF3MKd(n11if(&OY$E`mR z+fVjFglf%={b{K*c!70d$l5MLpL0-Vt;K$*4(Ik_(yT$|w^j<0!fy3JCD40~6f7(f z$0#b5n2YkYmto77o>SVmHC_Qvw`Iv#qcicWjPddR2KNX#vnMr94P@wK<{n)04?gW7 zECT}mJ^<-Tw#(g>bzH{b?4`@l{?(yYu?+>)TS9--zl)aoa&tzd_1gn#-4Ut$RH|SN z*Vt}g3ezWmYV0yAOUz8;ntWqqa+yOG1Cud%X|vKIR$6IjfBmS$>x?e>Q@%E{E69$_ zuTniDoTWvsg)%iaK9i=!D)=R587+4i8Pf4Lhda)tW3>elf_A&WKe4B6H?IRPOVEH+ z=O;NmsSQh7X`Se{!TPRjPAS+uTrey7x+*6urirx({yRv3Sm-5V5(5Ik8~bJVCV!_& zoxPM}S$>;pt6MjUcY2Deo|H>Oc%=0nRuQSi(j$#G?w3xpjVyLU{CZ*p^=bQnlyR+B zxS=H_aV~z1`y(B`xNjE*WP>=YZ?ZPgf|?*Kp=}plVl?EZE^#I{$?1*&u*?Zw6Fxa3 zHPZMbIRHSNbuB)g6e=muA^;uli;pX*M(h;7+1 ze92L8S&LmQfLoX_YFiDDtix|!8A5=yl*4?j(%(^!{Q+@FTg}-|c#Tn77Y7EecHl-X zm}dq8g4cP{4zZiD!2Q@Q@`kq%-|Yj!020Z-1@al{_(yc<#xZfvkN~l4CFuW_bEl>cC!)afKI| z3yMfFem$xa`~!Z#YvmY#(8AGxTi+ZSTWp6y0JX@QUuJdou#8qZ0~L9|&u#1&9>EQ6 zW5HP?*fTT&dXVV{2$ame1}b9TKU3_`&1$ebA;{4qb~W2o8gqQ!6?nU#^dMIe{R*HQ zja7I&`vQa4=E*`~yE+*Iw*rFYu@SAi)yr<{4*nXw%HUKWJC8@Fda74;nLeph-yhB< z99xElKWv8f;QKI8<*6iC)5kC5ZW>-18ElJXImYf2Zy|edH7CH&CbItUR*5`|kF%?_ z$TL!5-a{GMzA3dC%SNqI`uni RK_)|CYN1oVN_Yt4;+cnWx=f_H>tfI#dMXx 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 z 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%0A0YOp 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%0D0yZQGVn9E^fK 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�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

    )_QUb}I!4b;Ufwf^oSZ=2&qz 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

      !?o5VyyG+(N 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⋘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Ü_x%kMo?r_@r8h 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 z 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%0Dg{f%=`~1~wcPvc9b~er%T}R%k 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 literal 0 HcmV?d00001 diff --git a/src/sqlite/sqlite3-3.46.0-x86.dll b/src/sqlite/sqlite3-3.46.0-x86.dll new file mode 100644 index 0000000000000000000000000000000000000000..0cc2a3b95f6a3634f29808a18591169236344ba1 GIT binary patch literal 2489856 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

      55wSt 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 z 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

      vU9!@k$$&iN*_!WL74Ecc5{Ku*9 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 z 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

      _S1C~mvBzq2N@ zs|;H9Fc*rV%qpCvIeM39s4L$i$Luum%^Q=ZuS|EE)5MnbCU1#ExO&dm=UJBsbo~W>St#J{!Q7|6mVahYR$#`XB|3Um@wu&JK@hp-? zK8J-5CFgM4_5_Q%O;+FAFalde zYEg1Y#NFsI8SR%UftLe)9+RW4wcSb%Jxj>(!`w>XzON83t5j%@9)xNBTiU~UL4UeD zdH}xpHXiZ4+rYQ^#wkA$+d?6CA?*myC&=l{0VCifJFw(o;VL7cca%IVOywnG@WgWe ze=9I-FeX20g5j;o`9XK3@_Z0m>Yvwrt7sjJO2n4t#+K%HSBkDBdt^auX)w05Y>;<@ z_3KTPF?W7+E_0duxwT!7!0t)lHL#7zzCrH7rC9xERW;biYRO7!}} z_~gTGhlrYdkUV(t*tY* z8Vb+wlpnjXiHqBatou;KGIGS`_K^J&BG8#(8(<45)NsQr>Uz0C(fv58hy-ye!_I#$!@o`>Abr`++&%6Qf(eEJ08_d`9{0#v-GEFjC`j>&*NT%H*HJy>_}t7jdy z^z_Ppk1n^}PIf%HWTkm@+1jHfKIs(cu@>B-pF+prS54|COfQA+%G z@0$XBj>ZqSbDBNOd-N^pt(>1l%G)Z)VWg;~=7A(?F&;d2)RN9pp8J@IUXm>3Gz6oX zw<~g`{t8=unV1LpL-WrBc*>0423idMR;ZgL`YBSCL|tga&JIN~R)N(C(2gvit7Q*8 zv~n~+!)Z{GVEk#|7@X61wRo9{mOQ%szQAU!HJ3*rI}x!ilp<3?>M!ze7!6wZh8pm} zH0T*-;z(%F_x`VZ@9t4i9zRX1-NQ(JiZ1A<%G%zNNlTKT{c@i_{Ck?*=aZ42%YKq1 zU9?{uf6_&;!WhVw#lJKsd#J2+klbfVet$1ha-X!pNUbvFRmjh07zTE7ch3?qi?DHy zRq)gJrPPK{VQvO>M#h5*Cn&*BeR3oC>~I@F9ZS8`sDEhiE>OTO(D{3rR%h&nCTSZE zZol@3i8?C$J-LTdo8vwawYmAn$tj!pU&nvS#=w4)vyi*@L?-Uhhs|d5tPh<$S*PW) z&crF{e~HqWC=x=0o9j*v_j6N6)T>iCEe!{b$Z+e7fh|D%a|&|j6N6v#IVl(m#7s2l1Vun|Fl z_3k{B!UH?C+jhulfzin84j9^Pn|Kmd=;M;Qc`b+NZBV|pJvrOZa^^rHii<191dzyS zw>-eT=^11*abmXUd-YDGMY;biWy0gi5z{QM(T%Q%oYJ0?BEv+`+ZPdS7B7EpyVr)ju6AZirZBC6J*g|BQR&g4Oi4wyn)eQ-ps$%yXtGS0AV7 z{^zJPc()?^shu$|l`${jsty2nL0D8;W9+9_M>zllIRNCE2Y~O;PIUmt*P=T2!VbNj zKB^Od^oSkewLM z+~}c?!eU%^=_G69wCEvG`<^)J(n+HtC!mKE*4ii9E}dixXN}(w-J&=ER8)Xr{h4hW zmSsjx4ZPGmPEjQs(qiYwK5ti%q6-N8PJ(*D3V{WTZN&2I*m<#QF!Pp0gL?>}0i(~0 zBRvml_r+Q?$|TUYAfHwB{FHt63Gv|5(?W7;d%ZFR0VCR88TnNH@dM-gglJUtUNEq? znh9dzQY}@}xeV16nw?=b`EB0KZ?^p@yP9&eg4JDIuiMyS*6Jp(=kIE|->s`HbBqqE^opVqK_Pt)&OLJw|3Y3;d zDFMS1%dac>xtP_5KVPy|**Q-G36;VdtBQ=_w_52LXQ)jH%l}g4B}RE{sjD&C#9=b{ zPh7p60+KG}l%$Dm{dD8=P9_A|*B+`ah+-kq+Kdvq9C(&+l`7c&O6x-$-($BjW%Ey{ zFJ7%~|5CUz zsCN$JmP~r;i)8MbyOgH7(rh2qVASy$r(sOOT)khM@2oMV4m2Y&$!x;W3dGR}4b0i5 z_FuClqg0V%IPK~c)2&julfM5P)Rc@FAbg93JeHgp$w{$dA9z8X!S&54PV8(lC{AqY zVeFs=Oi+GK!a&^0zb;8(l9MZL4O?%V^RG!>$>aA9!z<~o^h?fuR%~}=t~_^F=9?GAlI^Z6FrR|vrA#g@&Hc`2 z>kZ$3nn!9S6HMctq$D~i{%oH&t-C5LR?0O)+Tf&^w1;5Qmf>wg7m7>m{)Y{q;-_h? z!iJa^ctAL6T2vUcsJ-_n&I8b%re?hFD9qWf^($fSGnFuZS7)BZ_prQ62bi;wAEubI zrOEhN`;;iCSbqjlP)fykTfY!U$WouN{@;fPf$++ckA@<2fbz=}o6}_Mx)08*P$KZg zdtQeVtAZ7GS1KiA(&9IK(DQ;YXwzAS-~M$v%W%~KScaFRScdvrYLW&F4Tyh29a6*a zOv5bpc`sYOZ}@=@=O`j{UO@3K#ke2@J1f04jzO*Y;42@~nw}qhTxM{m(^EqMY=hI)J0m4v{>Ss8bcGNditpB76h*!THC3?rmle|EIjqR#l z73O2}oJ)D)4W?B7rqzV>a(ggjoF_hlDL-Gz-zsP}V%NLQ(ZF`gv#O$7_Cz;eY)s@F zW9BwFYT>KK{$P-HW3yFj9K1Q@hchU;n{{^6#Ybt({!KajB+Bi8ovUYq7+W`Sgw)z3 z7!J49++NGA+Ms)Ch5bgWWNgGuiQXJU;ioP|T@R;UF(QSZoFsMKn>C>7)6$$_iDW01 z|iCIm$IIe@~Re{OKoVGoB${OL6lz1jYLGGmH;5DGdARxc!NK47;`| zg<(%YyRIJBZy;9p91v^**K`{Qe<+PG_GT)lPD$TXBh>;IhK{4&h-8=^q4xdF9K9vy zi>(VjjMCaGxiX~P(ZR{Gg6oF7Es;X~%9(n_Oa^a8$xSmN*~CvAt!L(qLOU+7rAb?f zkHZ;D9COr$GP`pQ3aGPjuzYmYxnr(xrPd_%E&inSmEo+DF?Y5+B7QY3;mf1V*bJ0# zLUnXk%#fsM@rvo)6*J{F6rVDqTW%~h@hSL@TT-1^f)huh>${>B$o`H7>-;gK;r~+( zT=0yYNNi8#Gcs2hFaHz{?G(hZ4%-&|P)`YcVnxCvyso#nESAR54_v5+6`=8)*AeKh z(W(g#mTT*1z-x1nvG+Ms#R6TPNW|J)0OuS1XWNtlZLBpm5zWbhKt+D!8gs8L(<@zd z`i;V4O%pIC6>E^yWvpexEtd^6{c2Eg*vFI*m3DgZA2JA+{rN= znEY2%#b?8jf%XaXX6Vh;_}{uAAF=>LVq3X*3Hin@=#uyp@de_IH|O?dLZy54gL*}= z@Nq5`q9vf`{>7-4ZlU`X&8Xzh-suav}x{XJN_ zKt}q|Huq~~yb09_m&iX2J*7__lJ$XqKsBYh)4eWr#2PWh7qY9l`%p@($XlWF)4%!`3$_k5}^0ie#RY90mF8nuAgc zOQ+jbksIjLR`>E8xS>?L?f3GcQ(WD65r=FRcf>Tb48}}gThmmf_v2ksX^KKR_xGgo zC50i98%7cf!zc4J?mn4+IuOCVYSPR7HJ!1Fpv(pH8J~8s#GuxPVm1%%u~0CWYRotd`Kw0PwVIT+@L5=*NS zOJxh_{AU0S4pEeCU~4g;Ez13sAw9{uMtaws(x_44)+aOe)%c+wzAN zGbOS&y0XX;K1;7GuvOxbaM39ZhEu#?qThxVbvQ|WQxqr53SMS77g=z1@`xCQ`BkN9X)87<_CIc&83@_9Cy-D;I_m zMfcGiWM;N5ed9h*ASJQz4S@$P4)=L}B&tIf08 zJ)BJH6l6(ASm|0VeqXdUb>@QMqR-CFlV*DL`hvhlZOsp*^A-7OL(SV5=vJHRG`7;X z{j>&bY<|3zZIr=rGdN#MZli3n6>OuHSYv7%g$9x%>m)g{R?0Tu9`4w>{+q)eTNS+Y<3<|Wxum|~{ z+&=t>;607q46vVdZE`@^Hx*O(=;Y(a4h-u=xzBS3I+fH1KfejByf6B$b=jn=>hT}2 zKX7oxX9nVRCc+Qe`LiToZ+_iOpXcaEpAzs`ijsD2>B2W?ko>=hB&~Z?q7u_fLfylBzN3QYuJ~_ImeeiqC z8xls*$YNoX$H-qLKhgiinxi8VhKBrnVqP+56&ncot=N5ztKiz*_OdJV_XEa?OJPa5;@A_(GAaF;?)^EemR+xdfKYxlJ1;JrJ+acC$GktQ2)y6) zTfPu4Nv`PIRw-)v!>Je`&W{;~kDaJw2CBA4my0;=U+AY06fOZ_9PchK)vpK!4mSJr z=c8}g7hPi7OCi6`j1-9cy30=T;&*$`(0?QEPf2^P79nG5Wyz+AS8*hNXno}>cIW-VWKtsO#o zKcjDiWR6XB;hHd3sa6ftL%}p;FsICukyftHzh_eE?!@GxpvXTJYnWx|{*EkWm1P-O zXorijs}%2wZl#WETsKa|`VoF|LA)r}n8q`!XS%IxBBN{TSWCC|NT<-a;8%KWU0SSH z=8m0ODuitbZmah!DTMf-Ouu3Ig$aTW($2PU)uISL-(ir%1kLkrwX#EHkI+Gk3izSM_U@xGyllUTv;HYrNUC+E#!-C zDvjIE;D|w}qRRa6wSgOb%_aQ`Nr;n|`i&obpHtBmL6lpE#0`quze z&)1s^rU@yXtF^W>zWQvJFdA-f>rVphN~O+Qr*H0NdC2es``jx2Ky5>8iYr#(HctIw z68a;H!9ISWtKISg|5=6Z68qOB4qVt?++du(R+fRV1u6jz;p!3Gt2D7h;^hkD=i(+_ zW$!)7Oc!2Y>Ob#ir2ZO=y>q47;zVVUIm5?i$5Ql_2u;SbN};X_jtl=`Ags`U)IZag4b9h>X}9t8r(}}Z!y-2c z?VwnF9=%Hd)+3?rtN>)FM%)s9_jY`3-@kuM$2()9-PY&}aAOXQsqc7mOoKQfyotA< zxL~arc*H2ZOYo6jw!v}Y3-V#OJcV1?2&06azoR2|Vy*GKt~NmxHfQ9$G2^2E{dU=f zwK^j^)dQ_fC?MIH_Wwkwuq=@7n46Vncukf%W8-bK8$bSh<{wZ!;VD;rAxbU#-x^Mv zrOvpOPwR}@e^VWuEj@*?UT3`aJ+nmF^u;Yko$*$?>gcRv;v?L=yMfiUT;!3~E z#CkCSlJM~iodY&O=OwqnbjV+3Jn&uWzu$kqnR{la0filc{Qbheft2K>)~MSBZGjB6 zKxC-9p(sk4(EV-wJ$KQMprOP$wkg@2uhkkq@-wjHR+=^I$fLLVzbh5!GSK_aW7kCA zl>M{S|9z5&A8f%s#8^ou#LWH}R-6nKaqb`)lD@#eBi8Q+Q(e$-$vH1^dra zdcZ@5<(V-ZuZ^*7$=Pe;+`!nma-bgyH-z}OI8MQ#`HosRE`H;}32EalBMYeJCX1)& zAtOErSZz=vLV~HG!!)(t_|0k=x_cl1qMLA>e|>K~~{0bMML z_PLrS(611Ha~Jg|FT|=+4pv0(%BSz?l@pNaZqcgq6Ba|*-`|o2YE9P(5_LG-d<85LTNZZis)7l7FEsjN0`}Rts zF1P3n`MS`+TI;=hrcZSX@xWO^2-Gcp+6u<4NLIP}ft+6IPAqj1CoQp5$cam^pS|52x?GtB%9lEd5=%=HONF3N z%86WM{;JH+AS=|{6iFdh_14T4tTn!e%t(4%3{%r1V$qWnRB_pCbA7Jw1737|{GRH~u+(cmPM*_(w9G;Q>{QfwB{q7^kgC z-}uAFRntQOy765@nAhmE2;p_}rWR)J|6hW7 zht_t8En^rDCDU&eWa~l)InDj9|9*vmd;RGyNi;K2iH4IZs;wQs!4Z^bUj4Dc>a3^M zuTb^Ky-@sQandfZ?55*x7pS!fsUS>_hqxB*>v>FY?h&1)d}D9YAT^pm$yPjjsdx!b zPFDU7{=jp;>y&dBq$%1?1yhc^!;ddYcDQ!=aqn;>WxM)tv#BUF)cg^eW032V+y0o= zWu<5_Fmok7A_Ju}T%-TUJK?Mm(8pi4h7`s(E^ z%Ns21-+lGzvtZBrO}{KMO~T3P`JD{3v|?4iSJcE&6mpmME953jh1{#oH+3KTR3THE z5W|cig3#;BQwq7JZ zS0I28-e0WQ-}5+wv>wd@-2FE3Ymv13NkdR^Hu)r1g+F~1lWNQ@2knSJ#2^*kFMN*J zMW&Y;q^NH-nUlFkA3B|^;*51-SR)?^w!XHT2RTqF5fsMZehFqQkAD^1^uMu^ett=A zLwjb@Rxcm$MT|0-k0u2h<`J=B^mJ(=QA+p+bs{;%?cImGoQ`)uRck zw&oY+wD_Qp^7&H+$D5cN(P6d7yBvM8Jy2&M`dqnPYZb@G;B}6~_52joho;pS-+Y-S zK#dA;c>vclfoLCxSwZ*xm4}Q=q1qrWaUB1ba*I~D4?0pp3I0TlbDQmp|F@ga4r^YwE zd)KmhQr$bM(N@wbFWqP>sS=u|HkxjU-8kEO}*K|DA17jlbC&gj8Ggeg) z3l$As%fcyfw5%8S85Nmc3kluWNWf#GS{SWhE^%4%S$yaX{3nml*v5@NAZ`OefzMXL z04QvwJhtjKDQfn$b2_gzr4pDb%^6(fpl(U~qE*G#R2JwHCI8Vc7Gj`=9o z^=s^Px}gFDAs;FU>|9w#e4dXMPi@a665HokeJ2AdBHhkh1*pI#7F__B3LvKf7RW-1 zZa8H7<62u^&Wizz`I|PaJR$JWqIJDl(PtCcuN3Z6@ClH`O6FjpI4f3g?QDukwQf+; zhkc0duAaP_3TIn2j>dKu&6_YG7%&MM0rtp;KG)3Xlw2 zTF%K5C=Irb$W27^iSu|q^2_BeTOa5nh}8~ni`e&CTLd3WbijCb={I`yIi9tAQ_MG| zfw#2VuH!AyFm`Iu8Iq4Ra?a(VYMz0r`Gz31xF{ziX0e>OsH6({0eA9(&sU$xM+9%$ zseNOd`FW^thxX%*h5Mp?K5g>e!WW`_*imtpr=s*0?$UnTS@^bk*<1LMykzdQ$-UXw zV`pQZI-zUAwrtarWhCPfv8o;oJ}TUYT8(=&=EC~rZHeZy_-JNep<@N^i}hdY&lu+{ z>r0FV6;_ZXH?SW!reHalcCGa$U?e&91x$VREdx_uFlg#UBvQ=ui+IWQN8moV*0z&@ zFOteAj~IoiaU;kni3n9>Zq^3gV!o=h)&Cb%vht+BPF|IvoyL>0z?E2rGfDGBnXTMl zV4}Et^pW7#R$omfUguJP1Yb0xa{TU8^6 zx?w@_FOo&AVmvrSsBb*SB06#^O#_jv!p4tS8uv&}wmZXuc@=#Z z(ll(Y9Y5d~?XzpQUcz(2-)7vCJN?Vjj5R(Pf<5|LE4Q7EzZtr9ZM~|HEk5 zThC0x>htRiyY?$#Ip}b;j?Jg2PToB?|e%3xA!l=Swoa=xjth zB+8h38tR3-$*(hh@wV_Fys3|F_cGEi{~*hC7k}U6?;HFL0gb=Oqv*pbX+?CU8-|{9 z#piJCSLp`E&;ilbh;+7a7w%GFX~jYDouT+d7rzF+s}mK#UbHheu+-V~608=bwYd&h zUMXL;@g?6yI~>vF4omnX{XD&EZAp!NrGq`wSUgI9KiZKS?X^Z;HN%XC8}zQixAQ6; z!qxP^YAdC zYZE!V4X+4nAMSa#Bj<3f2nw0Qw_aW;F^4Dp!I%D!EBw&{EYIAvMD#W}wc$tgau<&* zDi))LsZV%}_|gA1oBa-{v6a(HPfienki%4gCQETY+7Anp}WSoZi~W5vKwrN>ggS=^j{zZ{D`}R z^{<`4j>`5|p`8=pT$b(F?lC8@_wfrkQ!Sk;N;N^R63_Y5WsqdB!dz$Q z=cy@qwkvI&oi9T}98lXq`Y@e!=2z>?PdQ2eA;UeL2c=<~dQb)=>Op=M9BrMAmSxqp zNd}imDcm59CrQl<<~C*2%%HVxX!fg>HrKX=wMOvR=efQB;Y`~_iEu6=LcZrtR^>th zql+~)cL1=!ho1^8ZCh84EkU(rWi~tRr4r!5-#dDKA}L(bTm5&C3HyO;8Us#n3Z6M% zS|%U^ph(G53uVux?CS$P+UjW%g<4wKfn%Zg7Ma`~`sTcj!mWo-@bl*MhO@-KkOc4}`2YUq3kyR{-!5viiORjdbH3Xz(^4#5Y13oQ7*x6Ty#qu8m6OvN>P$2p@|jF-tz zB)ethNme|>FBL{@hgF3vI6<6v{J?DzmV18bVzTsZ?P0s)zER;+{u`aW7u@F}#^+S$ ze^~4&{%7hJ+Ip~;@975k1DrMT%h6cgl`QC0UU#sY-r#J25Iuef~eME}<2GO1DwBOlq?C*Q7;OsG1CF z8c`K^Z5ysTk;_4If@T!iA~@A!99Rn$HCaW(s;9Rl9CVY~bXwU?@m5G*Gqp9MeDG+d zOxB^tK2%)}V(|0ljID$ziC1Kh{mUY6@vP8~DUyT~P#B6BXa1)2TCC-pB z9%(Pw1pR3-#B+DuB6+P1b;J(^SqS3US#O-Y%an*Jca99knC34$3MP?(uz&N+W`2J`B3-=d!V#pX44rg_b8 zGOq=9nb)EX=C$}$^IBSPtNJdu%)FL8WnQZst5kaR?dCO96jRUBmzmcYTg>as56$b` zvUc_U`mlLzywAKY_?>xO=+@QyaFuyoCdYl2SChK7`djGYGI`aicKpZ9TiL%It5vGd z$9I{xw{u$^SE;f~-)`Q1m)o7@ttcAJSfeuB#qA^J?Y-POZd0i;!Xfkaer|6!Z)Lz; zU?tk{3vL^^g`{#r0*UaYOin@dG0;g{Gi6z-75K=y77n{)Hz{f#8+hXo{wOJI#F^A%}>;UUyR>P zcUtQ7KI8G5C+7)g1S|#^1zB@51!N6T`9Yghnm45Lnis_3-?L$Fy>i#lHMH;S=+_AY2-lOMyUIfwRHqIf1f%nh1=sR ztyP74$@kXHZwTW?PT@le9D<{iR))KwZQpX2Y*FzkRwBQt2y(*FcIi{?!~>dWdj)Urly>3Cx)?SXPHbpO%roL$K(utx9alUrci^B_{VWiCBS(1jPQqWN zOK6gX=R|w#i%vGr$D^?Kaf!1^?0I^`kKTa~!W3W4t#{`%1PEsl|9daL*aAV zCylyP+4CGogimXqWV;l5o|DFJ$UBI~N)F!T_(>IxaUm&bk3)v|sE^2}YU`DQ7-QWx zl*P9kmi!1fQ9Cwe?ug2QhPyt^H2ePmVlrD|k>(dWAcVMAO4@Y4U%4iWUwulF{wv&| z3Wu0+2Obd6Tv4arDqiF&q?(#CCYgT-j-pZY zGZA|hbWhIbTMl`AlRszHKqFPPU|^R}IP(VV;mk_4_&xH~ZBlW3l6X6EmDt72kw0=- zdhHY-o&fP-y1;CO6>v#w#ZMpL%*X)~HC@bJ`5Y06%TuoONWymvZIhIo>Pi6xLC-)q zFC;M8Jj#h~@*my}MpdFb=ITq_YDA2MW%>SJ78}+0WtTW3q$LigEj9SVflX z=X4uI<)T!;C7%*=A(M+@SGoW$~&r(O3P_rfcIFL@o;>rQy?H)oUn!S;Dtb28837wtr`Y#t}ynjTiuWcpK5 zE~_pRHpu6}!!$mhmd^#WRmUWK66qW&WVPp`6~ivg-2!5pou1ULOqOV`j3!*#YQJRX z98_ntuUCX~%7kM$eaj<<#z<@CfI8M zXOLrxn5?6r^p7md2FtBrPCcexst*sLHYPm}COdRNKDHwpew z{%wkB_gZct52LbE2pfOM$ZY{Bmdjxry^J}t;iuX?^SaAC4v-`xN+GCU6efiKj3X$i zM0e)K-Re$Y@iy58*|~(r>w^M3KgcxsYijG0&=)d3yBOeu2jZ2Z!X661rMfRX1C)0( z@Eg%o4S?SOq^N1v!%wh6j;JF(qQZ{=hT;L6^O+g|cp_T(BonJiBqzpRNg9F4QXC@1 zW;MwOs{UR_b7rSt^QvQo%{0GsX8en5(je31Ib72@Csvdzwa+|1_&?gi34mhfNN2A> z#=TpFG8P0iA?PNBtc{<}QpY+1RvjVsuv!o9q>Nb4=0l%?Pl8Z49)oQEs|gp&K%6bx zhWZB$I(t98ufs(+?T~YSN0Mb~v2E=2=o@?8ChK)WZ#E_=#wqWsQi9NNUXi&WSaQi; znMF@M{XI4NnJdjTx@M~5F&}s=kqe+Q_61$Rh`(RE!f1t^b_s%Sim@0C7bLYSWNH(O z?Z)nF<#REBYK@Ws6^cl+q|dBj_$+cJ6MftK`Z{Cvmu0tgb7b>HT#R|a31_<+jFWFP zPuoXs;5q3Hbm%r|pNJ8ltnEp1;A?qGIROZyRsAi0YEaAX%uj1Mt6?&3T}q-WT$XTQ z%Lxz9%_m^Aq*hcAP==^~UY$kI_0i|pml;C@0_r5yY{dGG31`d8V{({J)u+CEa}!}jOl{NMjxR?D`QRj24r zcD$2Snf*+pXHLuSSI%DL5*PYMCxN27OQq^6Dn=se;LpjQD|*PfB72TvVx#|8+Q~Am zQdG)}cE>7=?gJ4=bFR2({UuYuG5QM}v!`LxGb=xJhMp?kS&7^<%>fPgWu*X_UbeTZ z?TSuS27(@0h}fbf>2q147OnM=teO>MGZhJnv^H^T5a`3lf;xdW!b7^AyfZD~Sq#Ta zd~R?A&q3dCxbt_>!1?>U^z*kj{rs&Z&));_A{Zx!3RE%|H!IUyFkrNV#pK`$87FF0 zJ_ri5bru9|?spWqjU+xvaTD;ERU%S#w_F=)$&@&kU6-Q;JOi!m2mRyWsZNfEjDz5e z{i1~@+z}M8Wfb7#i>TVP)=O4+&)Y*P#1J3vuAXHq+FJ0D?C~G*H8;s z_(>2hu>1?LU6edQglcuo&wfdjpk@YVYz6GR23ETWOhnKM_7s8gMk~k!6bMF$B zsQ8Meja2yJBiKi6AS)zs6+2t(eq~9`lTv}`@yhX9MK3$dw5Hy8=LrmSAWO{h&x^AZHxr-YU9Ijds(xm7}BUR`E5C|HZxh=aTkF zon=aevFn!a@XFd<;RD8rFzlC{^SW=jgUcwM6*y5HAh;{h>F=) ztBlvYz&a5)Xwl#En{gLEJ%8j!wxu+e|8F0~!sws+EsT`JxyI-*sV6kqrI2I@zG=oc z%2O6bZsqcSEtVCMiRJ`3- zMU(OSD$`%6BR1P~{I6nZrtFMJ`;}nHbla=DA_KNpA!AP^Wu6Eu!Bwsp>=gc1iUz!g zH%%ITkZCNg?A6!~xUx^Ld_r2~LrK+T!@06Awtavr`wvoD0?M2#WGr~gBzXJq;ya|( z+bfTy)j7(NU|wL2fQ3XS$VI0hz2Wo2>7zC?o9F~nP=OY{8kSqJJJj-3GdvJ7f$&X7 zYYf;eEGFz*s4{Ny2$N4CTnClx7v`u(@9PzB07WnnWqGRYiz;RR`-wb{cu8M_S1M++ z-q;g7{!3c4b?t=`*}K*VRirG_hAwQux_ugrJ|sK)J93Ab9_u9xvXy~{H7e)`#%2>E z+9J26=rCr!==TSuZ)pbW4c;TafegRA$hb!?>3tpugzE0Omp0OQsfjXs zM6`lw?iwx#KL4rYGR5l~jxTm(LJeRarZ#1U*>e&xhz3YCGwqN=rb=SiEq*asYJ!N46{|YQ57Am*WN_2#NwT(w%-%D3Poi-f)-RBWF@x24(}L9%q=MB6 z@T$$Uglkg}=U#6uy0pfqzDy=h=1gW`Yty*{v8ug!P_+2-^s4yQCu+B4u|uQF7X|2q zx^RoEuXJ#%I?~K&)twTlZt8>Tbd%~t8l$Ec)!P1#83BEd;GJJmFlU<}=bB=UzZR%6 z{UzF6%1D^hmT3<)T~S^$)$jG{cY&hRI2MIZ1Nlu4i4PB>rIytQ1$AL1t%s+!`n7;xVl1uQpt&!~LMk~UN>0?m@MJ=(aNmDTz z%a}1w&p!zuZ6#QvJumLeOB!^BF~9xq8Y&O_o2XoDRrV;dP3o{2gYp)T_g2X(#ztmd z(nG3qAhEe9xZhKu=L7XY^>rKqY7kCmOh{TJeyXb7^7jm78j;oj5{JtZLhX<;dTv-X4@DtE*3EmB|rdV%NP)gB%Xf;Z7Soo8g>m+ z-`{K>buFOT&xL6Abbq7FAGuWS>Ee?Hr6GoPf$B2dpkNxVIzy_q`V{HR0{?=z{Ztu4 zn|Mra>^+Ssh; zjHvi4daHi}FQFsmf^m*6FFwZes&t0!DpT*u>*mCIJtx*2^Tc`$z&?Xv@Gvbi8sx;v z5SE3E*{`sY=sX99*yH{d+Q(2dk$FMf+%4o*R!XCMP#rQZJJl3gV4thCZ3gxPkPElA z?Hdk^bCX~k{&+C{@^E0B%N*~XqQJOdBw)Nj@*Wk8Pm~t-gR$5p%l!4xZ@L#A0>-a> z?f~cjBL6-jD$XW{^Qg8D*qnjV9G-Qcaww6LKmTCxj#@5NK=Jh^RvGmw&+1{<)cD1|OV-;Jq2@wKX@2aS4)$R4hfKm?(Uip82&pVS05HMQXJ^tz^ z%zHfVbN-&+^Sgh5u{A4zr40C|6ih?%SLAvGNM436i|0p#uCPsarE48PVjy zkW940kWSyFjlWs_vatUN zB&4#~kAt$hi}uVJPi3&wVn4_Z?yv@nPURPxtdl@(FV94{$?xZj#4uNT#V@2Z$6S%S zBP`!te}&Lh@!p(tM%yalW{SvkH8GlO_x*E-)yu&Iei06Y`&%yC!m*z6j@QX0-*LVTkoAKT`>!=&mQiM&~>BX7=H0!U0C9>crBkr@5s zG&)^EWL2g6?^W%Rh>4Mm9}EY3!>(hPoTbMM7ML6UVVrd_JtPFPr~iDaij9r0^Vy=~ z8qJHW3S}Uc6%me-+~m_KsU5-TlwKmwk_LSmWZs;&W`?Kvwbe5`OQ)JY(?z{~ZJd)MaM$hkXc0_wmG$|OLqBif zb2!$ik=}3^$(GIB`dOlsj752Q7+ehAzLNsY?WgN@&*MX@&ZUReIbC-t(AN(HYun%@ zp(f8EpVV@YC>M~$U}G*9s2|Kwjb#o{J?P+sU>KY;oVQi%JA(46Foc?21mPH~-_!gONss z#~RO(kj6P?-Dfn?ILCbP91CfLsfu}CD@X(Rx>X@FCF5BCXHL;|i3-6RIT~+NSa_pC z@2kXG*M^E?GC?iHk+A``@_FiKse>RL=L1~B0#T#EoX(R5vwyby`<)`eFAdN%>4A`&*yh6OgEfzumhJ-^&w#)_omN&~n&xTVXUx1PN7vMJr+Wzxzy4m4 zPiN$D#^P}3>0c%J{^;Y6X5gb4_-F<`nt{LP48->Yv~2?E8<4=LYkl$UW1!naGUM*N z5dy5vynU`E)m_8gos+=+YWo{~SffqONtu8n%M!b=j(HSF8X}ChIeIwu#V^?-t{%rW zn#ON3=v5(JXwDNMHb$fQyH5@bHkvnA2-PToZ{3}8#7KUKV=v)2wKYmr=A&Fo$Rkmg z6LkpbjM$MNv#<}^S{D`!cJ6IEL-LOdtQGDP5tHGLm}i7FpB!)u2*UtzmN0%^DHV|W z<8i1Oacc6Iefbt4451V)t~1Z7mYx`i3(ztzMAg|7dVTFYm????2 zkzt+r+yzqF)&CzbPvxDva9ikpV|THm#n}s;EWW{ZOgzPp))&S*qMGZHWQ)P*!@0e} zmlf<~cqM3WyxB=(d?>qxbcOv!?s1O$5|b)anJ?aJgyTC1X(3;>KFKFy5FVfcnce^j zl6vz;_3tuI+y)~{k7G!4&40X)=|)r=Ku~>Lo!KP1E#e(8toafh{)V>h^2x4x3SjzrW1V+OalU)=#)m{tlxjxIONsmn4kHC zCc{P`q8iKx%Y-=k{F%BFCA62Yn{nNe#ef}7Ak~?-5OYI!*XnHVScw{#UXj1&4*77~ zs%18H_AVX0!6P67jhOu_aTM#H7%}f^V&Qf(aP?O6fNO?_MJ3)444wJqY(#0xaK+dU zxE05IZ6}L8XI=9ZYjr8iC?zJ(GD=mlOF}VU>+j=h^K8*$o0nN7QuSO+2`!(B9yMIt z`?AVlP?-4PHY28E!&VtQ_I$`zTD1+08q!^nr4tyi-@HYP_5nz3$#5q85l?-9wix#N z1hm(k1=yiVPT4Ok=ayIH@+SoSV(WeZ_Y0On&PSv;%DDKwVFYL;q8ZZeje;r)mu5AX zXHtOX`p=ysW^LLTr1@T)>C6LQsJNs!iH%E{GF{fw+_-zC~yqC)_d|bAf z=n5l(3D`@YOmDT>>$`;~wRYPXS%>Vlg$>qjd;PQ{@3zI7$M@#3qqBq+IbJt*q@5-n zLmw#e{pj|^P(FikOqSPtXS?Wf>5IGbUl^sBrWq2xK|7SnYCQsykl!m#Nh6|5m?3Q5 zM?yw!8wPre~5WJ;avcubmzs&xmi;ipSU` zKrW#QYnKvY=(T%O6A>$xNpKP^>^j{M0g5RjV$ltpG!1469S3xpaPk_Bt&?tlAip&$ zK2Y3tOnjhJt}btL#=E`~A2@zh%IojQb*1wQ6H_eI7Hun6O{>ix!t2t@3si6S^OEMF z&a5;n!xV`Fd#Y-Ps)us#>;5mJ`vt@C7!WYWyz^Y?wJXuII?)zg)HHg}I;49>Ng#S$ z$++m0lJQY@$;9Y{k_pl55?9ngueCTSa~{O9-YK+<2NB`~HnLZu#h$jXr%v229)(Ic zNf}>D&ao!{Ex;5Hdw~nL@pZQAKR(A@~0+G^4<^~A}m%yQ=r%@Z~vT=jvFK37u zr%SJdI3JF>tGb{D{zg?JElgEoYZ1|?tcQNE{|$cP$c2v`!4q2XuXJG zmS>B3*0=c{hRkW5-dl>DtvGKqQC2>|>FGd$I6X;iJ$3cXZ}S@3z$f6i0OCzuLzF=m zWIIVP+v@N$O2M~kJt;`QNz?%aId=#6NZG5;e~3m_P2Q3O@4oR)vhWLPtoxRS6Jz7u zMWg|YJ+8fiQXjEKPS>`?&RDqh0+|++WfY6CIQ(&(ex+zEG z+z7I?Q8}Z`8kVIARn!x2^C8oXA(~897>TCELTUS}BbX*OHZ*U(_GBG-$J<-En8t1T z3z{jh3`6wo2cNc~FXem?g{_cGp7cSSs9elGJiHGh06%EZ&_2)c?!3l$G0H1f>}uK6 z0aa2*ErbXjF>Y)%p%4Q+S?3NUX;So$=0;!eW4ubnooCaoOJA1nR8dXE3YA9cHf-t z-|=*e(CgAakM!?2`oiv_izCdy&{XP+_#Tf2Nxufk9HGETd<0_*4s!#Y#o6x8_1rqT z(B%ozN%}hj{J;cC20_1B4IeDzQ9XqU_QO_R^s4A*#GP6IF~lzc4Ye7SP`j2vkd+W< zWVjqQqxxjZj7t9wnNeMrVMg^?%&2mA3ctqJM_agJZ{#~(ma>pgQ zTIx7yP-e>J34Y8O>W^isH~Pe!ZOGzDe9uRi^w7Z*eShu)IN9B}otnR=jh;R!W@}7x z4(3m}`?&C0Mo-(AbRWh`54$&sgoLDw@O|#jiy>gGS?4?0@M+Dk;nOv_RDt1>eEUf2 zVx8bSXT`kCo~1?j@Q=L}dBRF-$n5w5SE2+G@r_&$w)j+w-@N_8F^D$8gjQ}am+IW- zE+K@)In&cq$NYp-hHy@>>yQoAb_62kgv|%pP#r(KBK;H7UoxF|Xwese=w;wPOxq-V zfFHW!i=WVxBHPlV-c3{*eRaH7lDCyO@n7^0W)FAd;GOq>^A7y#+-N5}*9nk`E=?`1 z9_zlRYlAm`W2wEA$Qb($!b$rjgxGV!+r{leH6h3dH&#rBLvP&QLziHX`3&Z$^$w8sLaOS1H$wQv#A=>L;O4E zEsXD3kS12Kt7A#8fMxZGDUqD=(fUR$ukoe0LoLsrg_2u0Z!&gY&=0Q z-puR=hXqO)<`DQIMQ52?QSSo0pUp_rY92S4?Sd@Y$w-MG8?9k}u&TP6e#t@Ztxp=~ zVT-nW+S`K-p>}UF5F7sSti6ajGEV1%DT)AN|g%S9{`r7>Mr))~SUq zCdUb#wN^Y3BXy0hNYc7I;!A^wWGT#FLqmb4SiX4*sdy^jddyXB6zKmy?l?8GYvC3sR4H=E-V*Y=&pJ?!FnkvqoLvTuOS2 zaQ>i#7eN9c=-mCMM`cht!t7kO&v-1g7ro-XY-)sB2!@}#k19`mSXbFJ$4R|Y^YzVT zQ@_iv$QvkN+GC^~jYq7rHJeD%kLM7bgg{Xb$1#vV>R8a)X9T}u)VTo7-L$hE*Cb*iF7 zfRFRk-8mWXRu!`R4UL3q2qEq&N zPf#?bQ}Tfr4Fs*Ws})Xu#v^tZLq3|sOea_464xP&9~!fiWmzPKwNCVd_(sbON0cxo zDxH#VAaQJ>#!xc@wW*yQ8`ofpT^iUfqvoL|4!TI^6Oy=@m0npBp zKd7-p7jj8PD&HIqFn&GguT~mtBQSs$223*IctbVL*g0w}JI%>U754KU3a=U@;n-H( z=3P5su+o)i@FpsK{Wqx^U+9r_u26TIgL_`|e@U1#$_~%RL7g4pCcej~={(Cf`rkPF(jfUmq*5f&yY2NIQUC&t2m zCMyS+7@>gu4fxR|8ule>UNg6U+-eSf7+ry}qw*blReXmJ!okz}O%bILhmDr5rlo>M zAqjn?UxHL7vY7kEc|08U-=m+&GSA)nSh9O?${x(^Z(se6Ef(k;T#ew}2+cmpOQsm7 za&qNq$x?473k9QkX2!di{nkeTHc1yk@-g>@KMNuN8HQDCS-e~3&c}%SxWa{*L&LGZ zKkJ@=l&Odc&2IkZ*_yU((^EMHQ8MeEW3G8oq6~>1?6Xo?g2J(7Di%!|>l}aiX&}+| zT9SYfm~}UL&CAAv)^{cwJ&BqDHRcrhzmAFP+_kzQ1lC`B;hbcZGcvf!Aa=)>PZ1%S zHCZx9D+x#|`y=aaA$zB?s5j=Wfu`9>blJMTdc z!FfF9dqfqgTh}lG$o-Fc#Qv4llt{RxE{UtTX0f`+r*e>DJNn2{zz`*Il}CpG4FH9n z+=vfI@=UAttKKcL|60dN08ea6p2Kcr0lFWS7M0EZurWqk(HA%CN3&z1_c6NZuSCEYJ% zZE@_Ia$l{;po8W;XW4b659o(z0ZJitM!fs&_;w?7zjAUr3@wqG zq2WVsWs8(4=<2PIp4*VZ$Y7*(^$6D6lcPb--pJ*8xE^yE78P0nXoH4$3nD%?|d7{xZ?(OGiF zo(6N*j8p-uMZnDFcq{g7nh3mj1R`)$`{moiqS16)Lt=;2gZDMnqbiJkLaRVH`ke5| z0=$xfTx(kS)wIgs$~-Q$Dzv$|YlaRBhsna^FN%J|6K@OHqnB`|7Pq_@a5$k2ukg*@i23-9<84)Z9BLzT67%RvRF?1q^Tk6!^8{Cr2Zp{M z)kv&D+IZ1Zu-8)g?~h*E?4VrNJr}*rZ3`7vsigb#oz~)S0bAwVX)4SrWd_CsOc8-!+G&i9epE zo5;y%f(EwJ#Qfnl-p6ncD;nQZC|xXP9$sY@1gmBm9H=LR2>LUoh`;_WR$!1pCyyp0 zfqTRE;Vnl_k>Kw5g7BS^@9~LWZ+IV-9yx_X8U3Texd$VNg8fx$2R^Yk?Hm*7eqoFN z5>camHGYE4ebc*=f+)Zve}iMNF=GCZry$5Yhz4E|D?&62i`lBMyB%)=GbH~v+ zk0)Y76{(klbe{Rg2V}2$m8r#uo;0qi_@KBd9pH)i5?A=NbkwR{S1KKlNv{Q^q??<~ zp`XDTj|MBcJ3Lg7ff=`3XL?~qj6^l`46c8+cE>8d)*rjjbg`;5nO(3ydDYndAf~OY z=2dS28FF55JY*%Cv&o9ms^x!E^x2$Pqx zOWwz1;qBq%N;6q_-9{&6*FKl58C-whPrP0=MK$`=rGAYJd(c5PASPy+ly?`Ga_(#>>?lWjCgEo{s|=_=97d10qOx(Pofep)btWSQv~GrQ`@x^ zf;FjY{smu{=MS}Z4jXOmMteytRyC(;onHZE?OwqRdN=M&t60jgQi4vFg*w= zvi+KhUUQ_oEly{2JCCnDyy<(8hRI+Aa7%w9X2C_ekJ{>`GH| zQhIl2m+~{ZbcM|1r_vROeFn+1f1pqFxniGO;0_*42M8x`oTtfzD^Z z+GA?096g6;IGI`1xqsbrHJ$rcpG1ZeF@zb)ax!Kp%L#yhMckTC2>C5V)Uv#sDrq@s zyh8^O)EPlRa)cfbwaMJR764JB#(t5f&Q3HJb?=>yuiBL64Kls1j}0Nvgndy{#-!aQ zuk*&F*Rf^2l;lB_3ahlQ=l_p*NQv6 z9}YVrKYH-Lcn08jojM1-db*)8Im@2fKY(N)_bK)eJ4~DIseG8S&jG<+)dLLIE0A~F z$JlR^sylW`ZmZ+K!y6Mix79`~w-uRzy4F2cP2`IsWd@qSjwxoxc-7Sg9SPE^Y>q%! z6?P|G!cprKDx54Ed7K0Mp2jAz_JT`tA*G@6gXc@9NeLl2Nlqo92dslBV%`hZ;V|Y^ zAoIZLicXdz=CtVe_5*n_N4Ou}=`fx$6C4`9 zzm~Bi*qDHLQrdc`NGt1k)6SCUy^zswps7XQ}3%&zq3=n zk<{NlGDUCpn2-zx17DV_~ds+IQb5v^=j z=spA}>+fyn{ZVH#b7n_(EyTN1-M?{)`<`v_uBYMyweA}prWp|TZokt*4&|NvG&KHF z7UQ0~@DfpPjV9aG8c)Ha$ufM2Iv-usMCa%Ca5gL&IvB<_xo_Vr+ki5;k4UNc6zXZe z-hL{_SL~9F7u#pHANW*jR{Mb^ZLhQ+z-+wzKxLbmEPc3S+{zc)51bl1P2HD!KVg$& z0WxSHV<@u&j12;Pr^d3vMb6m8LMxFM<|VQAZhtd3n$`a1Ct?oS#FLXVsb`g=wEwmC zH_wP2hbc>5J`X0vyT@#_E_wGl6Mw(Ed?%v3o-3J!9n+kiGx*)WpUp9<|LjAh#tdC$ zUSzx<-Fp4CrAFS*!$8G*SKMZgM~soALBIKpRlSK=pb77A zsMa1Uwr}d@ub4#IaAsy4!a|8yS%?+iiTC=a>^H|*gK2JPG_QMkcqH?Xe>Io|3`69f zBzE>k5@XGM0X>R*Mj?__r2SOyN5zAD{t1Q^Mk?Xqk&Ffz)WyL>jW4kxSX}9gxfUf> z`5dgc^ zsVaRTl+T^d$!(=SR3Uze2xlMTKHg^72t~$~Wk@wM-s1^1dRl)Hie1|8r(9?P|m5ayaDGbqv ziY=%4yWataqf}9)WUzz3gWAah-;5(%qSRy>2KXg=H-n( zdS9LUP(t>9xw_cncxVyVmLfW*2Y?me@orG#<7L)cdQ^7cjq14U`mqpB8Y_(NSl)UfM>W!OF1x0qj{Gd zX0SDwXWM#L8}ti=bmCg?-S=|sF5k}H!m{LIu*+8QfyMglZuyODEo{{9BjRP5S39`E zXx_PFhG$NrdD=>pL}sF`2G*~O7R#^QCl7neq)|;6?~NXZ(s9~};#jDRFQ;+8v|1~R=@r4* zopjB8M-BetIy-P(V>&-@o6Zm1=IlQKYAfn2z)G;-(f$*~OS0{osp!A*2sGzMGl=#n zHr0JcB~~@@=PzvE`uqbYd$QbL?dd-ejOt2ZRI~6a+A|)(wDgfAuE@H?$i&CtKk^B_b(D+;S*lUf=b9>>sk40#v&krfNNZAtAPOFfNl@pRfR9&|W4CqR%s8$y( zPh32k8hU3|--e8;cjj!F{twsNRHo0lUqrB1tC~V}EXD+-&c?x&el^dpnz1byT;ZuT z|3%{50)gVN=S9GBEIsfbg}^r<=iOh~Z4)#Hh`;SKibcv}fU z=GsbPCu5MY+==F{`S~6e;Y*VT1|wL?pY=z9bcx`2j>ZMR(Na4wf8%QeOlHr>-_kKW zSSt_CHLDTQ@$=TpZ?GAl*Yb{r7t$kPVGZHG3!W*yEYIC}KqwLH80s66R~Cx8dacN| zFdso~%M8w;&78zS_I%E(Z*X8I*2=je&@Da|yinJAAvr)R7TYmf6sUURsa(U%Zog&(oSMuB6T>LGOUPfJ*a{T6pI=FNHTr0kC zbR-M$59}^D+~;(BD1_eT9X>Y2GD&$Kzt@PrYq-nzF-1bw1&SBiVmLX(0?J5|bgXDTxZVcv|KQ(170#G*Z+GEE9D}j5o8hbDtNi5IPs#oT(M-Jo_LfpmhT#1e= zZt_G8b&lA>K;(GMsQ`rF;%bT{D+A&Z82bbGc(>qV)Ia(19NgYwBpm8$NyhqdE6mxX zFC7wjt>`#Gl-^`)YTr_3R;^{V4p}BF;^c6kOB=>hBowo`zbO1WVCYOPH~O@)r2^9( zXZz}LHX^o%UG1yK+hXG)rcHj^r$ts+ZIwB*U@QHV~C$*3ECp z5c*yE?pwFY9Wk3Js~!YH`qCYn91pt&V-q6gr@V2BF`YDNfn=x^f&e%3~+0?9_4Ozn9}^48jM|aDE@N zagL+-I?k>cpt?Xkr_nj4?IjK$!o<9zf7<#4;rS9(96pv{;ID+Dq4UyWMB{BmwmJ^Y zBK2JC^r2((yK-z^4iPBF=9|x2{p5^wcm6ATHrZ4}cT*84I3R2Ga&%oNk%^xBFF_4* z!d@ySECJLXXRAxCkT`i(NSyjwGtmvQFr^&Yk$NiFN>FwAjr_?%KG_T5QINdKuAXf#Im;G%e1~y{ z4O2bw`dAT_^zLS>PBP+w!4KjYveoBbYbbCfaMFkatx&c0|n8 z+)5!qpU~4sH87=|5nl}mPUH&m&0~u>Mv4=Wo=1zmaSDBNy!*zr3{rB@z198aEXM({ z1-aGy)GMKVYmZTv*!0W=Dnt8PUzeA?RYEt}%0kDtCfE|H)T6~^gyh~9wpaO> z6pwC!X}FFC+_#JLhM{>J58A5&TzDr}1!+q+bZ2^0AN*Ix&k#HJ-_R?q*cVHmwYIip zbq&dd&dsU-WH)3h_(3v*9+vM>x57zV74Hdz*4kRX*)%_O94?ApcrcAPD&zX83n5U9 z!Bb?b4I9yqT0(d9xx@2Fh&yt+HX>Z&=)?sM2|k)sSMf{;bZiw-M`Ng_wHm%j=2OWq<+N=%SwV?rq*Mh^fV+JA}%L1ov&{RP?7dY7UxQi_j1P5 zpwf95gxL-~2bd$z(qD)(a`7i5J%qbMh{zF4Jq~e9en?U=xNrQX^h5h3t8ObTgXNW+ zGwhWd5U=Fcm4s}4X~ptdv-cUgnvsNI;jl0AoLpqV_#(>}kF=Kag}LH_%&w#mpw>ZS zfLhf%({e}tT%JruP~?uHmUee+Mf1}484PNeZ%^Z#44-2eE>Jk+cdTv`6k92ve(WL7RX|aE`KtEH9AS2kBT)q zQOl4NwY?C8Ze#9|5l1M z(s!T#{voVU&S9+4g^k0kkw3*6&HsvKjj*))K&(;T_`_MFoM->0tkKL2*65rJ*64K2 z8U>Eb8Nn6xXQvqa%ehgzs)Wf%v~;q0l})o1%0Q! z1>r1-KGai!UC6em?6Fgc>e1!CF~Px*T;n8OJ~p>R?88Yf5GrVWSx`yeGG4~Ph{@HG zUj`-1d^tv*;slW}cN;E|yWV(@6N28co2TA7^9NKzEntdQd&{&rFC}kuNy(PyGtcai zBqF1+%*#l&Fl+#rtiormYm3H|%*-zZf4V1^J3&~Xc{yj*Z4c?twq{u3uzqChS3S_%6yJi8HH8px73J+qKI^j{2f4z-jc zJ}d#y>SG?VaabCo=ow&`9D;xC+PW_=!&B=n-xeXY-{f(Gg~vb(icRBJVtGCx8E~Dc z+F!ln1PId`|re#}#v4h3A zDbd!LI_Aj&EeQI-TD*)R?;3l)qY$toLB zl68)bFL(rW-GU^m0xL`R9c3cP$~g#KxA+OMVo9=U?;S?hWv=8UE>)LC*IIV9{%a|8 zt?wTDW*S}7C6Q#2&A<||4N0;#*AAoWUBe^@i6_~{|Oi^rqjaL6*fzhRRKqoADXOo{s-rvHK{RD2ZplOUK7z_bWOsnOTXjS6I`G071Hz1aOvW31Fu-~q_NlUb=3z%_9{w`D`%lw{JTe33+rO9kJPAh=3plRMEU_Af z&_NCQ0p>tphgj%CU%uD)(LDlkKGiK2Qoed-pdopc(_uC$LM9?S301h(xq2&5YoH_i zk^of<0s)!XNxc;kIFrObi0jVzHsZPpBUwSXm$8lt!V3n!iL@?eFf@_Y?MuXjrYIO} zFF9$*3CJ58zhrY|ReMQ+Ejj>ci8YdOQp9}m8zP45f*>JaEK-8C$KqpXCt(dG>=j}Y zW+vBhot~bS3DZT$HG-CioZb{$&4!Rr;TnTNU z=A_P0VIaf8m+b3sj8fg zM-q)jqR}Nsw6llVY0%PDx00$`Fi5DBW*hvz!Fs|C4_hz3i@Ty4Ublf2v` zdaVKV3e_(wuFi|Gc&`YvfJKZ%&C2N~3aq(yJIsQJ$mI!Y+T+L*{4sJ}4MtCt?|Q>p z*x2u_6N|^-vq;_u#|6HWm)3E1-E@(Zxf|C&s>Xy6^c69zs0j@{k)RT*)4aJgFTSId2jC-mgH zi&~A)j+QbpAQ1ce_L5v%%vq*?>}9%6s8#CBjhM@Iof`A()*rV%f_!zyiuzCd|r&xg^u45sH{uK#W6re`t3j zy1N(iIJ_lyn=++`5}n8Y$UBaH$96FWiI~0rqzBJCqS>61_UafJw)~Q|=>p-E8fNB~stc#ZV?#DaL!WW$lqA z4Pnq{hNPj=k~BoLWmBRvf(ld^w1JC{GOrrB2lK_2pg{DWH?kbd~`v>=lL=;vY=sU{8z$Uixo|s z`GwD0l7_z#Z8p^Flro^+Y9k$Mdog_y&@sLfD$Q*LlNoJwK1b8 zB18x^L*7-n603|vHW0c@%_}^LAk*CNyF{GbDAWH=p^r zmO3mJAu&zNWzWqr;@ey)8yYPd&b}cfdC+&4ZOV{5yp-;gTiefI)pJ6rC3S!{k#(CI zF^kqtvZaI#bTx5p%5vs)uEbum_|_v^&P;sG+8ddcGvj*Gdt(H7Lz4()k7hkHDh}eJ z44K3Ee31(N*nbw=S#-EX$R4zu_#n9hb~NEJ-Opn~BXWlcmZW&Epg`HQgJqFKOP&a= zmW^dO7jhi%!S#0eU;xM}ijEg-#!}n*{hYj^3M1+z*k+NV2U&fG*k_U&1QZMecAf|X zB1xWYmzw#kkgp7P$5(+b0q;%x7GGbKY$!ldYsGnpyA&18!ig= zCL7;|u&M?~i+Fou0e~ZzNFU^R7MU^bOPtdpaOFj$7^~T}pB1DB?IdbtnUmD;;A*II z1c(^T5ZxX1e4Lu`zDlkc7cn?hsgYaijCYOUY@aKkk7lbE!Tsl%XJRM=u`rt{_n|KT z%C7`T^FF;rX2@RH+d3I)Z+}#BZl$R`*=vHuXIe_$yj;i+MK#rU8kAGhM{|S1})A z8%urN8)iAWP3MNPF&B@Ojx6;>-mOTT+IAA3eg}ZYq&*N)~Y{~0D zDfbIXv1g)`iK4XDS&{^;Nb-tLf+lj5{ZO>>HU<$SgAn#tuuExP@=C!jrD^Q)5}$oG zJ-!bGyD$VgJ%nB8rBD^>b!%Mblg0cX?6SC*k!bAlm%Gx~r73OXRcIM`)zz9eePcw_ zvT*MaP|Mt|Bcm2@$z4xqlydDhJ&jQdt(4}OSL;52R@|Lmc^jJq%Lt5+E8GlYr@mG4 zZg@}jUB!LIDhd+-Ax(@YNb2^sD{RRIvg&P>Ra{0m;oZ?Ha^VaTT|UruK1BL#4is&g zFT{GDu*GAOpn%rkT!+}BXeTFvG?tr)I|8i_vH_NZ8iMg{SAddy>J|6x1SNnA5^GWd zba`TvIp)U_$bM|yB&02CU^=%v4(N6HH@kBOOHf`p@*=An(6%ML!A#Cq4T=* zRg{)~d+0Zqz#+_wr>~x;s?w=ya-;{LZg=Ospp?)xC{85=3M;xdwWeXtE}}`aGcXy? z;mdofVtHk0S?}3o=;&EBu0jpy)qRL>buMX@6L^w-{Bp-a101uS33a6Y9>1Dp3T=f z4aIEA&UHMf8B9knyxZ)Exl}5ob?H9h0lMGq{-W4%GMKQ=J2_XLd`+G}G0~*VSM*pc zc}Ok-DtBy;m=(LFWu}$~au}qae}d<7_K84Xd1(3UHZdbiAAS8Nh2Cg8L4~Vx-*EIc z41II+pEN3UyhL||0S`AMjR_3?w21kwKeNB#kfo`Y^eRHuNk`LF_Fd0?{2jyHxsr?I zJTWFK3O(h%@%zG?ifE)YxD0dN?muSnd1T3EcxU7r-4bJc_LRrrXE}|EuLTAqnv7ai z81F4Cct$7#u~r0#64T9Zb<>I6iF4_Mcmw=_iAkKP+PnzB<%}J+M^Djnp*vE_>N`@( z>KnAOdTip3VP*9lDP{EyT3OAjl(PC(OIa=U?$P&FR)1i#gW*1>Xi7QO%rj)RTP-HC zmyAci6tfe5%ZQD^yz|W1$6?xL2wjIW@EqkxDXd#k7DlJsA4TTj zF_)I{tFkrw*qq5emY7?fv)IQnN~GAw13%-)6Z%PL|6F-Kq_Ae;E#5Kb2o4x`aIV5T z{z~%J_eu275xGaLw+;*U_&)X4ZQ~B*9y2^JgnLXb8PZ#qA4zY$<%gPsB=m}KkjZ)% z3}hzvxNEf>eRyDK?r~b1+=&N9N^d@{>{UOuu+x+`ZL0mUkZpK`;zQ^}-kpO&fg=-F3;~Jmjz+hSpvGiqjG*U3R_N zK3Ek=EXo7wCgO%>#Im)AN&k54hXAY?1=DoXhstJj?w7+l>Sv=AfjJ|yG)ij9aeuKL zb0#D*LS0zzJRC+KtIl7Fl@Z8li`uQav2-oiWf@H_151UcJWT~bHsCz4)MhEUx-i*{ ziI33aTLAHtTbQuxvU-CF0&|Ymx*(s z_E^i1wq@F7vP&)N9s!$A$cZTmmbcU_XQvx9xB9KiBbhNC;TPY535MtLY|@(>uE z)DCICQz%IoAKuLlJ+L+e*v|!JMbvKer;fis-sVw>P|_kGLAPVBgGgLJwsiS2X`B_> z-nyHQBH%_SU~*MeIUU^%l*Ni8PFH$h5soLKEWK1|g2$>AYoBNoO%w>Lth{NEE43ioI8)^}^yKnpp zD^yjV?vpArqi*T80zKjj;kpvVSgo}y8BXAEtfDr948BMcd(Uw zTO6;eop4k|7RTjEb6guH_2={WEo2HEk;`Tif$+vvlTH64?hL!colRLjt2x<^I@(AL%J zNqp@W3`xtHI&V(Pnm((32e|p7)t1a@yCrdAAIY z5k!!q!uI}Q@s(wKGOuUY7C-&ugIXPY^xa1@@X-u>Gy@;az(+Ii(G2`wngOUM$?gcd zVYnyT-IGf_@y{8ywkc{%qLh?`hGR@^!fqZ5opsreO>yS<<9l=(F2X6cc^qwCN1HEn zK}#dNoD&7`^yNc#kpqybPCM$A@}O&SrE6n$N7tHTDdwfvz;#*yL^K%ZBM17&V=St* zJCF2{^(tu;Cu+QjHcx2m%Iw}s?P2qNQeZXcHX!%B=0)FwG83%~Okh^BGP|iqOuC6{ z1Fyh^-|YBTE$V<8K3`-*wrKST#Mr20>KR#?CDTY|Y<;=SoWS?E7PD+Cd>m6eR$UW} z4>+QE#f})V;b5{Yr~COa$&y>qjOQ?s?GG@*vY@>(SZCgUmkh?!KY>D&NK7BB4624; z=*6`&RHZBT@pS$&cXFMfE^?Kk)2Znu$Y}gUd+f#08{nhlbCNX?g_sU}(Ws`V>kT?u zgQZgFz`ALeGd{d(>Y@ZeBAODjjQKr0{EIwn>5sShY>jiG<0UZ1CwJIw{o@*lD`x%@ zhX>+aicGsY4;~HBvtemEwW!7u^XQs0Y6G17nAGa{hTdMW0kCP<8TAwc|2U1tO?&hT z`Daet%#KdfiQ{_>d-w(?$x})L@zvxIIt`+qco)RujjzU<{Dk(^Q*ANtF9jld?J)JW zt@}1QJqcrSkAAjw@doQIUD>`bP+9tBv()?^ORrzkKbQ7V(DN%WP@TBOm#FdgR!W<; z_<+-WgG3l0pm8)tFw9`*75u2m0BfkK2^u%QxYX(XPFD}g%eJ8V#($)2vMHyw9^ZxU zz>CBF!GL#&0Re6K2@+w1+Jddm@wuK!vI9NCr%l1Ovy+uM@O@rB%{Q;$Q_72s0;#af zySqa6xVMbBo>D5*6l{Gwm1c)8R_2&zrCW=hB-@Q=d1?E6Y)-}xH`rjVq&^ruooQ%( z&+ns7&&~XOjlWYEoXzgg(T2y2W&+=583ARda>NIWXl{I9T=e6_j4f^nwoPkHUY~=! zim)?JF^)=h4IK=%1Y7q?cotO_m=ApPhP4C0QC3#qt)QzxO(qoT6!=+JyxS-~E9wgK z8`>t}P@8)6bRGdq=>8QvN(_}&ta*^}w|O@jQ%Fe@>?&z@mp?dD{RP|KJ&V+ik>kT? ze8SfgQv07&5&<%$jEg!;#*p z*`M*OV80&8a7XSL$9w!qHgEK_zd0i|ZexT5C0t~8JQ_VF+~1emov1P#JDKLh1SYz9 z^){l;$szO2A8D1lK<@mWIp)Og$SuxUF<))-W~-3TT%`-KH>HsK_EJ01q$9dX^FQ&V z(I1F+Nx97TO#94;xjp?j_7ax+xOQxdzd0s${I4%1vh0%L;@J6GcQxFh_?wQ{Y3|$Y zB{ea!Rg~IGE{$PKUpl5_E~+{L>ymwJr=4Em+U@Aimf9S#Tq$3gDqoW-U#=t4W=$K6 zKV(!<24kK%9c4k>;=FJhV#~tChemvea;e8^7|G~vKmIn=Xu$vt`fgPM(GBJA8 zcueFw21^GE9@RRpa_?XBTk|ju)&knF2ulrv^-gjHP~c; zVL0J&ER(7v0!_a33Vi6RR~HjG*?8lrX}fTWe_>3~Soc46P1spG*y0?-l;CXh&CRky z#7OmO@mQYkZ6^qobpn-(-LIr2?YtfwjWn_jbn7J=JC)~@G7#O_P_@Us>0&v*7`HS# zlTrcjugrstJ;YpWa!3ITfqTRHoVAW3Ozb3?8u?Nd@|@W~hK}pg2ysR~ERb2h=MS{< zJ=^bz>3wgaBltXbb?TczF=4M)KheJpiby%jSf!W^;kk^_)tGE0CbvxTfYCNRX@rSF zPTWd}VN(0-2AMF`er?{F(?7Yni^_O~wQt0{RujRJf^j@a`U<-GuronpUVIhs@k7dy z>sl?i#RZwrh(En5=&h2j*m|p8(?5daxzTf`vel(VqG}*nwJ$QKA+gF#H10`U`nGA_ zCMyU;MJHO>6s_{%jPi{nHI=f1t4#CGBNXo~)2&n_7J1^m`JCIn5S`rABn!7J=(qe; z)LM_a#4@;I`Lza#ILwloFCfduZ;td>bP!W{K&%=Z1Y}c)cB&lEbf`X6<5JJ5uxCrI z2;6aZYHvlAz_W3FlK$7{!hBvcaI?JJ)5)#r-R8 zV>fxE{Z=o1d1&P%b%6YzJQIj#$own)j_=49tr8OzBwoBgyF{b`VuGQE-J7N`Z4mPT zF=6zlKPF5WcB&XWb+s)>#y|@A6cd>KHFeEC<|x1@2yi$qbOup=D~;&s$x?Ty%DHli zz*!Di;~omgpdb)qZVtx)k>AYUSc@tBA*y>m9SH3vuDjNP#k+Odgn~!a@#;#>%(m08 z$68~kvqJBzJBImtwZ)}=r(RaC0O1~OC_$Fq?tCI=Jtdt^7Oo^TKZ+~3Mr?kWVX_M( zE6I<$(tw9Vk#g<7k37loHjj8i5eMc0%vaa934#k_DbEefP_?Sa5d#ZJUy$eiPEW5a zs_dBjka=|f>QPy>3@Z*ZY)pI5_{h!z)yyyWjXD2^Zw#)#S8%~mh|3QP>HIIM2l)ew zBId3Zn?%$OLyd1x3*pj=1Rd(rELwx_PO^by;hH{|i2G^&_hL``8iE-5m7Q!0gy=3c z$g~if7+>SEwIOh@TwLc!Q0w1f9hwTNDH*RxKYfcpffdv}eO`vHce;~be68HIz!EK5w@C58Ax$BJys$TR44}y-C#LTH9O&52meeg%NXiG-sT3i81srRudnz zM@#DFnBUT&N1c)ljhwWp(a~N&5G1`MtZBWu0r3wF2v*b>BKoubEkoQI@)U{muFt{0 zWn$nXz$BQ1{8g+T^bD(#SYssCI63s(9Y3e{aB%L9o4F`nu^28? zWj-~_pSZ-Y9!TJ(u4M{SM5f@xgPPD({Zq&e>h3o}PsGO6n)jY4bBg1vyW^A69mGNs zuNCs5l+b=M)k9R-B*FL=RR%uHq{rmMVxdy>*mlM_0zD>3O4#HpD>WoL*Hws5;Tq_3*fA;F0I z?UB4IUODWgkjp$POHWo)PYUafDA5>AeUq*FPKLH*@*x`qFAD&SP-88qk%-M~NN>S2 z$T=!}>?O``2^{GuUKng!l3bgk&Xp81u{o;7Cz*91K5(bteRPI}--_wK*aziAYUh|s zu|uI!0`f7oH6psofg($nAnJT-)YB;hP19?H76x0tRX@i(%j&PiIY>H;UMoDr!ucbM z(nnl(aGQv1awKYQSpbB!49vgU74P*Xu9B#z{^D!F@auqdr1*jh1m?A8MNmBi+JbIj zE<|o8Cqqz^{65$@VVYv+DUVuiaL@!oudka3h4o}hw&tYp-tFSE{9>ZIi*f&CkdaR( zf)#|RUQ%zWi->I<6Yp~IhA0vILCFC5jC9p0!!Sg+Mu<lq7#=A#n^tE zm=}5aNwRv5DQu_QoGhg*uf<4oy!q^{R+;e>S-)F~co88t56PAH#!Bch6sOS0jHM_- z&XoH!-R#m~57PAWI&oC)JV{X4F7k(BorV}ihF)k**e6L0Rg61XbPA9WmcIrwpc8t# zkZYU&L4Iz~y)v=1%qpt%L{q7a%0x6YRnprRn%}ebOB%JLb8`L-nadF&?&uF$4i_OO zgyT@eM-IEx@?i8d5#=)mzx>JKG?-WXyEXCoTBiRe%#UPsW=KJ6bsAWm3sZ$Ah}{3b zp0Jju(m#USUu$a2hb$b91|=n%RNVw20f3;AM@bg5&=6*9{&Q1D#@QShwoQoYdC_+g z=Ze1gEG_AaWmGOm-f4asJ{a^vuxtI|D~Q41hyI|Po@e-bjlV}zzjB@a+r{{j$UP^~tz}Z`a>T~W9J0bEP}7O@NxIY zjwKRy(Yj#hz>2fEI%C}lp#v+4_2;LK;^G1RKP!$6o3o^#oYi3KPVp@WsJIMj8DMiH{r-17VIA zvwMIazl|Ux`qS7f@QSBTg7joyM*yXVFAH|{S`mg)Lx&&qCu2EmJi@dM+c7sL-3(PGWPih?R9zCB060AadrD@$IjW%wv6 z_6Uvy-%g&Lwu1YD{vDQJRwThh{ljU*ZE${O~6S zujk+UP6H3|=k*r#sZ}{@U7kMdW;Hg{o8Nv)U>JtH?IcOzQ{_QChvRqs;KRICyUjNJ z9*fMFKfcaslRQ3JKZ=HwGGaaM<+Qk!+2Y_d5)}q4QKCXp)u|dkR4>%8PToek^|(I$ z46qp?{zkbunJl2!S>LFZ2G!?sa4l=ACM^2pd6%dHJ&3&cIsh_A-|6_^D*xarp+SP? z4rpZQTh}^g%o%T^=VR2nQ0no$_Sn60E;r3rL>?j!_)K5oVg_y`X5#$dT$GsUe1Cz< z>(!q49|q!kN+ha~i~KwyN-EU5VP$~rzS|jq5YK#9oS4~#eNgSPNxCy%SVfA*I0dP2kVrquCq>wLB;AwkDmVkQl~-JY81EP2GgT@4T>fSqAgG8UK^cR@^LO7U z-dOaH_rA^X)m{$l8~NU%F9K3b4<}6U7fe}cHJqj=&SG~5Y?`Qu9v^!3Fp>g8OmEbs z-lRD#eM6d~$%tQz6>>}`$_hR0?hrzQYJCO!rR&n5ut_3XOHmiG#WduVhN^|CBUH`^ht4spe@o3{ zK|5-BnlMnD_xqz8SkOWoQBvDICGv%iLI6Bp{c&Lr)k+jRYd#Qy&t*Oq5Qvz$PssddQu4iQ^=W=33JJwbQMO3EZ$3##n>%iX!2 ztKoTz`9cq`JE?VH=&4mcq9i{o6=~>M$nz@j{!=ZbawyNKvlQ_^`IjL@{8?n0JX{fP zM@Fk2w8$d_moc@L}PFRm_%E>J5)$djlcr$qGZ zl>9eCzC&h2E#DzC;)wDcFnx`)?^zj@thp8zsP5EKvte{Xf_!8$?&O!HP)fohHtCjx zM^elQo^p4J)W?$W{7_0-5}ws52~Sa4!ZV13rws{@*vt5l@O)=Nri7^Jb!M&eI@!p~4n&q{C&?1*3(IVQ6^X_P>fD7C45Soai-g*htRN&xqEaQ=(Qtw8$TSxq7ju##*l}V z4J?!gMd)m9b2e5?MRpR@M|HUfPBxSWk4v!@xcIe|nrC1i2rV@&X{_vip7>1>^NUeD zU+^u`f)*shCoXEz`KTA7n~{dm%k(JG%SfN#Sv+-G)9Q#w1elL+!Wgf@0}2)H!+qns zlu54gB-aM%q{Ir*`b8mV*≦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

      %Haa`r0org2xogPb6({C148%C#zhvkMX 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%0DYqU)k{Xp^pd^b2}2Xwzb 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 ZC?@R5GS68#x! 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

      d0H}cmT6nAaS_Kp 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

      RdGPSv{}R|5pv$%kP4|fX1QQ_mjWkRal+1wq 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 z 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 Date: Mon, 29 Jul 2024 10:53:00 +0000 Subject: [PATCH 07/42] Updated SQLite version to build/use to 3.46.0. --- chevah_build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chevah_build b/chevah_build index 7bb57d31d..d5d2815c8 100755 --- a/chevah_build +++ b/chevah_build @@ -23,7 +23,7 @@ LIBEDIT_VERSION="20170329-3.1" # More at https://openssl-library.org/news/vulnerabilities-1.1.1/index.html. # Some fixes can still be found in the OpenSSL 1.1.1f sources from Ubuntu 20.04. OPENSSL_VERSION="1.1.1w-chevah1" -SQLITE_VERSION="3.43.1" +SQLITE_VERSION="3.46.0" # Python modules versions to be used everywhere possible. PYSQLITE_VERSION="2.8.3" From 077d6ec7ca404627b4fb207a834ad23e36c32df8 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 10:24:43 +0000 Subject: [PATCH 08/42] Python hot patches for some CVE issues on all platforms. --- src/python/CVE-2017-18207.diff | 365 +++++++++++++++++++++++++++++++++ src/python/CVE-2021-4189.diff | 260 +++++++++++++++++++++++ src/python/CVE-2022-45061.diff | 72 +++++++ src/python/CVE-2022-48560.diff | 127 ++++++++++++ src/python/CVE-2022-48565.diff | 136 ++++++++++++ 5 files changed, 960 insertions(+) create mode 100644 src/python/CVE-2017-18207.diff create mode 100644 src/python/CVE-2021-4189.diff create mode 100644 src/python/CVE-2022-45061.diff create mode 100644 src/python/CVE-2022-48560.diff create mode 100644 src/python/CVE-2022-48565.diff diff --git a/src/python/CVE-2017-18207.diff b/src/python/CVE-2017-18207.diff new file mode 100644 index 000000000..67d1c6ee7 --- /dev/null +++ b/src/python/CVE-2017-18207.diff @@ -0,0 +1,365 @@ +diff --git a/Lib/aifc.py b/Lib/aifc.py +index 981f8010690e00..880ad50a48da67 100644 +--- a/Lib/aifc.py ++++ b/Lib/aifc.py +@@ -135,6 +135,7 @@ + """ + + import struct ++import warnings + import __builtin__ + + __all__ = ["Error","open","openfp"] +@@ -316,16 +317,16 @@ def initfp(self, file): + except EOFError: + break + chunkname = chunk.getname() +- if chunkname == 'COMM': ++ if chunkname == b'COMM': + self._read_comm_chunk(chunk) + self._comm_chunk_read = 1 +- elif chunkname == 'SSND': ++ elif chunkname == b'SSND': + self._ssnd_chunk = chunk + dummy = chunk.read(8) + self._ssnd_seek_needed = 0 +- elif chunkname == 'FVER': ++ elif chunkname == b'FVER': + self._version = _read_ulong(chunk) +- elif chunkname == 'MARK': ++ elif chunkname == b'MARK': + self._readmark(chunk) + chunk.skip() + if not self._comm_chunk_read or not self._ssnd_chunk: +@@ -465,13 +466,18 @@ def _read_comm_chunk(self, chunk): + self._nframes = _read_long(chunk) + self._sampwidth = (_read_short(chunk) + 7) // 8 + self._framerate = int(_read_float(chunk)) ++ if self._sampwidth <= 0: ++ raise Error, 'bad sample width' ++ if self._nchannels <= 0: ++ raise Error, 'bad # of channels' ++ + self._framesize = self._nchannels * self._sampwidth + if self._aifc: + #DEBUG: SGI's soundeditor produces a bad size :-( + kludge = 0 + if chunk.chunksize == 18: + kludge = 1 +- print 'Warning: bad COMM chunk size' ++ warnings.warn("bad COMM chunk size") + chunk.chunksize = 23 + #DEBUG end + self._comptype = chunk.read(4) +@@ -535,11 +541,13 @@ def _readmark(self, chunk): + # a position 0 and name '' + self._markers.append((id, pos, name)) + except EOFError: +- print 'Warning: MARK chunk contains only', +- print len(self._markers), +- if len(self._markers) == 1: print 'marker', +- else: print 'markers', +- print 'instead of', nmarkers ++ warning_message = 'MARK chunk contains only ' + str(len(self._markers)) ++ if len(self._markers) == 1: ++ warning_message += ' marker ' ++ else: ++ warning_message += ' markers ' ++ warning_message += 'instead of ' + str(nmarkers) ++ warnings.warn(warning_message) + + class Aifc_write: + # Variables used in this class: +diff --git a/Lib/sunau.py b/Lib/sunau.py +index b53044d22b1648..b5d83ea4b464c6 100644 +--- a/Lib/sunau.py ++++ b/Lib/sunau.py +@@ -194,6 +194,8 @@ def initfp(self, file): + raise Error, 'unknown encoding' + self._framerate = int(_read_u32(file)) + self._nchannels = int(_read_u32(file)) ++ if not self._nchannels: ++ raise Error('bad # of channels') + self._framesize = self._framesize * self._nchannels + if self._hdr_size > 24: + self._info = file.read(self._hdr_size - 24) +diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py +index 92bbe7bc75da93..f21798dfe4bc7c 100644 +--- a/Lib/test/test_aifc.py ++++ b/Lib/test/test_aifc.py +@@ -7,6 +7,7 @@ + import sys + import struct + import aifc ++from test.test_support import check_warnings + + + class AifcTest(audiotests.AudioWriteTests, +@@ -216,47 +217,68 @@ def test_read_no_comm_chunk(self): + + def test_read_no_ssnd_chunk(self): + b = b'FORM' + struct.pack('>L', 4) + b'AIFC' +- b += b'COMM' + struct.pack('>LhlhhLL', 38, 0, 0, 0, 0, 0, 0) ++ b += b'COMM' + struct.pack('>LhlhhLL', 38, 1, 0, 8, ++ 0x4000 | 12, 11025<<18, 0) + b += b'NONE' + struct.pack('B', 14) + b'not compressed' + b'\x00' + with self.assertRaisesRegexp(aifc.Error, 'COMM chunk and/or SSND chunk' + ' missing'): + aifc.open(io.BytesIO(b)) + + def test_read_wrong_compression_type(self): +- b = 'FORM' + struct.pack('>L', 4) + 'AIFC' +- b += 'COMM' + struct.pack('>LhlhhLL', 23, 0, 0, 0, 0, 0, 0) +- b += 'WRNG' + struct.pack('B', 0) ++ b = b'FORM' + struct.pack('>L', 4) + b'AIFC' ++ b += b'COMM' + struct.pack('>LhlhhLL', 23, 1, 0, 8, ++ 0x4000 | 12, 11025<<18, 0) ++ b += b'WRNG' + struct.pack('B', 0) + self.assertRaises(aifc.Error, aifc.open, io.BytesIO(b)) + ++ def test_read_wrong_number_of_channels(self): ++ for nchannels in 0, -1: ++ b = b'FORM' + struct.pack('>L', 4) + b'AIFC' ++ b += b'COMM' + struct.pack('>LhlhhLL', 38, nchannels, 0, 8, ++ 0x4000 | 12, 11025<<18, 0) ++ b += b'NONE' + struct.pack('B', 14) + b'not compressed' + b'\x00' ++ b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8 ++ with self.assertRaisesRegexp(aifc.Error, 'bad # of channels'): ++ aifc.open(io.BytesIO(b)) ++ ++ def test_read_wrong_sample_width(self): ++ for sampwidth in 0, -1: ++ b = b'FORM' + struct.pack('>L', 4) + b'AIFC' ++ b += b'COMM' + struct.pack('>LhlhhLL', 38, 1, 0, sampwidth, ++ 0x4000 | 12, 11025<<18, 0) ++ b += b'NONE' + struct.pack('B', 14) + b'not compressed' + b'\x00' ++ b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8 ++ with self.assertRaisesRegexp(aifc.Error, 'bad sample width'): ++ aifc.open(io.BytesIO(b)) ++ + def test_read_wrong_marks(self): +- b = 'FORM' + struct.pack('>L', 4) + 'AIFF' +- b += 'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0) +- b += 'SSND' + struct.pack('>L', 8) + '\x00' * 8 +- b += 'MARK' + struct.pack('>LhB', 3, 1, 1) +- with captured_stdout() as s: ++ b = b'FORM' + struct.pack('>L', 4) + b'AIFF' ++ b += b'COMM' + struct.pack('>LhlhhLL', 18, 1, 0, 8, ++ 0x4000 | 12, 11025<<18, 0) ++ b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8 ++ b += b'MARK' + struct.pack('>LhB', 3, 1, 1) ++ with check_warnings(('MARK chunk contains only 0 markers instead of 1', UserWarning)): + f = aifc.open(io.BytesIO(b)) +- self.assertEqual(s.getvalue(), 'Warning: MARK chunk contains ' +- 'only 0 markers instead of 1\n') +- self.assertEqual(f.getmarkers(), None) ++ self.assertEqual(f.getmarkers(), None) + + def test_read_comm_kludge_compname_even(self): +- b = 'FORM' + struct.pack('>L', 4) + 'AIFC' +- b += 'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0) +- b += 'NONE' + struct.pack('B', 4) + 'even' + '\x00' +- b += 'SSND' + struct.pack('>L', 8) + '\x00' * 8 +- with captured_stdout() as s: ++ b = b'FORM' + struct.pack('>L', 4) + b'AIFC' ++ b += b'COMM' + struct.pack('>LhlhhLL', 18, 1, 0, 8, ++ 0x4000 | 12, 11025<<18, 0) ++ b += b'NONE' + struct.pack('B', 4) + b'even' + b'\x00' ++ b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8 ++ with check_warnings(('bad COMM chunk size', UserWarning)): + f = aifc.open(io.BytesIO(b)) +- self.assertEqual(s.getvalue(), 'Warning: bad COMM chunk size\n') + self.assertEqual(f.getcompname(), 'even') + + def test_read_comm_kludge_compname_odd(self): +- b = 'FORM' + struct.pack('>L', 4) + 'AIFC' +- b += 'COMM' + struct.pack('>LhlhhLL', 18, 0, 0, 0, 0, 0, 0) +- b += 'NONE' + struct.pack('B', 3) + 'odd' +- b += 'SSND' + struct.pack('>L', 8) + '\x00' * 8 +- with captured_stdout() as s: ++ b = b'FORM' + struct.pack('>L', 4) + b'AIFC' ++ b += b'COMM' + struct.pack('>LhlhhLL', 18, 1, 0, 8, ++ 0x4000 | 12, 11025<<18, 0) ++ b += b'NONE' + struct.pack('B', 3) + b'odd' ++ b += b'SSND' + struct.pack('>L', 8) + b'\x00' * 8 ++ with check_warnings(('bad COMM chunk size', UserWarning)): + f = aifc.open(io.BytesIO(b)) +- self.assertEqual(s.getvalue(), 'Warning: bad COMM chunk size\n') + self.assertEqual(f.getcompname(), 'odd') + + def test_write_params_raises(self): +diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py +index f6828683521df1..1550600495fa78 100644 +--- a/Lib/test/test_sunau.py ++++ b/Lib/test/test_sunau.py +@@ -1,6 +1,8 @@ + from test.test_support import TESTFN, run_unittest + import unittest + from test import audiotests ++import io ++import struct + import sys + import sunau + +@@ -96,5 +98,41 @@ def test_main(): + run_unittest(SunauPCM8Test, SunauPCM16Test, SunauPCM16Test, + SunauPCM32Test, SunauULAWTest) + ++ ++class SunauLowLevelTest(unittest.TestCase): ++ ++ def test_read_bad_magic_number(self): ++ b = b'SPA' ++ with self.assertRaises(EOFError): ++ sunau.open(io.BytesIO(b)) ++ b = b'SPAM' ++ with self.assertRaisesRegex(sunau.Error, 'bad magic number'): ++ sunau.open(io.BytesIO(b)) ++ ++ def test_read_too_small_header(self): ++ b = struct.pack('>LLLLL', sunau.AUDIO_FILE_MAGIC, 20, 0, ++ sunau.AUDIO_FILE_ENCODING_LINEAR_8, 11025) ++ with self.assertRaisesRegex(sunau.Error, 'header size too small'): ++ sunau.open(io.BytesIO(b)) ++ ++ def test_read_too_large_header(self): ++ b = struct.pack('>LLLLLL', sunau.AUDIO_FILE_MAGIC, 124, 0, ++ sunau.AUDIO_FILE_ENCODING_LINEAR_8, 11025, 1) ++ b += b'\0' * 100 ++ with self.assertRaisesRegex(sunau.Error, 'header size ridiculously large'): ++ sunau.open(io.BytesIO(b)) ++ ++ def test_read_wrong_encoding(self): ++ b = struct.pack('>LLLLLL', sunau.AUDIO_FILE_MAGIC, 24, 0, 0, 11025, 1) ++ with self.assertRaisesRegex(sunau.Error, r'encoding not \(yet\) supported'): ++ sunau.open(io.BytesIO(b)) ++ ++ def test_read_wrong_number_of_channels(self): ++ b = struct.pack('>LLLLLL', sunau.AUDIO_FILE_MAGIC, 24, 0, ++ sunau.AUDIO_FILE_ENCODING_LINEAR_8, 11025, 0) ++ with self.assertRaisesRegex(sunau.Error, 'bad # of channels'): ++ sunau.open(io.BytesIO(b)) ++ ++ + if __name__ == "__main__": + test_main() +diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py +index 9513df459386b2..9d01eacc539a43 100644 +--- a/Lib/test/test_wave.py ++++ b/Lib/test/test_wave.py +@@ -1,6 +1,9 @@ + from test.test_support import TESTFN, run_unittest + import unittest + from test import audiotests ++from test import support ++import io ++import struct + import sys + import wave + +@@ -119,5 +122,66 @@ def test_unseekable_incompleted_write(self): + def test_main(): + run_unittest(WavePCM8Test, WavePCM16Test, WavePCM24Test, WavePCM32Test) + ++ ++class WaveLowLevelTest(unittest.TestCase): ++ ++ def test_read_no_chunks(self): ++ b = b'SPAM' ++ with self.assertRaises(EOFError): ++ wave.open(io.BytesIO(b)) ++ ++ def test_read_no_riff_chunk(self): ++ b = b'SPAM' + struct.pack(' (address, port)""" + if self.af == socket.AF_INET: +- host, port = parse227(self.sendcmd('PASV')) ++ untrusted_host, port = parse227(self.sendcmd('PASV')) ++ if self.trust_server_pasv_ipv4_address: ++ host = untrusted_host ++ else: ++ host = self.sock.getpeername()[0] + else: + host, port = parse229(self.sendcmd('EPSV'), self.sock.getpeername()) + return host, port +diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py +index 8a3eb067a4462b..a1d725206de7c3 100644 +--- a/Lib/test/test_ftplib.py ++++ b/Lib/test/test_ftplib.py +@@ -15,6 +15,7 @@ + except ImportError: + ssl = None + ++from contextlib import closing + from unittest import TestCase, SkipTest, skipUnless + from test import test_support + from test.test_support import HOST, HOSTv6 +@@ -67,6 +68,10 @@ def __init__(self, conn): + self.rest = None + self.next_retr_data = RETR_DATA + self.push('220 welcome') ++ # We use this as the string IPv4 address to direct the client ++ # to in response to a PASV command. To test security behavior. ++ # https://bugs.python.org/issue43285/. ++ self.fake_pasv_server_ip = '252.253.254.255' + + def collect_incoming_data(self, data): + self.in_buffer.append(data) +@@ -109,13 +114,13 @@ def cmd_pasv(self, arg): + sock.bind((self.socket.getsockname()[0], 0)) + sock.listen(5) + sock.settimeout(10) +- ip, port = sock.getsockname()[:2] +- ip = ip.replace('.', ',') +- p1, p2 = divmod(port, 256) ++ port = sock.getsockname()[1] ++ ip = self.fake_pasv_server_ip ++ ip = ip.replace('.', ','); p1 = port / 256; p2 = port % 256 + self.push('227 entering passive mode (%s,%d,%d)' %(ip, p1, p2)) + conn, addr = sock.accept() + self.dtp = self.dtp_handler(conn, baseclass=self) +- ++ + def cmd_eprt(self, arg): + af, ip, port = arg.split(arg[0])[1:-1] + port = int(port) +@@ -577,6 +582,107 @@ def test_makepasv(self): + # IPv4 is in use, just make sure send_epsv has not been used + self.assertEqual(self.server.handler_instance.last_received_cmd, 'pasv') + ++ def test_makepasv_issue43285_security_disabled(self): ++ """Test the opt-in to the old vulnerable behavior.""" ++ self.client.trust_server_pasv_ipv4_address = True ++ bad_host, port = self.client.makepasv() ++ self.assertEqual( ++ bad_host, self.server.handler_instance.fake_pasv_server_ip) ++ # Opening and closing a connection keeps the dummy server happy ++ # instead of timing out on accept. ++ socket.create_connection((self.client.sock.getpeername()[0], port), ++ timeout=TIMEOUT).close() ++ ++ def test_makepasv_issue43285_security_enabled_default(self): ++ self.assertFalse(self.client.trust_server_pasv_ipv4_address) ++ trusted_host, port = self.client.makepasv() ++ self.assertNotEqual( ++ trusted_host, self.server.handler_instance.fake_pasv_server_ip) ++ # Opening and closing a connection keeps the dummy server happy ++ # instead of timing out on accept. ++ socket.create_connection((trusted_host, port), timeout=TIMEOUT).close() ++ ++ def test_with_statement(self): ++ self.client.quit() ++ ++ def is_client_connected(): ++ if self.client.sock is None: ++ return False ++ try: ++ self.client.sendcmd('noop') ++ except (OSError, EOFError): ++ return False ++ return True ++ ++ # base test ++ with ftplib.FTP(timeout=TIMEOUT) as self.client: ++ self.client.connect(self.server.host, self.server.port) ++ self.client.sendcmd('noop') ++ self.assertTrue(is_client_connected()) ++ self.assertEqual(self.server.handler_instance.last_received_cmd, 'quit') ++ self.assertFalse(is_client_connected()) ++ ++ # QUIT sent inside the with block ++ with ftplib.FTP(timeout=TIMEOUT) as self.client: ++ self.client.connect(self.server.host, self.server.port) ++ self.client.sendcmd('noop') ++ self.client.quit() ++ self.assertEqual(self.server.handler_instance.last_received_cmd, 'quit') ++ self.assertFalse(is_client_connected()) ++ ++ # force a wrong response code to be sent on QUIT: error_perm ++ # is expected and the connection is supposed to be closed ++ try: ++ with ftplib.FTP(timeout=TIMEOUT) as self.client: ++ self.client.connect(self.server.host, self.server.port) ++ self.client.sendcmd('noop') ++ self.server.handler_instance.next_response = '550 error on quit' ++ except ftplib.error_perm as err: ++ self.assertEqual(str(err), '550 error on quit') ++ else: ++ self.fail('Exception not raised') ++ # needed to give the threaded server some time to set the attribute ++ # which otherwise would still be == 'noop' ++ time.sleep(0.1) ++ self.assertEqual(self.server.handler_instance.last_received_cmd, 'quit') ++ self.assertFalse(is_client_connected()) ++ ++ def test_source_address(self): ++ self.client.quit() ++ port = test_support.find_unused_port() ++ try: ++ self.client.connect(self.server.host, self.server.port, ++ source_address=(HOST, port)) ++ self.assertEqual(self.client.sock.getsockname()[1], port) ++ self.client.quit() ++ except OSError as e: ++ if e.errno == errno.EADDRINUSE: ++ self.skipTest("couldn't bind to port %d" % port) ++ raise ++ ++ def test_source_address_passive_connection(self): ++ port = test_support.find_unused_port() ++ self.client.source_address = (HOST, port) ++ try: ++ with closing(self.client.transfercmd('list')) as sock: ++ self.assertEqual(sock.getsockname()[1], port) ++ except OSError as e: ++ if e.errno == errno.EADDRINUSE: ++ self.skipTest("couldn't bind to port %d" % port) ++ raise ++ ++ def test_parse257(self): ++ self.assertEqual(ftplib.parse257('257 "/foo/bar"'), '/foo/bar') ++ self.assertEqual(ftplib.parse257('257 "/foo/bar" created'), '/foo/bar') ++ self.assertEqual(ftplib.parse257('257 ""'), '') ++ self.assertEqual(ftplib.parse257('257 "" created'), '') ++ self.assertRaises(ftplib.error_reply, ftplib.parse257, '250 "/foo/bar"') ++ # The 257 response is supposed to include the directory ++ # name and in case it contains embedded double-quotes ++ # they must be doubled (see RFC-959, chapter 7, appendix 2). ++ self.assertEqual(ftplib.parse257('257 "/foo/b""ar"'), '/foo/b"ar') ++ self.assertEqual(ftplib.parse257('257 "/foo/b""ar" created'), '/foo/b"ar') ++ + def test_line_too_long(self): + self.assertRaises(ftplib.Error, self.client.sendcmd, + 'x' * self.client.maxline * 2) +diff --git a/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst b/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst +new file mode 100644 +index 00000000000000..8312b7e885441d +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2021-03-13-03-48-14.bpo-43285.g-Hah3.rst +@@ -0,0 +1,8 @@ ++:mod:`ftplib` no longer trusts the IP address value returned from the server ++in response to the PASV command by default. This prevents a malicious FTP ++server from using the response to probe IPv4 address and port combinations ++on the client network. ++ ++Code that requires the former vulnerable behavior may set a ++``trust_server_pasv_ipv4_address`` attribute on their ++:class:`ftplib.FTP` instances to ``True`` to re-enable it. diff --git a/src/python/CVE-2022-45061.diff b/src/python/CVE-2022-45061.diff new file mode 100644 index 000000000..1baf5e435 --- /dev/null +++ b/src/python/CVE-2022-45061.diff @@ -0,0 +1,72 @@ +diff --git a/Lib/encodings/idna.py b/Lib/encodings/idna.py +index ea90d67142f6ac..2ce798cf47e52e 100644 +--- a/Lib/encodings/idna.py ++++ b/Lib/encodings/idna.py +@@ -39,23 +39,21 @@ def nameprep(label): + + # Check bidi + RandAL = map(stringprep.in_table_d1, label) +- for c in RandAL: +- if c: +- # There is a RandAL char in the string. Must perform further +- # tests: +- # 1) The characters in section 5.8 MUST be prohibited. +- # This is table C.8, which was already checked +- # 2) If a string contains any RandALCat character, the string +- # MUST NOT contain any LCat character. +- if filter(stringprep.in_table_d2, label): +- raise UnicodeError("Violation of BIDI requirement 2") +- +- # 3) If a string contains any RandALCat character, a +- # RandALCat character MUST be the first character of the +- # string, and a RandALCat character MUST be the last +- # character of the string. +- if not RandAL[0] or not RandAL[-1]: +- raise UnicodeError("Violation of BIDI requirement 3") ++ if any(RandAL): ++ # There is a RandAL char in the string. Must perform further ++ # tests: ++ # 1) The characters in section 5.8 MUST be prohibited. ++ # This is table C.8, which was already checked ++ # 2) If a string contains any RandALCat character, the string ++ # MUST NOT contain any LCat character. ++ if any(stringprep.in_table_d2(x) for x in label): ++ raise UnicodeError("Violation of BIDI requirement 2") ++ # 3) If a string contains any RandALCat character, a ++ # RandALCat character MUST be the first character of the ++ # string, and a RandALCat character MUST be the last ++ # character of the string. ++ if not RandAL[0] or not RandAL[-1]: ++ raise UnicodeError("Violation of BIDI requirement 3") + + return label + +diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py +index 0ec8bf5a4b4f26..76428e1794a542 100644 +--- a/Lib/test/test_codecs.py ++++ b/Lib/test/test_codecs.py +@@ -1318,6 +1318,12 @@ def test_builtin_encode(self): + self.assertEqual(u"pyth\xf6n.org".encode("idna"), "xn--pythn-mua.org") + self.assertEqual(u"pyth\xf6n.org.".encode("idna"), "xn--pythn-mua.org.") + ++ def test_builtin_decode_length_limit(self): ++ with self.assertRaisesRegexp(UnicodeError, "too long"): ++ (b"xn--016c"+b"a"*1100).decode("idna") ++ with self.assertRaisesRegexp(UnicodeError, "too long"): ++ (b"xn--016c"+b"a"*70).decode("idna") ++ + def test_stream(self): + import StringIO + r = codecs.getreader("idna")(StringIO.StringIO("abc")) +diff --git a/Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst b/Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst +new file mode 100644 +index 00000000000000..5185fac2e29d91 +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2022-11-04-09-29-36.gh-issue-98433.l76c5G.rst +@@ -0,0 +1,6 @@ ++The IDNA codec decoder used on DNS hostnames by :mod:`socket` or :mod:`asyncio` ++related name resolution functions no longer involves a quadratic algorithm. ++This prevents a potential CPU denial of service if an out-of-spec excessive ++length hostname involving bidirectional characters were decoded. Some protocols ++such as :mod:`urllib` http ``3xx`` redirects potentially allow for an attacker ++to supply such a name. diff --git a/src/python/CVE-2022-48560.diff b/src/python/CVE-2022-48560.diff new file mode 100644 index 000000000..7d9562ff7 --- /dev/null +++ b/src/python/CVE-2022-48560.diff @@ -0,0 +1,127 @@ +diff --git a/Lib/test/test_heapq.py b/Lib/test/test_heapq.py +index c4de593bb820a8..0f2990971184a2 100644 +--- a/Lib/test/test_heapq.py ++++ b/Lib/test/test_heapq.py +@@ -396,6 +396,40 @@ def test_heappop_mutating_heap(self): + with self.assertRaises((IndexError, RuntimeError)): + self.module.heappop(heap) + ++ def test_comparison_operator_modifiying_heap(self): ++ # See bpo-39421: Strong references need to be taken ++ # when comparing objects as they can alter the heap ++ class EvilClass(int): ++ def __lt__(self, o): ++ # heap.clear() ++ del heap[:] ++ return NotImplemented ++ ++ heap = [] ++ self.module.heappush(heap, EvilClass(0)) ++ self.assertRaises(IndexError, self.module.heappushpop, heap, 1) ++ ++ def test_comparison_operator_modifiying_heap_two_heaps(self): ++ ++ class h(int): ++ def __lt__(self, o): ++ # list2.clear() ++ del list2[:] ++ return NotImplemented ++ ++ class g(int): ++ def __lt__(self, o): ++ # list1.clear() ++ del list1[:] ++ return NotImplemented ++ ++ list1, list2 = [], [] ++ ++ self.module.heappush(list1, h(0)) ++ self.module.heappush(list2, g(0)) ++ ++ self.assertRaises((IndexError, RuntimeError), self.module.heappush, list1, g(1)) ++ self.assertRaises((IndexError, RuntimeError), self.module.heappush, list2, h(1)) + + class TestErrorHandlingPython(TestErrorHandling): + module = py_heapq +diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst +new file mode 100644 +index 00000000000000..bae008150ee127 +--- /dev/null ++++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst +@@ -0,0 +1,2 @@ ++Fix possible crashes when operating with the functions in the :mod:`heapq` ++module and custom comparison operators. +diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c +index 5b0ef691545ba5..9e2c5c784cb30d 100644 +--- a/Modules/_heapqmodule.c ++++ b/Modules/_heapqmodule.c +@@ -52,7 +52,11 @@ _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) + while (pos > startpos) { + parentpos = (pos - 1) >> 1; + parent = PyList_GET_ITEM(heap, parentpos); ++ Py_INCREF(newitem); ++ Py_INCREF(parent); + cmp = cmp_lt(newitem, parent); ++ Py_DECREF(parent); ++ Py_DECREF(newitem); + if (cmp == -1) + return -1; + if (size != PyList_GET_SIZE(heap)) { +@@ -93,9 +97,13 @@ _siftup(PyListObject *heap, Py_ssize_t pos) + childpos = 2*pos + 1; /* leftmost child position */ + rightpos = childpos + 1; + if (rightpos < endpos) { +- cmp = cmp_lt( +- PyList_GET_ITEM(heap, childpos), +- PyList_GET_ITEM(heap, rightpos)); ++ PyObject* a = PyList_GET_ITEM(heap, childpos); ++ PyObject* b = PyList_GET_ITEM(heap, rightpos); ++ Py_INCREF(a); ++ Py_INCREF(b); ++ cmp = cmp_lt(a,b); ++ Py_DECREF(a); ++ Py_DECREF(b); + if (cmp == -1) + return -1; + if (cmp == 0) +@@ -236,7 +244,10 @@ heappushpop(PyObject *self, PyObject *args) + return item; + } + +- cmp = cmp_lt(PyList_GET_ITEM(heap, 0), item); ++ PyObject* top = PyList_GET_ITEM(heap, 0); ++ Py_INCREF(top); ++ cmp = cmp_lt(top, item); ++ Py_DECREF(top); + if (cmp == -1) + return NULL; + if (cmp == 0) { +@@ -395,7 +406,11 @@ _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) + while (pos > startpos){ + parentpos = (pos - 1) >> 1; + parent = PyList_GET_ITEM(heap, parentpos); ++ Py_INCREF(parent); ++ Py_INCREF(newitem); + cmp = cmp_lt(parent, newitem); ++ Py_DECREF(parent); ++ Py_DECREF(newitem); + if (cmp == -1) { + Py_DECREF(newitem); + return -1; +@@ -436,9 +451,13 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) + childpos = 2*pos + 1; /* leftmost child position */ + rightpos = childpos + 1; + if (rightpos < endpos) { +- cmp = cmp_lt( +- PyList_GET_ITEM(heap, rightpos), +- PyList_GET_ITEM(heap, childpos)); ++ PyObject* a = PyList_GET_ITEM(heap, rightpos); ++ PyObject* b = PyList_GET_ITEM(heap, childpos); ++ Py_INCREF(a); ++ Py_INCREF(b); ++ cmp = cmp_lt(a, b); ++ Py_DECREF(a); ++ Py_DECREF(b); + if (cmp == -1) { + Py_DECREF(newitem); + return -1; diff --git a/src/python/CVE-2022-48565.diff b/src/python/CVE-2022-48565.diff new file mode 100644 index 000000000..2d1003c48 --- /dev/null +++ b/src/python/CVE-2022-48565.diff @@ -0,0 +1,136 @@ +diff --git a/Lib/plistlib.py b/Lib/plistlib.py +index 42897b8da8b268..286c5e078fb76d 100644 +--- a/Lib/plistlib.py ++++ b/Lib/plistlib.py +@@ -403,9 +403,16 @@ def parse(self, fileobj): + parser.StartElementHandler = self.handleBeginElement + parser.EndElementHandler = self.handleEndElement + parser.CharacterDataHandler = self.handleData ++ parser.EntityDeclHandler = self.handle_entity_decl + parser.ParseFile(fileobj) + return self.root + ++ def handle_entity_decl(self, entity_name, is_parameter_entity, value, base, system_id, public_id, notation_name): ++ # Reject plist files with entity declarations to avoid XML vulnerabilies in expat. ++ # Regular plist files don't contain those declerations, and Apple's plutil tool does not ++ # accept them either. ++ raise InvalidFileException("XML entity declarations are not supported in plist files") ++ + def handleBeginElement(self, element, attrs): + self.data = [] + handler = getattr(self, "begin_" + element, None) +@@ -472,3 +479,8 @@ def end_data(self): + self.addObject(Data.fromBase64(self.getData())) + def end_date(self): + self.addObject(_dateFromString(self.getData())) ++ ++ ++class InvalidFileException (ValueError): ++ def __init__(self, message="Invalid file"): ++ ValueError.__init__(self, message) +diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py +index 7859ad05723015..285fefca5ccade 100644 +--- a/Lib/test/test_plistlib.py ++++ b/Lib/test/test_plistlib.py +@@ -86,6 +86,19 @@ + + """.replace(" " * 8, "\t") # Apple as well as plistlib.py output hard tabs + ++XML_PLIST_WITH_ENTITY=b'''\ ++ ++ ++ ]> ++ ++ ++ A ++ &entity; ++ ++ ++''' ++ + + class TestPlistlib(unittest.TestCase): + +@@ -195,6 +208,10 @@ def test_nondictroot(self): + self.assertEqual(test1, result1) + self.assertEqual(test2, result2) + ++ def test_xml_plist_with_entity_decl(self): ++ with self.assertRaisesRegexp(plistlib.InvalidFileException, ++ "XML entity declarations are not supported"): ++ plistlib.readPlistFromString(XML_PLIST_WITH_ENTITY) + + def test_main(): + test_support.run_unittest(TestPlistlib) +diff --git a/Misc/NEWS.d/2.7.18.8.rst b/Misc/NEWS.d/2.7.18.8.rst +new file mode 100644 +index 00000000000000..a2c30f48a949e0 +--- /dev/null ++++ b/Misc/NEWS.d/2.7.18.8.rst +@@ -0,0 +1,56 @@ ++.. bpo: 37428 ++.. date: 2024-02-15 ++.. nonce: ++.. release date: 2024-02-15 ++.. section: Core and Builtins ++ ++CVE-2023-40217 ++ ++SSLContext.post_handshake_auth = True no longer sets ++SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the ++option is documented as ignored for clients, OpenSSL implicitly enables cert ++chain validation when the flag is set. ++ ++.. bpo: ? ++.. date: 2024-02-15 ++.. nonce: ++.. release date: 2024-02-15 ++.. section: Core and Builtins ++ ++CVE-2023-24329 ++ ++Start stripping C0 control and space chars in urlsplit (#… …102508) ++ ++`urllib.parse.urlsplit` has already been respecting the WHATWG spec a bit #25595. ++ ++This adds more sanitizing to respect the "Remove any leading C0 control or space from input" [rule](https://url.spec.whatwg.org/#url-parsing:~:text=Remove%20any%20leading%20and%20trailing%20C0%20control%20or%20space%20from%20input.) in response to [CVE-2023-24329](https://nvd.nist.gov/vuln/detail/CVE-2023-24329). ++ ++.. bpo: 43882 ++.. date: 2024-02-15 ++.. nonce: ++.. release date: 2024-02-15 ++.. section: Core and Builtins ++ ++CVE-2022-0391 ++ ++A flaw was found in Python, specifically within the urllib.parse module. This module helps break Uniform Resource Locator (URL) strings into components. The issue involves how the urlparse method does not sanitize input and allows characters like '\r' and '\n' in the URL path. This flaw allows an attacker to input a crafted URL, leading to injection attacks. This flaw affects Python versions prior to 3.10.0b1, 3.9.5, 3.8.11, 3.7.11 and 3.6.14. ++ ++.. bpo: 43285 ++.. date: 2024-02-15 ++.. nonce: ++.. release date: 2024-02-15 ++.. section: Core and Builtins ++ ++CVE-2021-4189 ++ ++A flaw was found in Python, specifically in the FTP (File Transfer Protocol) client library in PASV (passive) mode. The issue is how the FTP client trusts the host from the PASV response by default. This flaw allows an attacker to set up a malicious FTP server that can trick FTP clients into connecting back to a given IP address and port. This vulnerability could lead to FTP client scanning ports, which otherwise would not have been possible. ++ ++.. bpo: 42051 ++.. date: 2024-03-12 ++.. nonce: ++.. release date: 2024-03-12 ++.. section: Core and Builtins ++ ++CVE-2022-48565 ++ ++An XML External Entity (XXE) issue was discovered in Python through 3.9.1. The plistlib module no longer accepts entity declarations in XML plist files to avoid XML vulnerabilities. +diff --git a/Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst b/Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst +new file mode 100644 +index 00000000000000..70fb731ea3eacf +--- /dev/null ++++ b/Misc/NEWS.d/next/Security/2020-10-19-10-56-27.bpo-42051.EU_B7u.rst +@@ -0,0 +1,3 @@ ++The :mod: module no longer accepts entity declarations in XML ++plist files to avoid XML vulnerabilities. This should not affect users as ++entity declarations are not used in regular plist files. From deaf977dc174798d8853c37943707dbc5b3bed23 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 10:46:53 +0000 Subject: [PATCH 09/42] Adjusted hot fixes to cleanly apply on Windows. --- src/python/CVE-2021-4189.diff | 20 ------ src/python/CVE-2022-48560.diff | 127 --------------------------------- 2 files changed, 147 deletions(-) delete mode 100644 src/python/CVE-2022-48560.diff diff --git a/src/python/CVE-2021-4189.diff b/src/python/CVE-2021-4189.diff index 305f662d5..a55ff85d6 100644 --- a/src/python/CVE-2021-4189.diff +++ b/src/python/CVE-2021-4189.diff @@ -1,23 +1,3 @@ -diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst -index bc297ef4ee89fb..71d410bcd1fbf0 100644 ---- a/Doc/whatsnew/2.7.rst -+++ b/Doc/whatsnew/2.7.rst -@@ -2777,6 +2777,15 @@ It has been replaced by the new ``make regen-all`` target. - - .. _acks27: - -+Security fix for FTP -+================================ -+ -+A security fix alters the :class:`ftplib.FTP` behavior to not trust the -+IPv4 address sent from the remote server when setting up a passive data -+channel. We reuse the ftp server IP address instead. For unusual code -+requiring the old behavior, set a ``trust_server_pasv_ipv4_address`` -+attribute on your FTP instance to ``True``. (See :issue:`43285`) -+ - Acknowledgements - ================ - diff --git a/Lib/ftplib.py b/Lib/ftplib.py index 6644554792791b..7c772e6ee5ee16 100644 --- a/Lib/ftplib.py diff --git a/src/python/CVE-2022-48560.diff b/src/python/CVE-2022-48560.diff deleted file mode 100644 index 7d9562ff7..000000000 --- a/src/python/CVE-2022-48560.diff +++ /dev/null @@ -1,127 +0,0 @@ -diff --git a/Lib/test/test_heapq.py b/Lib/test/test_heapq.py -index c4de593bb820a8..0f2990971184a2 100644 ---- a/Lib/test/test_heapq.py -+++ b/Lib/test/test_heapq.py -@@ -396,6 +396,40 @@ def test_heappop_mutating_heap(self): - with self.assertRaises((IndexError, RuntimeError)): - self.module.heappop(heap) - -+ def test_comparison_operator_modifiying_heap(self): -+ # See bpo-39421: Strong references need to be taken -+ # when comparing objects as they can alter the heap -+ class EvilClass(int): -+ def __lt__(self, o): -+ # heap.clear() -+ del heap[:] -+ return NotImplemented -+ -+ heap = [] -+ self.module.heappush(heap, EvilClass(0)) -+ self.assertRaises(IndexError, self.module.heappushpop, heap, 1) -+ -+ def test_comparison_operator_modifiying_heap_two_heaps(self): -+ -+ class h(int): -+ def __lt__(self, o): -+ # list2.clear() -+ del list2[:] -+ return NotImplemented -+ -+ class g(int): -+ def __lt__(self, o): -+ # list1.clear() -+ del list1[:] -+ return NotImplemented -+ -+ list1, list2 = [], [] -+ -+ self.module.heappush(list1, h(0)) -+ self.module.heappush(list2, g(0)) -+ -+ self.assertRaises((IndexError, RuntimeError), self.module.heappush, list1, g(1)) -+ self.assertRaises((IndexError, RuntimeError), self.module.heappush, list2, h(1)) - - class TestErrorHandlingPython(TestErrorHandling): - module = py_heapq -diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst -new file mode 100644 -index 00000000000000..bae008150ee127 ---- /dev/null -+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst -@@ -0,0 +1,2 @@ -+Fix possible crashes when operating with the functions in the :mod:`heapq` -+module and custom comparison operators. -diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c -index 5b0ef691545ba5..9e2c5c784cb30d 100644 ---- a/Modules/_heapqmodule.c -+++ b/Modules/_heapqmodule.c -@@ -52,7 +52,11 @@ _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) - while (pos > startpos) { - parentpos = (pos - 1) >> 1; - parent = PyList_GET_ITEM(heap, parentpos); -+ Py_INCREF(newitem); -+ Py_INCREF(parent); - cmp = cmp_lt(newitem, parent); -+ Py_DECREF(parent); -+ Py_DECREF(newitem); - if (cmp == -1) - return -1; - if (size != PyList_GET_SIZE(heap)) { -@@ -93,9 +97,13 @@ _siftup(PyListObject *heap, Py_ssize_t pos) - childpos = 2*pos + 1; /* leftmost child position */ - rightpos = childpos + 1; - if (rightpos < endpos) { -- cmp = cmp_lt( -- PyList_GET_ITEM(heap, childpos), -- PyList_GET_ITEM(heap, rightpos)); -+ PyObject* a = PyList_GET_ITEM(heap, childpos); -+ PyObject* b = PyList_GET_ITEM(heap, rightpos); -+ Py_INCREF(a); -+ Py_INCREF(b); -+ cmp = cmp_lt(a,b); -+ Py_DECREF(a); -+ Py_DECREF(b); - if (cmp == -1) - return -1; - if (cmp == 0) -@@ -236,7 +244,10 @@ heappushpop(PyObject *self, PyObject *args) - return item; - } - -- cmp = cmp_lt(PyList_GET_ITEM(heap, 0), item); -+ PyObject* top = PyList_GET_ITEM(heap, 0); -+ Py_INCREF(top); -+ cmp = cmp_lt(top, item); -+ Py_DECREF(top); - if (cmp == -1) - return NULL; - if (cmp == 0) { -@@ -395,7 +406,11 @@ _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) - while (pos > startpos){ - parentpos = (pos - 1) >> 1; - parent = PyList_GET_ITEM(heap, parentpos); -+ Py_INCREF(parent); -+ Py_INCREF(newitem); - cmp = cmp_lt(parent, newitem); -+ Py_DECREF(parent); -+ Py_DECREF(newitem); - if (cmp == -1) { - Py_DECREF(newitem); - return -1; -@@ -436,9 +451,13 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) - childpos = 2*pos + 1; /* leftmost child position */ - rightpos = childpos + 1; - if (rightpos < endpos) { -- cmp = cmp_lt( -- PyList_GET_ITEM(heap, rightpos), -- PyList_GET_ITEM(heap, childpos)); -+ PyObject* a = PyList_GET_ITEM(heap, rightpos); -+ PyObject* b = PyList_GET_ITEM(heap, childpos); -+ Py_INCREF(a); -+ Py_INCREF(b); -+ cmp = cmp_lt(a, b); -+ Py_DECREF(a); -+ Py_DECREF(b); - if (cmp == -1) { - Py_DECREF(newitem); - return -1; From a118e7a5f95b3933c822909fd6bb5679b9691d64 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 11:10:29 +0000 Subject: [PATCH 10/42] Patched Python sources for CVE-2022-48560, CVE-2022-48566, CVE-2023-40217. --- .../Python-2.7.18/Doc/library/socket.rst | 17 + src/python/Python-2.7.18/Include/Python.h | 1 + src/python/Python-2.7.18/Include/pyport.h | 5 +- src/python/Python-2.7.18/Include/pytime.h | 246 ++++ src/python/Python-2.7.18/Lib/socket.py | 2 +- src/python/Python-2.7.18/Lib/ssl.py | 46 +- .../Python-2.7.18/Lib/test/test_heapq.py | 34 + .../Python-2.7.18/Lib/test/test_socket.py | 806 ++++++++++++ src/python/Python-2.7.18/Lib/test/test_ssl.py | 522 +++++++- .../2020-01-22-15-53-37.bpo-39421.O3nG7u.rst | 2 + .../2017-12-19-09-23-46.bpo-32373.8qAkoW.rst | 1 + .../2019-06-27-13-27-02.bpo-37428._wcwUd.rst | 4 + .../2020-05-28-06-06-47.bpo-40791.QGZClX.rst | 1 + ...-08-22-17-39-12.gh-issue-108310.fVM3sg.rst | 7 + .../Python-2.7.18/Modules/_heapqmodule.c | 33 +- src/python/Python-2.7.18/Modules/_ssl.c | 112 +- src/python/Python-2.7.18/Modules/operator.c | 2 +- .../Python-2.7.18/Modules/socketmodule.c | 98 +- src/python/Python-2.7.18/Python/pytime.c | 1114 +++++++++++++++++ 19 files changed, 3026 insertions(+), 27 deletions(-) create mode 100644 src/python/Python-2.7.18/Include/pytime.h create mode 100644 src/python/Python-2.7.18/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst create mode 100644 src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2017-12-19-09-23-46.bpo-32373.8qAkoW.rst create mode 100644 src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2019-06-27-13-27-02.bpo-37428._wcwUd.rst create mode 100644 src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst create mode 100644 src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2023-08-22-17-39-12.gh-issue-108310.fVM3sg.rst create mode 100644 src/python/Python-2.7.18/Python/pytime.c diff --git a/src/python/Python-2.7.18/Doc/library/socket.rst b/src/python/Python-2.7.18/Doc/library/socket.rst index 7b761d7ec..9cc9a6869 100644 --- a/src/python/Python-2.7.18/Doc/library/socket.rst +++ b/src/python/Python-2.7.18/Doc/library/socket.rst @@ -636,6 +636,23 @@ correspond to Unix system calls applicable to sockets. to decode C structures encoded as strings). +.. method:: socket.getblocking() + + Return ``True`` if socket is in blocking mode, ``False`` if in + non-blocking. + + This is equivalent to checking ``socket.gettimeout() == 0``. + + .. versionadded:: 3.7 + + +.. method:: socket.gettimeout() + + Return the timeout in seconds (float) associated with socket operations, + or ``None`` if no timeout is set. This reflects the last call to + :meth:`setblocking` or :meth:`settimeout`. + + .. method:: socket.ioctl(control, option) :platform: Windows diff --git a/src/python/Python-2.7.18/Include/Python.h b/src/python/Python-2.7.18/Include/Python.h index a9327b02c..384c86a74 100644 --- a/src/python/Python-2.7.18/Include/Python.h +++ b/src/python/Python-2.7.18/Include/Python.h @@ -78,6 +78,7 @@ #error "PYMALLOC_DEBUG requires WITH_PYMALLOC" #endif #include "pymath.h" +#include "pytime.h" #include "pymem.h" #include "object.h" diff --git a/src/python/Python-2.7.18/Include/pyport.h b/src/python/Python-2.7.18/Include/pyport.h index 35562a6a8..5cebaecb5 100644 --- a/src/python/Python-2.7.18/Include/pyport.h +++ b/src/python/Python-2.7.18/Include/pyport.h @@ -3,11 +3,12 @@ #include "pyconfig.h" /* include for defines */ +/* Always include inttypes.h now because of pytime.h */ /* Some versions of HP-UX & Solaris need inttypes.h for int32_t, INT32_MAX, etc. */ -#ifdef HAVE_INTTYPES_H +/* #ifdef HAVE_INTTYPES_H */ #include -#endif +/* #endif */ #ifdef HAVE_STDINT_H #include diff --git a/src/python/Python-2.7.18/Include/pytime.h b/src/python/Python-2.7.18/Include/pytime.h new file mode 100644 index 000000000..bdda1da2e --- /dev/null +++ b/src/python/Python-2.7.18/Include/pytime.h @@ -0,0 +1,246 @@ +#ifndef Py_LIMITED_API +#ifndef Py_PYTIME_H +#define Py_PYTIME_H + +#include "pyconfig.h" /* include for defines */ +#include "object.h" + +/************************************************************************** +Symbols and macros to supply platform-independent interfaces to time related +functions and constants +**************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* _PyTime_t: Python timestamp with subsecond precision. It can be used to + store a duration, and so indirectly a date (related to another date, like + UNIX epoch). */ +typedef int64_t _PyTime_t; +#define _PyTime_MIN INT64_MIN +#define _PyTime_MAX INT64_MAX + +typedef enum { + /* Round towards minus infinity (-inf). + For example, used to read a clock. */ + _PyTime_ROUND_FLOOR=0, + /* Round towards infinity (+inf). + For example, used for timeout to wait "at least" N seconds. */ + _PyTime_ROUND_CEILING=1, + /* Round to nearest with ties going to nearest even integer. + For example, used to round from a Python float. */ + _PyTime_ROUND_HALF_EVEN=2, + /* Round away from zero + For example, used for timeout. _PyTime_ROUND_CEILING rounds + -1e-9 to 0 milliseconds which causes bpo-31786 issue. + _PyTime_ROUND_UP rounds -1e-9 to -1 millisecond which keeps + the timeout sign as expected. select.poll(timeout) must block + for negative values." */ + _PyTime_ROUND_UP=3, + /* _PyTime_ROUND_TIMEOUT (an alias for _PyTime_ROUND_UP) should be + used for timeouts. */ + _PyTime_ROUND_TIMEOUT = _PyTime_ROUND_UP +} _PyTime_round_t; + + +/* Convert a time_t to a PyLong. */ +PyAPI_FUNC(PyObject *) _PyLong_FromTime_t( + time_t sec); + +/* Convert a PyLong to a time_t. */ +PyAPI_FUNC(time_t) _PyLong_AsTime_t( + PyObject *obj); + +/* Convert a number of seconds, int or float, to time_t. */ +PyAPI_FUNC(int) _PyTime_ObjectToTime_t( + PyObject *obj, + time_t *sec, + _PyTime_round_t); + +/* Convert a number of seconds, int or float, to a timeval structure. + usec is in the range [0; 999999] and rounded towards zero. + For example, -1.2 is converted to (-2, 800000). */ +PyAPI_FUNC(int) _PyTime_ObjectToTimeval( + PyObject *obj, + time_t *sec, + long *usec, + _PyTime_round_t); + +/* Convert a number of seconds, int or float, to a timespec structure. + nsec is in the range [0; 999999999] and rounded towards zero. + For example, -1.2 is converted to (-2, 800000000). */ +PyAPI_FUNC(int) _PyTime_ObjectToTimespec( + PyObject *obj, + time_t *sec, + long *nsec, + _PyTime_round_t); + + +/* Create a timestamp from a number of seconds. */ +PyAPI_FUNC(_PyTime_t) _PyTime_FromSeconds(int seconds); + +/* Macro to create a timestamp from a number of seconds, no integer overflow. + Only use the macro for small values, prefer _PyTime_FromSeconds(). */ +#define _PYTIME_FROMSECONDS(seconds) \ + ((_PyTime_t)(seconds) * (1000 * 1000 * 1000)) + +/* Create a timestamp from a number of nanoseconds. */ +PyAPI_FUNC(_PyTime_t) _PyTime_FromNanoseconds(_PyTime_t ns); + +/* Create a timestamp from nanoseconds (Python int). */ +PyAPI_FUNC(int) _PyTime_FromNanosecondsObject(_PyTime_t *t, + PyObject *obj); + +/* Convert a number of seconds (Python float or int) to a timetamp. + Raise an exception and return -1 on error, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromSecondsObject(_PyTime_t *t, + PyObject *obj, + _PyTime_round_t round); + +/* Convert a number of milliseconds (Python float or int, 10^-3) to a timetamp. + Raise an exception and return -1 on error, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromMillisecondsObject(_PyTime_t *t, + PyObject *obj, + _PyTime_round_t round); + +/* Convert a timestamp to a number of seconds as a C double. */ +PyAPI_FUNC(double) _PyTime_AsSecondsDouble(_PyTime_t t); + +/* Convert timestamp to a number of milliseconds (10^-3 seconds). */ +PyAPI_FUNC(_PyTime_t) _PyTime_AsMilliseconds(_PyTime_t t, + _PyTime_round_t round); + +/* Convert timestamp to a number of microseconds (10^-6 seconds). */ +PyAPI_FUNC(_PyTime_t) _PyTime_AsMicroseconds(_PyTime_t t, + _PyTime_round_t round); + +/* Convert timestamp to a number of nanoseconds (10^-9 seconds) as a Python int + object. */ +PyAPI_FUNC(PyObject *) _PyTime_AsNanosecondsObject(_PyTime_t t); + +/* Create a timestamp from a timeval structure. + Raise an exception and return -1 on overflow, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv); + +/* Convert a timestamp to a timeval structure (microsecond resolution). + tv_usec is always positive. + Raise an exception and return -1 if the conversion overflowed, + return 0 on success. */ +PyAPI_FUNC(int) _PyTime_AsTimeval(_PyTime_t t, + struct timeval *tv, + _PyTime_round_t round); + +/* Similar to _PyTime_AsTimeval(), but don't raise an exception on error. */ +PyAPI_FUNC(int) _PyTime_AsTimeval_noraise(_PyTime_t t, + struct timeval *tv, + _PyTime_round_t round); + +/* Convert a timestamp to a number of seconds (secs) and microseconds (us). + us is always positive. This function is similar to _PyTime_AsTimeval() + except that secs is always a time_t type, whereas the timeval structure + uses a C long for tv_sec on Windows. + Raise an exception and return -1 if the conversion overflowed, + return 0 on success. */ +PyAPI_FUNC(int) _PyTime_AsTimevalTime_t( + _PyTime_t t, + time_t *secs, + int *us, + _PyTime_round_t round); + +#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) +/* Create a timestamp from a timespec structure. + Raise an exception and return -1 on overflow, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts); + +/* Convert a timestamp to a timespec structure (nanosecond resolution). + tv_nsec is always positive. + Raise an exception and return -1 on error, return 0 on success. */ +PyAPI_FUNC(int) _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts); +#endif + +/* Compute ticks * mul / div. + The caller must ensure that ((div - 1) * mul) cannot overflow. */ +PyAPI_FUNC(_PyTime_t) _PyTime_MulDiv(_PyTime_t ticks, + _PyTime_t mul, + _PyTime_t div); + +/* Get the current time from the system clock. + + The function cannot fail. _PyTime_Init() ensures that the system clock + works. */ +PyAPI_FUNC(_PyTime_t) _PyTime_GetSystemClock(void); + +/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards. + The clock is not affected by system clock updates. The reference point of + the returned value is undefined, so that only the difference between the + results of consecutive calls is valid. + + The function cannot fail. _PyTime_Init() ensures that a monotonic clock + is available and works. */ +PyAPI_FUNC(_PyTime_t) _PyTime_GetMonotonicClock(void); + + +/* Structure used by time.get_clock_info() */ +typedef struct { + const char *implementation; + int monotonic; + int adjustable; + double resolution; +} _Py_clock_info_t; + +/* Get the current time from the system clock. + * Fill clock information if info is not NULL. + * Raise an exception and return -1 on error, return 0 on success. + */ +PyAPI_FUNC(int) _PyTime_GetSystemClockWithInfo( + _PyTime_t *t, + _Py_clock_info_t *info); + +/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards. + The clock is not affected by system clock updates. The reference point of + the returned value is undefined, so that only the difference between the + results of consecutive calls is valid. + + Fill info (if set) with information of the function used to get the time. + + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_GetMonotonicClockWithInfo( + _PyTime_t *t, + _Py_clock_info_t *info); + + +/* Initialize time. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_Init(void); + +/* Converts a timestamp to the Gregorian time, using the local time zone. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_localtime(time_t t, struct tm *tm); + +/* Converts a timestamp to the Gregorian time, assuming UTC. + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_gmtime(time_t t, struct tm *tm); + +/* Get the performance counter: clock with the highest available resolution to + measure a short duration. + + The function cannot fail. _PyTime_Init() ensures that the system clock + works. */ +PyAPI_FUNC(_PyTime_t) _PyTime_GetPerfCounter(void); + +/* Get the performance counter: clock with the highest available resolution to + measure a short duration. + + Fill info (if set) with information of the function used to get the time. + + Return 0 on success, raise an exception and return -1 on error. */ +PyAPI_FUNC(int) _PyTime_GetPerfCounterWithInfo( + _PyTime_t *t, + _Py_clock_info_t *info); + +#ifdef __cplusplus +} +#endif + +#endif /* Py_PYTIME_H */ +#endif /* Py_LIMITED_API */ diff --git a/src/python/Python-2.7.18/Lib/socket.py b/src/python/Python-2.7.18/Lib/socket.py index 437634cc3..55e446cd6 100644 --- a/src/python/Python-2.7.18/Lib/socket.py +++ b/src/python/Python-2.7.18/Lib/socket.py @@ -154,7 +154,7 @@ def getfqdn(name=''): _socketmethods = ( 'bind', 'connect', 'connect_ex', 'fileno', 'listen', 'getpeername', 'getsockname', 'getsockopt', 'setsockopt', - 'sendall', 'setblocking', + 'sendall', 'getblocking', 'setblocking', 'settimeout', 'gettimeout', 'shutdown') if os.name == "nt": diff --git a/src/python/Python-2.7.18/Lib/ssl.py b/src/python/Python-2.7.18/Lib/ssl.py index 0bb43a4a4..e295aa593 100644 --- a/src/python/Python-2.7.18/Lib/ssl.py +++ b/src/python/Python-2.7.18/Lib/ssl.py @@ -94,6 +94,10 @@ import os from collections import namedtuple from contextlib import closing +import socket + +# import logging + import _ssl # if we can't import it, let the error propagate @@ -523,6 +527,7 @@ def __init__(self, sock=None, keyfile=None, certfile=None, server_hostname=None, _context=None): + self._sslobj = None self._makefile_refs = 0 if _context: self._context = _context @@ -568,6 +573,7 @@ def __init__(self, sock=None, keyfile=None, certfile=None, "in client mode") if self._context.check_hostname and not server_hostname: raise ValueError("check_hostname requires server_hostname") + sock_timeout = sock.gettimeout() self.server_side = server_side self.server_hostname = server_hostname self.do_handshake_on_connect = do_handshake_on_connect @@ -580,11 +586,42 @@ def __init__(self, sock=None, keyfile=None, certfile=None, if e.errno != errno.ENOTCONN: raise connected = False + blocking = self.getblocking() + self.setblocking(False) + try: + # We are not connected so this is not supposed to block, but + # testing revealed otherwise on macOS and Windows so we do + # the non-blocking dance regardless. Our raise when any data + # is found means consuming the data is harmless. + notconn_pre_handshake_data = self.recv(1) + except (OSError, socket_error) as e: + + # EINVAL occurs for recv(1) on non-connected on unix sockets. + if e.errno not in (errno.ENOTCONN, errno.EINVAL): + raise + + notconn_pre_handshake_data = b'' + self.setblocking(blocking) + if notconn_pre_handshake_data: + # This prevents pending data sent to the socket before it was + # closed from escaping to the caller who could otherwise + # presume it came through a successful TLS connection. + reason = "Closed before TLS handshake with data in recv buffer." + notconn_pre_handshake_data_error = SSLError(e.errno, reason) + # Add the SSLError attributes that _ssl.c always adds. + notconn_pre_handshake_data_error.reason = reason + notconn_pre_handshake_data_error.library = None + try: + self.close() + except (OSError, socket_error): + pass + raise notconn_pre_handshake_data_error else: connected = True self._closed = False self._sslobj = None + self.settimeout(sock_timeout) # Must come after setblocking() calls. self._connected = connected if connected: # create the SSL object @@ -598,7 +635,7 @@ def __init__(self, sock=None, keyfile=None, certfile=None, raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets") self.do_handshake() - except (OSError, ValueError): + except (OSError, ValueError, socket_error): self.close() raise @@ -814,6 +851,12 @@ def unwrap(self): else: raise ValueError("No SSL wrapper around " + str(self)) + def verify_client_post_handshake(self): + if self._sslobj: + return self._sslobj.verify_client_post_handshake() + else: + raise ValueError("No SSL wrapper around " + str(self)) + def _real_close(self): self._sslobj = None socket._real_close(self) @@ -915,7 +958,6 @@ def version(self): return None return self._sslobj.version() - def wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version=PROTOCOL_TLS, ca_certs=None, diff --git a/src/python/Python-2.7.18/Lib/test/test_heapq.py b/src/python/Python-2.7.18/Lib/test/test_heapq.py index c4de593bb..0f2990971 100644 --- a/src/python/Python-2.7.18/Lib/test/test_heapq.py +++ b/src/python/Python-2.7.18/Lib/test/test_heapq.py @@ -396,6 +396,40 @@ def test_heappop_mutating_heap(self): with self.assertRaises((IndexError, RuntimeError)): self.module.heappop(heap) + def test_comparison_operator_modifiying_heap(self): + # See bpo-39421: Strong references need to be taken + # when comparing objects as they can alter the heap + class EvilClass(int): + def __lt__(self, o): + # heap.clear() + del heap[:] + return NotImplemented + + heap = [] + self.module.heappush(heap, EvilClass(0)) + self.assertRaises(IndexError, self.module.heappushpop, heap, 1) + + def test_comparison_operator_modifiying_heap_two_heaps(self): + + class h(int): + def __lt__(self, o): + # list2.clear() + del list2[:] + return NotImplemented + + class g(int): + def __lt__(self, o): + # list1.clear() + del list1[:] + return NotImplemented + + list1, list2 = [], [] + + self.module.heappush(list1, h(0)) + self.module.heappush(list2, g(0)) + + self.assertRaises((IndexError, RuntimeError), self.module.heappush, list1, g(1)) + self.assertRaises((IndexError, RuntimeError), self.module.heappush, list2, h(1)) class TestErrorHandlingPython(TestErrorHandling): module = py_heapq diff --git a/src/python/Python-2.7.18/Lib/test/test_socket.py b/src/python/Python-2.7.18/Lib/test/test_socket.py index 988e12a81..2c1b48c69 100644 --- a/src/python/Python-2.7.18/Lib/test/test_socket.py +++ b/src/python/Python-2.7.18/Lib/test/test_socket.py @@ -50,6 +50,13 @@ def try_address(host, port=0, family=socket.AF_INET): HOST = test_support.HOST MSG = 'Michael Gilfix was here\n' +def _is_fd_in_blocking_mode(sock): + return not bool( + fcntl.fcntl(sock, fcntl.F_GETFL, os.O_NONBLOCK) & os.O_NONBLOCK) + + +HAVE_SOCKET_CAN = _have_socket_can() + class SocketTCPTest(unittest.TestCase): def setUp(self): @@ -957,8 +964,44 @@ def testSetBlocking(self): # Testing whether set blocking works self.serv.setblocking(True) self.assertIsNone(self.serv.gettimeout()) + self.assertTrue(self.serv.getblocking()) + if fcntl: + self.assertTrue(_is_fd_in_blocking_mode(self.serv)) + self.serv.setblocking(False) self.assertEqual(self.serv.gettimeout(), 0.0) + self.assertFalse(self.serv.getblocking()) + if fcntl: + self.assertFalse(_is_fd_in_blocking_mode(self.serv)) + + self.serv.settimeout(None) + self.assertTrue(self.serv.getblocking()) + if fcntl: + self.assertTrue(_is_fd_in_blocking_mode(self.serv)) + + self.serv.settimeout(0) + self.assertFalse(self.serv.getblocking()) + self.assertEqual(self.serv.gettimeout(), 0) + if fcntl: + self.assertFalse(_is_fd_in_blocking_mode(self.serv)) + + self.serv.settimeout(10) + self.assertTrue(self.serv.getblocking()) + self.assertEqual(self.serv.gettimeout(), 10) + if fcntl: + # When a Python socket has a non-zero timeout, it's + # switched internally to a non-blocking mode. + # Later, sock.sendall(), sock.recv(), and other socket + # operations use a `select()` call and handle EWOULDBLOCK/EGAIN + # on all socket operations. That's how timeouts are + # enforced. + self.assertFalse(_is_fd_in_blocking_mode(self.serv)) + + self.serv.settimeout(0) + self.assertFalse(self.serv.getblocking()) + if fcntl: + self.assertFalse(_is_fd_in_blocking_mode(self.serv)) + start = time.time() try: self.serv.accept() @@ -983,6 +1026,47 @@ def testSetBlocking_overflow(self): _testSetBlocking_overflow = test_support.cpython_only(_testSetBlocking) + @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'), + 'test needs socket.SOCK_NONBLOCK') + @support.requires_linux_version(2, 6, 28) + def testInitNonBlocking(self): + # reinit server socket + self.serv.close() + self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM | + socket.SOCK_NONBLOCK) + self.assertFalse(self.serv.getblocking()) + self.assertEqual(self.serv.gettimeout(), 0) + self.port = support.bind_port(self.serv) + self.serv.listen() + # actual testing + start = time.time() + try: + self.serv.accept() + except OSError: + pass + end = time.time() + self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.") + + def _testInitNonBlocking(self): + pass + + def testInheritFlags(self): + # Issue #7995: when calling accept() on a listening socket with a + # timeout, the resulting socket should not be non-blocking. + self.serv.settimeout(10) + try: + conn, addr = self.serv.accept() + message = conn.recv(len(MSG)) + finally: + conn.close() + self.serv.settimeout(None) + + def _testInheritFlags(self): + time.sleep(0.1) + self.cli.connect((HOST, self.port)) + time.sleep(0.5) + self.cli.send(MSG) + def testAccept(self): # Testing non-blocking accept self.serv.setblocking(0) @@ -1805,6 +1889,728 @@ def _testStream(self): self.cli.close() +class ContextManagersTest(ThreadedTCPSocketTest): + + def _testSocketClass(self): + # base test + with socket.socket() as sock: + self.assertFalse(sock._closed) + self.assertTrue(sock._closed) + # close inside with block + with socket.socket() as sock: + sock.close() + self.assertTrue(sock._closed) + # exception inside with block + with socket.socket() as sock: + self.assertRaises(OSError, sock.sendall, b'foo') + self.assertTrue(sock._closed) + + def testCreateConnectionBase(self): + conn, addr = self.serv.accept() + self.addCleanup(conn.close) + data = conn.recv(1024) + conn.sendall(data) + + def _testCreateConnectionBase(self): + address = self.serv.getsockname() + with socket.create_connection(address) as sock: + self.assertFalse(sock._closed) + sock.sendall(b'foo') + self.assertEqual(sock.recv(1024), b'foo') + self.assertTrue(sock._closed) + + def testCreateConnectionClose(self): + conn, addr = self.serv.accept() + self.addCleanup(conn.close) + data = conn.recv(1024) + conn.sendall(data) + + def _testCreateConnectionClose(self): + address = self.serv.getsockname() + with socket.create_connection(address) as sock: + sock.close() + self.assertTrue(sock._closed) + self.assertRaises(OSError, sock.sendall, b'foo') + + +class InheritanceTest(unittest.TestCase): + @unittest.skipUnless(hasattr(socket, "SOCK_CLOEXEC"), + "SOCK_CLOEXEC not defined") + @support.requires_linux_version(2, 6, 28) + def test_SOCK_CLOEXEC(self): + with socket.socket(socket.AF_INET, + socket.SOCK_STREAM | socket.SOCK_CLOEXEC) as s: + self.assertEqual(s.type, socket.SOCK_STREAM) + self.assertFalse(s.get_inheritable()) + + def test_default_inheritable(self): + sock = socket.socket() + with sock: + self.assertEqual(sock.get_inheritable(), False) + + def test_dup(self): + sock = socket.socket() + with sock: + newsock = sock.dup() + sock.close() + with newsock: + self.assertEqual(newsock.get_inheritable(), False) + + def test_set_inheritable(self): + sock = socket.socket() + with sock: + sock.set_inheritable(True) + self.assertEqual(sock.get_inheritable(), True) + + sock.set_inheritable(False) + self.assertEqual(sock.get_inheritable(), False) + + @unittest.skipIf(fcntl is None, "need fcntl") + def test_get_inheritable_cloexec(self): + sock = socket.socket() + with sock: + fd = sock.fileno() + self.assertEqual(sock.get_inheritable(), False) + + # clear FD_CLOEXEC flag + flags = fcntl.fcntl(fd, fcntl.F_GETFD) + flags &= ~fcntl.FD_CLOEXEC + fcntl.fcntl(fd, fcntl.F_SETFD, flags) + + self.assertEqual(sock.get_inheritable(), True) + + @unittest.skipIf(fcntl is None, "need fcntl") + def test_set_inheritable_cloexec(self): + sock = socket.socket() + with sock: + fd = sock.fileno() + self.assertEqual(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC, + fcntl.FD_CLOEXEC) + + sock.set_inheritable(True) + self.assertEqual(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC, + 0) + + + def test_socketpair(self): + s1, s2 = socket.socketpair() + self.addCleanup(s1.close) + self.addCleanup(s2.close) + self.assertEqual(s1.get_inheritable(), False) + self.assertEqual(s2.get_inheritable(), False) + + +@unittest.skipUnless(hasattr(socket, "SOCK_NONBLOCK"), + "SOCK_NONBLOCK not defined") +class NonblockConstantTest(unittest.TestCase): + def checkNonblock(self, s, nonblock=True, timeout=0.0): + if nonblock: + self.assertEqual(s.type, socket.SOCK_STREAM) + self.assertEqual(s.gettimeout(), timeout) + self.assertTrue( + fcntl.fcntl(s, fcntl.F_GETFL, os.O_NONBLOCK) & os.O_NONBLOCK) + if timeout == 0: + # timeout == 0: means that getblocking() must be False. + self.assertFalse(s.getblocking()) + else: + # If timeout > 0, the socket will be in a "blocking" mode + # from the standpoint of the Python API. For Python socket + # object, "blocking" means that operations like 'sock.recv()' + # will block. Internally, file descriptors for + # "blocking" Python sockets *with timeouts* are in a + # *non-blocking* mode, and 'sock.recv()' uses 'select()' + # and handles EWOULDBLOCK/EAGAIN to enforce the timeout. + self.assertTrue(s.getblocking()) + else: + self.assertEqual(s.type, socket.SOCK_STREAM) + self.assertEqual(s.gettimeout(), None) + self.assertFalse( + fcntl.fcntl(s, fcntl.F_GETFL, os.O_NONBLOCK) & os.O_NONBLOCK) + self.assertTrue(s.getblocking()) + + @support.requires_linux_version(2, 6, 28) + def test_SOCK_NONBLOCK(self): + # a lot of it seems silly and redundant, but I wanted to test that + # changing back and forth worked ok + with socket.socket(socket.AF_INET, + socket.SOCK_STREAM | socket.SOCK_NONBLOCK) as s: + self.checkNonblock(s) + s.setblocking(1) + self.checkNonblock(s, nonblock=False) + s.setblocking(0) + self.checkNonblock(s) + s.settimeout(None) + self.checkNonblock(s, nonblock=False) + s.settimeout(2.0) + self.checkNonblock(s, timeout=2.0) + s.setblocking(1) + self.checkNonblock(s, nonblock=False) + # defaulttimeout + t = socket.getdefaulttimeout() + socket.setdefaulttimeout(0.0) + with socket.socket() as s: + self.checkNonblock(s) + socket.setdefaulttimeout(None) + with socket.socket() as s: + self.checkNonblock(s, False) + socket.setdefaulttimeout(2.0) + with socket.socket() as s: + self.checkNonblock(s, timeout=2.0) + socket.setdefaulttimeout(None) + with socket.socket() as s: + self.checkNonblock(s, False) + socket.setdefaulttimeout(t) + + +@unittest.skipUnless(os.name == "nt", "Windows specific") +@unittest.skipUnless(multiprocessing, "need multiprocessing") +class TestSocketSharing(SocketTCPTest): + # This must be classmethod and not staticmethod or multiprocessing + # won't be able to bootstrap it. + @classmethod + def remoteProcessServer(cls, q): + # Recreate socket from shared data + sdata = q.get() + message = q.get() + + s = socket.fromshare(sdata) + s2, c = s.accept() + + # Send the message + s2.sendall(message) + s2.close() + s.close() + + def testShare(self): + # Transfer the listening server socket to another process + # and service it from there. + + # Create process: + q = multiprocessing.Queue() + p = multiprocessing.Process(target=self.remoteProcessServer, args=(q,)) + p.start() + + # Get the shared socket data + data = self.serv.share(p.pid) + + # Pass the shared socket to the other process + addr = self.serv.getsockname() + self.serv.close() + q.put(data) + + # The data that the server will send us + message = b"slapmahfro" + q.put(message) + + # Connect + s = socket.create_connection(addr) + # listen for the data + m = [] + while True: + data = s.recv(100) + if not data: + break + m.append(data) + s.close() + received = b"".join(m) + self.assertEqual(received, message) + p.join() + + def testShareLength(self): + data = self.serv.share(os.getpid()) + self.assertRaises(ValueError, socket.fromshare, data[:-1]) + self.assertRaises(ValueError, socket.fromshare, data+b"foo") + + def compareSockets(self, org, other): + # socket sharing is expected to work only for blocking socket + # since the internal python timeout value isn't transferred. + self.assertEqual(org.gettimeout(), None) + self.assertEqual(org.gettimeout(), other.gettimeout()) + + self.assertEqual(org.family, other.family) + self.assertEqual(org.type, other.type) + # If the user specified "0" for proto, then + # internally windows will have picked the correct value. + # Python introspection on the socket however will still return + # 0. For the shared socket, the python value is recreated + # from the actual value, so it may not compare correctly. + if org.proto != 0: + self.assertEqual(org.proto, other.proto) + + def testShareLocal(self): + data = self.serv.share(os.getpid()) + s = socket.fromshare(data) + try: + self.compareSockets(self.serv, s) + finally: + s.close() + + def testTypes(self): + families = [socket.AF_INET, socket.AF_INET6] + types = [socket.SOCK_STREAM, socket.SOCK_DGRAM] + for f in families: + for t in types: + try: + source = socket.socket(f, t) + except OSError: + continue # This combination is not supported + try: + data = source.share(os.getpid()) + shared = socket.fromshare(data) + try: + self.compareSockets(source, shared) + finally: + shared.close() + finally: + source.close() + + +class SendfileUsingSendTest(ThreadedTCPSocketTest): + """ + Test the send() implementation of socket.sendfile(). + """ + + FILESIZE = (10 * 1024 * 1024) # 10 MiB + BUFSIZE = 8192 + FILEDATA = b"" + TIMEOUT = 2 + + @classmethod + def setUpClass(cls): + def chunks(total, step): + assert total >= step + while total > step: + yield step + total -= step + if total: + yield total + + chunk = b"".join([random.choice(string.ascii_letters).encode() + for i in range(cls.BUFSIZE)]) + with open(support.TESTFN, 'wb') as f: + for csize in chunks(cls.FILESIZE, cls.BUFSIZE): + f.write(chunk) + with open(support.TESTFN, 'rb') as f: + cls.FILEDATA = f.read() + assert len(cls.FILEDATA) == cls.FILESIZE + + @classmethod + def tearDownClass(cls): + support.unlink(support.TESTFN) + + def accept_conn(self): + self.serv.settimeout(self.TIMEOUT) + conn, addr = self.serv.accept() + conn.settimeout(self.TIMEOUT) + self.addCleanup(conn.close) + return conn + + def recv_data(self, conn): + received = [] + while True: + chunk = conn.recv(self.BUFSIZE) + if not chunk: + break + received.append(chunk) + return b''.join(received) + + def meth_from_sock(self, sock): + # Depending on the mixin class being run return either send() + # or sendfile() method implementation. + return getattr(sock, "_sendfile_use_send") + + # regular file + + def _testRegularFile(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address) as sock, file as file: + meth = self.meth_from_sock(sock) + sent = meth(file) + self.assertEqual(sent, self.FILESIZE) + self.assertEqual(file.tell(), self.FILESIZE) + + def testRegularFile(self): + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), self.FILESIZE) + self.assertEqual(data, self.FILEDATA) + + # non regular file + + def _testNonRegularFile(self): + address = self.serv.getsockname() + file = io.BytesIO(self.FILEDATA) + with socket.create_connection(address) as sock, file as file: + sent = sock.sendfile(file) + self.assertEqual(sent, self.FILESIZE) + self.assertEqual(file.tell(), self.FILESIZE) + self.assertRaises(socket._GiveupOnSendfile, + sock._sendfile_use_sendfile, file) + + def testNonRegularFile(self): + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), self.FILESIZE) + self.assertEqual(data, self.FILEDATA) + + # empty file + + def _testEmptyFileSend(self): + address = self.serv.getsockname() + filename = support.TESTFN + "2" + with open(filename, 'wb'): + self.addCleanup(support.unlink, filename) + file = open(filename, 'rb') + with socket.create_connection(address) as sock, file as file: + meth = self.meth_from_sock(sock) + sent = meth(file) + self.assertEqual(sent, 0) + self.assertEqual(file.tell(), 0) + + def testEmptyFileSend(self): + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(data, b"") + + # offset + + def _testOffset(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address) as sock, file as file: + meth = self.meth_from_sock(sock) + sent = meth(file, offset=5000) + self.assertEqual(sent, self.FILESIZE - 5000) + self.assertEqual(file.tell(), self.FILESIZE) + + def testOffset(self): + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), self.FILESIZE - 5000) + self.assertEqual(data, self.FILEDATA[5000:]) + + # count + + def _testCount(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address, timeout=2) as sock, file as file: + count = 5000007 + meth = self.meth_from_sock(sock) + sent = meth(file, count=count) + self.assertEqual(sent, count) + self.assertEqual(file.tell(), count) + + def testCount(self): + count = 5000007 + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), count) + self.assertEqual(data, self.FILEDATA[:count]) + + # count small + + def _testCountSmall(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address, timeout=2) as sock, file as file: + count = 1 + meth = self.meth_from_sock(sock) + sent = meth(file, count=count) + self.assertEqual(sent, count) + self.assertEqual(file.tell(), count) + + def testCountSmall(self): + count = 1 + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), count) + self.assertEqual(data, self.FILEDATA[:count]) + + # count + offset + + def _testCountWithOffset(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address, timeout=2) as sock, file as file: + count = 100007 + meth = self.meth_from_sock(sock) + sent = meth(file, offset=2007, count=count) + self.assertEqual(sent, count) + self.assertEqual(file.tell(), count + 2007) + + def testCountWithOffset(self): + count = 100007 + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), count) + self.assertEqual(data, self.FILEDATA[2007:count+2007]) + + # non blocking sockets are not supposed to work + + def _testNonBlocking(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address) as sock, file as file: + sock.setblocking(False) + meth = self.meth_from_sock(sock) + self.assertRaises(ValueError, meth, file) + self.assertRaises(ValueError, sock.sendfile, file) + + def testNonBlocking(self): + conn = self.accept_conn() + if conn.recv(8192): + self.fail('was not supposed to receive any data') + + # timeout (non-triggered) + + def _testWithTimeout(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address, timeout=2) as sock, file as file: + meth = self.meth_from_sock(sock) + sent = meth(file) + self.assertEqual(sent, self.FILESIZE) + + def testWithTimeout(self): + conn = self.accept_conn() + data = self.recv_data(conn) + self.assertEqual(len(data), self.FILESIZE) + self.assertEqual(data, self.FILEDATA) + + # timeout (triggered) + + def _testWithTimeoutTriggeredSend(self): + address = self.serv.getsockname() + file = open(support.TESTFN, 'rb') + with socket.create_connection(address, timeout=0.01) as sock, \ + file as file: + meth = self.meth_from_sock(sock) + self.assertRaises(socket.timeout, meth, file) + + def testWithTimeoutTriggeredSend(self): + conn = self.accept_conn() + conn.recv(88192) + + # errors + + def _test_errors(self): + pass + + def test_errors(self): + with open(support.TESTFN, 'rb') as file: + with socket.socket(type=socket.SOCK_DGRAM) as s: + meth = self.meth_from_sock(s) + self.assertRaisesRegex( + ValueError, "SOCK_STREAM", meth, file) + with open(support.TESTFN, 'rt') as file: + with socket.socket() as s: + meth = self.meth_from_sock(s) + self.assertRaisesRegex( + ValueError, "binary mode", meth, file) + with open(support.TESTFN, 'rb') as file: + with socket.socket() as s: + meth = self.meth_from_sock(s) + self.assertRaisesRegex(TypeError, "positive integer", + meth, file, count='2') + self.assertRaisesRegex(TypeError, "positive integer", + meth, file, count=0.1) + self.assertRaisesRegex(ValueError, "positive integer", + meth, file, count=0) + self.assertRaisesRegex(ValueError, "positive integer", + meth, file, count=-1) + + +@unittest.skipUnless(hasattr(os, "sendfile"), + 'os.sendfile() required for this test.') +class SendfileUsingSendfileTest(SendfileUsingSendTest): + """ + Test the sendfile() implementation of socket.sendfile(). + """ + def meth_from_sock(self, sock): + return getattr(sock, "_sendfile_use_sendfile") + + +@unittest.skipUnless(HAVE_SOCKET_ALG, 'AF_ALG required') +class LinuxKernelCryptoAPI(unittest.TestCase): + # tests for AF_ALG + def create_alg(self, typ, name): + sock = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0) + try: + sock.bind((typ, name)) + except FileNotFoundError as e: + # type / algorithm is not available + sock.close() + raise unittest.SkipTest(str(e), typ, name) + else: + return sock + + # bpo-31705: On kernel older than 4.5, sendto() failed with ENOKEY, + # at least on ppc64le architecture + @support.requires_linux_version(4, 5) + def test_sha256(self): + expected = bytes.fromhex("ba7816bf8f01cfea414140de5dae2223b00361a396" + "177a9cb410ff61f20015ad") + with self.create_alg('hash', 'sha256') as algo: + op, _ = algo.accept() + with op: + op.sendall(b"abc") + self.assertEqual(op.recv(512), expected) + + op, _ = algo.accept() + with op: + op.send(b'a', socket.MSG_MORE) + op.send(b'b', socket.MSG_MORE) + op.send(b'c', socket.MSG_MORE) + op.send(b'') + self.assertEqual(op.recv(512), expected) + + def test_hmac_sha1(self): + expected = bytes.fromhex("effcdf6ae5eb2fa2d27416d5f184df9c259a7c79") + with self.create_alg('hash', 'hmac(sha1)') as algo: + algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, b"Jefe") + op, _ = algo.accept() + with op: + op.sendall(b"what do ya want for nothing?") + self.assertEqual(op.recv(512), expected) + + # Although it should work with 3.19 and newer the test blocks on + # Ubuntu 15.10 with Kernel 4.2.0-19. + @support.requires_linux_version(4, 3) + def test_aes_cbc(self): + key = bytes.fromhex('06a9214036b8a15b512e03d534120006') + iv = bytes.fromhex('3dafba429d9eb430b422da802c9fac41') + msg = b"Single block msg" + ciphertext = bytes.fromhex('e353779c1079aeb82708942dbe77181a') + msglen = len(msg) + with self.create_alg('skcipher', 'cbc(aes)') as algo: + algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, key) + op, _ = algo.accept() + with op: + op.sendmsg_afalg(op=socket.ALG_OP_ENCRYPT, iv=iv, + flags=socket.MSG_MORE) + op.sendall(msg) + self.assertEqual(op.recv(msglen), ciphertext) + + op, _ = algo.accept() + with op: + op.sendmsg_afalg([ciphertext], + op=socket.ALG_OP_DECRYPT, iv=iv) + self.assertEqual(op.recv(msglen), msg) + + # long message + multiplier = 1024 + longmsg = [msg] * multiplier + op, _ = algo.accept() + with op: + op.sendmsg_afalg(longmsg, + op=socket.ALG_OP_ENCRYPT, iv=iv) + enc = op.recv(msglen * multiplier) + self.assertEqual(len(enc), msglen * multiplier) + self.assertTrue(enc[:msglen], ciphertext) + + op, _ = algo.accept() + with op: + op.sendmsg_afalg([enc], + op=socket.ALG_OP_DECRYPT, iv=iv) + dec = op.recv(msglen * multiplier) + self.assertEqual(len(dec), msglen * multiplier) + self.assertEqual(dec, msg * multiplier) + + @support.requires_linux_version(4, 9) # see issue29324 + def test_aead_aes_gcm(self): + key = bytes.fromhex('c939cc13397c1d37de6ae0e1cb7c423c') + iv = bytes.fromhex('b3d8cc017cbb89b39e0f67e2') + plain = bytes.fromhex('c3b3c41f113a31b73d9a5cd432103069') + assoc = bytes.fromhex('24825602bd12a984e0092d3e448eda5f') + expected_ct = bytes.fromhex('93fe7d9e9bfd10348a5606e5cafa7354') + expected_tag = bytes.fromhex('0032a1dc85f1c9786925a2e71d8272dd') + + taglen = len(expected_tag) + assoclen = len(assoc) + + with self.create_alg('aead', 'gcm(aes)') as algo: + algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, key) + algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_AEAD_AUTHSIZE, + None, taglen) + + # send assoc, plain and tag buffer in separate steps + op, _ = algo.accept() + with op: + op.sendmsg_afalg(op=socket.ALG_OP_ENCRYPT, iv=iv, + assoclen=assoclen, flags=socket.MSG_MORE) + op.sendall(assoc, socket.MSG_MORE) + op.sendall(plain) + res = op.recv(assoclen + len(plain) + taglen) + self.assertEqual(expected_ct, res[assoclen:-taglen]) + self.assertEqual(expected_tag, res[-taglen:]) + + # now with msg + op, _ = algo.accept() + with op: + msg = assoc + plain + op.sendmsg_afalg([msg], op=socket.ALG_OP_ENCRYPT, iv=iv, + assoclen=assoclen) + res = op.recv(assoclen + len(plain) + taglen) + self.assertEqual(expected_ct, res[assoclen:-taglen]) + self.assertEqual(expected_tag, res[-taglen:]) + + # create anc data manually + pack_uint32 = struct.Struct('I').pack + op, _ = algo.accept() + with op: + msg = assoc + plain + op.sendmsg( + [msg], + ([socket.SOL_ALG, socket.ALG_SET_OP, pack_uint32(socket.ALG_OP_ENCRYPT)], + [socket.SOL_ALG, socket.ALG_SET_IV, pack_uint32(len(iv)) + iv], + [socket.SOL_ALG, socket.ALG_SET_AEAD_ASSOCLEN, pack_uint32(assoclen)], + ) + ) + res = op.recv(len(msg) + taglen) + self.assertEqual(expected_ct, res[assoclen:-taglen]) + self.assertEqual(expected_tag, res[-taglen:]) + + # decrypt and verify + op, _ = algo.accept() + with op: + msg = assoc + expected_ct + expected_tag + op.sendmsg_afalg([msg], op=socket.ALG_OP_DECRYPT, iv=iv, + assoclen=assoclen) + res = op.recv(len(msg) - taglen) + self.assertEqual(plain, res[assoclen:]) + + @support.requires_linux_version(4, 3) # see test_aes_cbc + def test_drbg_pr_sha256(self): + # deterministic random bit generator, prediction resistance, sha256 + with self.create_alg('rng', 'drbg_pr_sha256') as algo: + extra_seed = os.urandom(32) + algo.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, extra_seed) + op, _ = algo.accept() + with op: + rn = op.recv(32) + self.assertEqual(len(rn), 32) + + def test_sendmsg_afalg_args(self): + sock = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0) + with sock: + with self.assertRaises(TypeError): + sock.sendmsg_afalg() + + with self.assertRaises(TypeError): + sock.sendmsg_afalg(op=None) + + with self.assertRaises(TypeError): + sock.sendmsg_afalg(1) + + with self.assertRaises(TypeError): + sock.sendmsg_afalg(op=socket.ALG_OP_ENCRYPT, assoclen=None) + + with self.assertRaises(TypeError): + sock.sendmsg_afalg(op=socket.ALG_OP_ENCRYPT, assoclen=-1) + + def test_main(): tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest, TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest, diff --git a/src/python/Python-2.7.18/Lib/test/test_ssl.py b/src/python/Python-2.7.18/Lib/test/test_ssl.py index ef2e59c1d..ff4adb46b 100644 --- a/src/python/Python-2.7.18/Lib/test/test_ssl.py +++ b/src/python/Python-2.7.18/Lib/test/test_ssl.py @@ -6,8 +6,13 @@ from test import test_support as support from test.script_helper import assert_python_ok import asyncore +# import unittest.mock +from mock import Mock +from test import support +import re import socket import select +import struct import time import datetime import gc @@ -85,6 +90,35 @@ def data_file(*name): OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, "OP_ENABLE_MIDDLEBOX_COMPAT", 0) +SIGNED_CERTFILE_HOSTNAME = 'localhost' +SIGNED_CERTFILE2_HOSTNAME = 'fakehostname' +NOSANFILE = data_file("nosan.pem") +NOSAN_HOSTNAME = 'localhost' + + +def testing_context(server_cert=SIGNED_CERTFILE): + """Create context + + client_context, server_context, hostname = testing_context() + """ + if server_cert == SIGNED_CERTFILE: + hostname = SIGNED_CERTFILE_HOSTNAME + elif server_cert == SIGNED_CERTFILE2: + hostname = SIGNED_CERTFILE2_HOSTNAME + elif server_cert == NOSANFILE: + hostname = NOSAN_HOSTNAME + else: + raise ValueError(server_cert) + + client_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) + client_context.load_verify_locations(SIGNING_CA) + + server_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) + server_context.load_cert_chain(server_cert) + server_context.load_verify_locations(SIGNING_CA) + + return client_context, server_context, hostname + def handle_error(prefix): exc_format = ' '.join(traceback.format_exception(*sys.exc_info())) @@ -1753,7 +1787,7 @@ def wrap_conn(self): return False else: # OSError may occur with wrong protocols, e.g. both - # sides use PROTOCOL_TLS_SERVER. + # sides use PROTOCOL_TLS. # # XXX Various errors can have happened here, for example # a mismatching protocol version, an invalid certificate, @@ -2153,7 +2187,7 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success, class ThreadedTests(unittest.TestCase): - + # FIX: client_context, server_context, hostname = testing_context() @skip_if_broken_ubuntu_ssl def test_echo(self): """Basic test of an SSL client connecting to a server""" @@ -2232,8 +2266,7 @@ def test_crl_check(self): server = ThreadedEchoServer(context=server_context, chatty=True) with server: with closing(context.wrap_socket(socket.socket())) as s: - with self.assertRaisesRegexp(ssl.SSLError, - "certificate verify failed"): + with self.assertRaisesRegexp(ssl.SSLError, "certificate verify failed"): s.connect((HOST, server.port)) # now load a CRL file. The CRL file is signed by the CA. @@ -2261,8 +2294,7 @@ def test_check_hostname(self): # correct hostname should verify server = ThreadedEchoServer(context=server_context, chatty=True) with server: - with closing(context.wrap_socket(socket.socket(), - server_hostname="localhost")) as s: + with closing(context.wrap_socket(socket.socket(), server_hostname="localhost")) as s: s.connect((HOST, server.port)) cert = s.getpeercert() self.assertTrue(cert, "Can't get peer certificate.") @@ -2270,8 +2302,7 @@ def test_check_hostname(self): # incorrect hostname should raise an exception server = ThreadedEchoServer(context=server_context, chatty=True) with server: - with closing(context.wrap_socket(socket.socket(), - server_hostname="invalid")) as s: + with closing(context.wrap_socket(socket.socket(), server_hostname="invalid")) as s: with self.assertRaisesRegexp(ssl.CertificateError, "hostname 'invalid' doesn't match u?'localhost'"): s.connect((HOST, server.port)) @@ -3240,6 +3271,481 @@ def test_read_write_after_close_raises_valuerror(self): self.assertRaises(ValueError, s.read, 1024) self.assertRaises(ValueError, s.write, b'hello') + def test_pha_no_pha_client(self): + client_context, server_context, hostname = testing_context() + server_context.post_handshake_auth = True + server_context.verify_mode = ssl.CERT_REQUIRED + client_context.load_cert_chain(SIGNED_CERTFILE) + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing (client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + with self.assertRaisesRegexp(ssl.SSLError, 'not server'): + s.verify_client_post_handshake() + s.write(b'PHA') + self.assertIn(b'extension not received', s.recv(1024)) + + def test_pha_no_pha_server(self): + # server doesn't have PHA enabled, cert is requested in handshake + client_context, server_context, hostname = testing_context() + server_context.verify_mode = ssl.CERT_REQUIRED + client_context.post_handshake_auth = True + client_context.load_cert_chain(SIGNED_CERTFILE) + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + s.write(b'HASCERT') + self.assertEqual(s.recv(1024), b'TRUE\n') + # PHA doesn't fail if there is already a cert + s.write(b'PHA') + self.assertEqual(s.recv(1024), b'OK\n') + s.write(b'HASCERT') + self.assertEqual(s.recv(1024), b'TRUE\n') + + def test_pha_not_tls13(self): + # TLS 1.2 + client_context, server_context, hostname = testing_context() + server_context.verify_mode = ssl.CERT_REQUIRED + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 + client_context.post_handshake_auth = True + client_context.load_cert_chain(SIGNED_CERTFILE) + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with client_context.wrap_socket(socket.socket(), + server_hostname=hostname) as s: + s.connect((HOST, server.port)) + # PHA fails for TLS != 1.3 + s.write(b'PHA') + self.assertIn(b'WRONG_SSL_VERSION', s.recv(1024)) + + def test_bpo37428_pha_cert_none(self): + # verify that post_handshake_auth does not implicitly enable cert + # validation. + hostname = SIGNED_CERTFILE_HOSTNAME + client_context = ssl.SSLContext(ssl.PROTOCOL_TLS) + client_context.post_handshake_auth = True + client_context.load_cert_chain(SIGNED_CERTFILE) + # no cert validation and CA on client side + client_context.check_hostname = False + client_context.verify_mode = ssl.CERT_NONE + + server_context = ssl.SSLContext(ssl.PROTOCOL_TLS) + server_context.load_cert_chain(SIGNED_CERTFILE) + server_context.load_verify_locations(SIGNING_CA) + server_context.post_handshake_auth = True + server_context.verify_mode = ssl.CERT_REQUIRED + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + s.write(b'HASCERT') + self.assertEqual(s.recv(1024), b'FALSE\n') + s.write(b'PHA') + self.assertEqual(s.recv(1024), b'OK\n') + s.write(b'HASCERT') + self.assertEqual(s.recv(1024), b'TRUE\n') + # server cert has not been validated + self.assertEqual(s.getpeercert(), {}) + + +HAS_KEYLOG = hasattr(ssl.SSLContext, 'keylog_filename') +requires_keylog = unittest.skipUnless( + HAS_KEYLOG, 'test requires OpenSSL 1.1.1 with keylog callback') + +class TestSSLDebug(unittest.TestCase): + + def keylog_lines(self, fname=support.TESTFN): + with open(fname) as f: + return len(list(f)) + + @requires_keylog + def test_keylog_defaults(self): + self.addCleanup(support.unlink, support.TESTFN) + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) + self.assertEqual(ctx.keylog_filename, None) + + self.assertFalse(os.path.isfile(support.TESTFN)) + ctx.keylog_filename = support.TESTFN + self.assertEqual(ctx.keylog_filename, support.TESTFN) + self.assertTrue(os.path.isfile(support.TESTFN)) + self.assertEqual(self.keylog_lines(), 1) + + ctx.keylog_filename = None + self.assertEqual(ctx.keylog_filename, None) + + with self.assertRaises((IsADirectoryError, PermissionError)): + # Windows raises PermissionError + ctx.keylog_filename = os.path.dirname( + os.path.abspath(support.TESTFN)) + + with self.assertRaises(TypeError): + ctx.keylog_filename = 1 + + @requires_keylog + def test_keylog_filename(self): + self.addCleanup(support.unlink, support.TESTFN) + client_context, server_context, hostname = testing_context() + + client_context.keylog_filename = support.TESTFN + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + # header, 5 lines for TLS 1.3 + self.assertEqual(self.keylog_lines(), 6) + + client_context.keylog_filename = None + server_context.keylog_filename = support.TESTFN + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + self.assertGreaterEqual(self.keylog_lines(), 11) + + client_context.keylog_filename = support.TESTFN + server_context.keylog_filename = support.TESTFN + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + self.assertGreaterEqual(self.keylog_lines(), 21) + + client_context.keylog_filename = None + server_context.keylog_filename = None + + @requires_keylog + @unittest.skipIf(sys.flags.ignore_environment, + "test is not compatible with ignore_environment") + def test_keylog_env(self): + self.addCleanup(support.unlink, support.TESTFN) + with mock.patch.dict(os.environ): + os.environ['SSLKEYLOGFILE'] = support.TESTFN + self.assertEqual(os.environ['SSLKEYLOGFILE'], support.TESTFN) + + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS) + self.assertEqual(ctx.keylog_filename, None) + + ctx = ssl.create_default_context() + self.assertEqual(ctx.keylog_filename, support.TESTFN) + + ctx = ssl._create_stdlib_context() + self.assertEqual(ctx.keylog_filename, support.TESTFN) + + def test_msg_callback(self): + client_context, server_context, hostname = testing_context() + + def msg_cb(conn, direction, version, content_type, msg_type, data): + pass + + self.assertIs(client_context._msg_callback, None) + client_context._msg_callback = msg_cb + self.assertIs(client_context._msg_callback, msg_cb) + with self.assertRaises(TypeError): + client_context._msg_callback = object() + + def test_msg_callback_tls12(self): + client_context, server_context, hostname = testing_context() + client_context.options |= ssl.OP_NO_TLSv1_3 + + msg = [] + + def msg_cb(conn, direction, version, content_type, msg_type, data): + self.assertIsInstance(conn, ssl.SSLSocket) + self.assertIsInstance(data, bytes) + self.assertIn(direction, {'read', 'write'}) + msg.append((direction, version, content_type, msg_type)) + + client_context._msg_callback = msg_cb + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + + self.assertIn( + ("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE, + _TLSMessageType.SERVER_KEY_EXCHANGE), + msg + ) + self.assertIn( + ("write", TLSVersion.TLSv1_2, _TLSContentType.CHANGE_CIPHER_SPEC, + _TLSMessageType.CHANGE_CIPHER_SPEC), + msg + ) + + def test_msg_callback_deadlock_bpo43577(self): + client_context, server_context, hostname = testing_context() + server_context2 = testing_context()[1] + + def msg_cb(conn, direction, version, content_type, msg_type, data): + pass + + def sni_cb(sock, servername, ctx): + sock.context = server_context2 + + server_context._msg_callback = msg_cb + server_context.sni_callback = sni_cb + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + + +def set_socket_so_linger_on_with_zero_timeout(sock): + sock.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0)) + + +class TestPreHandshakeClose(unittest.TestCase): + """Verify behavior of close sockets with received data before to the handshake. + """ + + class SingleConnectionTestServerThread(threading.Thread): + + def __init__(self, _dummy=object(), name="name", call_after_accept=False): + self.call_after_accept = call_after_accept + self.received_data = b'' # set by .run() + self.wrap_error = None # set by .run() + self.listener = None # set by .start() + self.port = None # set by .start() + super().__init__(name=name) + + def __enter__(self): + self.start() + return self + + def __exit__(self, *args): + try: + if self.listener: + self.listener.close() + except (OSError, socket_error): + pass + self.join() + self.wrap_error = None # avoid dangling references + + def start(self): + self.ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) + self.ssl_ctx.verify_mode = ssl.CERT_REQUIRED + self.ssl_ctx.load_verify_locations(cafile=ONLYCERT) + self.ssl_ctx.load_cert_chain(certfile=ONLYCERT, keyfile=ONLYKEY) + self.listener = socket.socket() + self.port = support.bind_port(self.listener) + self.listener.settimeout(2.0) + self.listener.listen(1) + super().start() + + def run(self): + conn, address = self.listener.accept() + self.listener.close() + with conn: + if self.call_after_accept(conn): + return + try: + tls_socket = self.ssl_ctx.wrap_socket(conn, server_side=True) + except OSError as err: # ssl.SSLError inherits from OSError + self.wrap_error = err + else: + try: + self.received_data = tls_socket.recv(400) + except OSError: + pass # closed, protocol error, etc. + + def non_linux_skip_if_other_okay_error(self, err): + if sys.platform == "linux": + return # Expect the full test setup to always work on Linux. + if (isinstance(err, ConnectionResetError) or + (isinstance(err, OSError) and err.errno == errno.EINVAL) or + re.search('wrong.version.number', getattr(err, "reason", ""), re.I)): + # On Windows the TCP RST leads to a ConnectionResetError + # (ECONNRESET) which Linux doesn't appear to surface to userspace. + # If wrap_socket() winds up on the "if connected:" path and doing + # the actual wrapping... we get an SSLError from OpenSSL. Typically + # WRONG_VERSION_NUMBER. While appropriate, neither is the scenario + # we're specifically trying to test. The way this test is written + # is known to work on Linux. We'll skip it anywhere else that it + # does not present as doing so. + self.skipTest("Could not recreate conditions on {sys.platform}: {err}".format(sys.plattform,err)) + # If maintaining this conditional winds up being a problem. + # just turn this into an unconditional skip anything but Linux. + # The important thing is that our CI has the logic covered. + + def test_preauth_data_to_tls_server(self): + server_accept_called = threading.Event() + ready_for_server_wrap_socket = threading.Event() + + def call_after_accept(unused): + server_accept_called.set() + if not ready_for_server_wrap_socket.wait(2.0): + raise RuntimeError("wrap_socket event never set, test may fail.") + return False # Tell the server thread to continue. + + server = self.SingleConnectionTestServerThread( + call_after_accept=call_after_accept, + name="preauth_data_to_tls_server") + server.__enter__() # starts it + self.addCleanup(server.__exit__) # ... & unittest.TestCase stops it. + + with socket.socket() as client: + client.connect(server.listener.getsockname()) + # This forces an immediate connection close via RST on .close(). + set_socket_so_linger_on_with_zero_timeout(client) + client.setblocking(False) + + server_accept_called.wait() + client.send(b"DELETE /data HTTP/1.0\r\n\r\n") + client.close() # RST + + ready_for_server_wrap_socket.set() + server.join() + wrap_error = server.wrap_error + self.assertEqual(b"", server.received_data) + self.assertIsInstance(wrap_error, OSError) # All platforms. + self.non_linux_skip_if_other_okay_error(wrap_error) + self.assertIsInstance(wrap_error, ssl.SSLError) + self.assertIn("before TLS handshake with data", wrap_error.args[1]) + self.assertIn("before TLS handshake with data", wrap_error.reason) + self.assertNotEqual(0, wrap_error.args[0]) + self.assertIsNone(wrap_error.library, msg="attr must exist") + + def test_preauth_data_to_tls_client(self): + client_can_continue_with_wrap_socket = threading.Event() + + def call_after_accept(conn_to_client): + # This forces an immediate connection close via RST on .close(). + set_socket_so_linger_on_with_zero_timeout(conn_to_client) + conn_to_client.send( + b"HTTP/1.0 307 Temporary Redirect\r\n" + b"Location: https://example.com/someone-elses-server\r\n" + b"\r\n") + conn_to_client.close() # RST + client_can_continue_with_wrap_socket.set() + return True # Tell the server to stop. + + server = self.SingleConnectionTestServerThread( + call_after_accept=call_after_accept, + name="preauth_data_to_tls_client") + server.__enter__() # starts it + self.addCleanup(server.__exit__) # ... & unittest.TestCase stops it. + + # Redundant; call_after_accept sets SO_LINGER on the accepted conn. + set_socket_so_linger_on_with_zero_timeout(server.listener) + + with socket.socket() as client: + client.connect(server.listener.getsockname()) + if not client_can_continue_with_wrap_socket.wait(2.0): + self.fail("test server took too long.") + ssl_ctx = ssl.create_default_context() + try: + tls_client = ssl_ctx.wrap_socket( + client, server_hostname="localhost") + except OSError as err: # SSLError inherits from OSError + wrap_error = err + received_data = b"" + else: + wrap_error = None + received_data = tls_client.recv(400) + tls_client.close() + + server.join() + self.assertEqual(b"", received_data) + self.assertIsInstance(wrap_error, OSError) # All platforms. + self.non_linux_skip_if_other_okay_error(wrap_error) + self.assertIsInstance(wrap_error, ssl.SSLError) + self.assertIn("before TLS handshake with data", wrap_error.args[1]) + self.assertIn("before TLS handshake with data", wrap_error.reason) + self.assertNotEqual(0, wrap_error.args[0]) + self.assertIsNone(wrap_error.library, msg="attr must exist") + + def test_https_client_non_tls_response_ignored(self): + server_responding = threading.Event() + + class SynchronizedHTTPSConnection(http.client.HTTPSConnection): + def connect(self): + # Call clear text HTTP connect(), not the encrypted HTTPS (TLS) + # connect(): wrap_socket() is called manually below. + http.client.HTTPConnection.connect(self) + + # Wait for our fault injection server to have done its thing. + if not server_responding.wait(support.SHORT_TIMEOUT) and support.verbose: + sys.stdout.write("server_responding event never set.") + self.sock = self._context.wrap_socket( + self.sock, server_hostname=self.host) + + def call_after_accept(conn_to_client): + # This forces an immediate connection close via RST on .close(). + set_socket_so_linger_on_with_zero_timeout(conn_to_client) + conn_to_client.send( + b"HTTP/1.0 402 Payment Required\r\n" + b"\r\n") + conn_to_client.close() # RST + server_responding.set() + return True # Tell the server to stop. + + timeout = 2.0 + server = self.SingleConnectionTestServerThread( + call_after_accept=call_after_accept, + name="non_tls_http_RST_responder", + timeout=timeout) + server.__enter__() # starts it + self.addCleanup(server.__exit__) # ... & unittest.TestCase stops it. + # Redundant; call_after_accept sets SO_LINGER on the accepted conn. + set_socket_so_linger_on_with_zero_timeout(server.listener) + + connection = SynchronizedHTTPSConnection( + server.listener.getsockname()[0], + port=server.port, + context=ssl.create_default_context(), + timeout=timeout, + ) + + # There are lots of reasons this raises as desired, long before this + # test was added. Sending the request requires a successful TLS wrapped + # socket; that fails if the connection is broken. It may seem pointless + # to test this. It serves as an illustration of something that we never + # want to happen... properly not happening. + with self.assertRaises(OSError): + connection.request("HEAD", "/test", headers={"Host": "localhost"}) + response = connection.getresponse() + + server.join() + + def test_bpo37428_pha_cert_none(self): + # verify that post_handshake_auth does not implicitly enable cert + # validation. + hostname = SIGNED_CERTFILE_HOSTNAME + client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + client_context.post_handshake_auth = True + client_context.load_cert_chain(SIGNED_CERTFILE) + # no cert validation and CA on client side + client_context.check_hostname = False + client_context.verify_mode = ssl.CERT_NONE + + server_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + server_context.load_cert_chain(SIGNED_CERTFILE) + server_context.load_verify_locations(SIGNING_CA) + server_context.post_handshake_auth = True + server_context.verify_mode = ssl.CERT_REQUIRED + + server = ThreadedEchoServer(context=server_context, chatty=False) + with server: + with closing(client_context.wrap_socket(socket.socket(), server_hostname=hostname)) as s: + s.connect((HOST, server.port)) + s.write(b'HASCERT') + self.assertEqual(s.recv(1024), b'FALSE\n') + s.write(b'PHA') + self.assertEqual(s.recv(1024), b'OK\n') + s.write(b'HASCERT') + self.assertEqual(s.recv(1024), b'TRUE\n') + # server cert has not been validated + self.assertEqual(s.getpeercert(), {}) + def test_main(verbose=False): if support.verbose: diff --git a/src/python/Python-2.7.18/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst b/src/python/Python-2.7.18/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst new file mode 100644 index 000000000..bae008150 --- /dev/null +++ b/src/python/Python-2.7.18/Misc/NEWS.d/next/Core and Builtins/2020-01-22-15-53-37.bpo-39421.O3nG7u.rst @@ -0,0 +1,2 @@ +Fix possible crashes when operating with the functions in the :mod:`heapq` +module and custom comparison operators. diff --git a/src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2017-12-19-09-23-46.bpo-32373.8qAkoW.rst b/src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2017-12-19-09-23-46.bpo-32373.8qAkoW.rst new file mode 100644 index 000000000..9772dda35 --- /dev/null +++ b/src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2017-12-19-09-23-46.bpo-32373.8qAkoW.rst @@ -0,0 +1 @@ +Add socket.getblocking() method. diff --git a/src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2019-06-27-13-27-02.bpo-37428._wcwUd.rst b/src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2019-06-27-13-27-02.bpo-37428._wcwUd.rst new file mode 100644 index 000000000..2cdce6b24 --- /dev/null +++ b/src/python/Python-2.7.18/Misc/NEWS.d/next/Library/2019-06-27-13-27-02.bpo-37428._wcwUd.rst @@ -0,0 +1,4 @@ +SSLContext.post_handshake_auth = True no longer sets +SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the +option is documented as ignored for clients, OpenSSL implicitly enables cert +chain validation when the flag is set. diff --git a/src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst b/src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst new file mode 100644 index 000000000..69b9de1be --- /dev/null +++ b/src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2020-05-28-06-06-47.bpo-40791.QGZClX.rst @@ -0,0 +1 @@ +Add ``volatile`` to the accumulator variable in ``hmac.compare_digest``, making constant-time-defeating optimizations less likely. \ No newline at end of file diff --git a/src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2023-08-22-17-39-12.gh-issue-108310.fVM3sg.rst b/src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2023-08-22-17-39-12.gh-issue-108310.fVM3sg.rst new file mode 100644 index 000000000..403c77a9d --- /dev/null +++ b/src/python/Python-2.7.18/Misc/NEWS.d/next/Security/2023-08-22-17-39-12.gh-issue-108310.fVM3sg.rst @@ -0,0 +1,7 @@ +Fixed an issue where instances of :class:`ssl.SSLSocket` were vulnerable to +a bypass of the TLS handshake and included protections (like certificate +verification) and treating sent unencrypted data as if it were +post-handshake TLS encrypted data. Security issue reported as +`CVE-2023-40217 +`_ by +Aapo Oksman. Patch by Gregory P. Smith. diff --git a/src/python/Python-2.7.18/Modules/_heapqmodule.c b/src/python/Python-2.7.18/Modules/_heapqmodule.c index 5b0ef6915..9e2c5c784 100644 --- a/src/python/Python-2.7.18/Modules/_heapqmodule.c +++ b/src/python/Python-2.7.18/Modules/_heapqmodule.c @@ -52,7 +52,11 @@ _siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) while (pos > startpos) { parentpos = (pos - 1) >> 1; parent = PyList_GET_ITEM(heap, parentpos); + Py_INCREF(newitem); + Py_INCREF(parent); cmp = cmp_lt(newitem, parent); + Py_DECREF(parent); + Py_DECREF(newitem); if (cmp == -1) return -1; if (size != PyList_GET_SIZE(heap)) { @@ -93,9 +97,13 @@ _siftup(PyListObject *heap, Py_ssize_t pos) childpos = 2*pos + 1; /* leftmost child position */ rightpos = childpos + 1; if (rightpos < endpos) { - cmp = cmp_lt( - PyList_GET_ITEM(heap, childpos), - PyList_GET_ITEM(heap, rightpos)); + PyObject* a = PyList_GET_ITEM(heap, childpos); + PyObject* b = PyList_GET_ITEM(heap, rightpos); + Py_INCREF(a); + Py_INCREF(b); + cmp = cmp_lt(a,b); + Py_DECREF(a); + Py_DECREF(b); if (cmp == -1) return -1; if (cmp == 0) @@ -236,7 +244,10 @@ heappushpop(PyObject *self, PyObject *args) return item; } - cmp = cmp_lt(PyList_GET_ITEM(heap, 0), item); + PyObject* top = PyList_GET_ITEM(heap, 0); + Py_INCREF(top); + cmp = cmp_lt(top, item); + Py_DECREF(top); if (cmp == -1) return NULL; if (cmp == 0) { @@ -395,7 +406,11 @@ _siftdownmax(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos) while (pos > startpos){ parentpos = (pos - 1) >> 1; parent = PyList_GET_ITEM(heap, parentpos); + Py_INCREF(parent); + Py_INCREF(newitem); cmp = cmp_lt(parent, newitem); + Py_DECREF(parent); + Py_DECREF(newitem); if (cmp == -1) { Py_DECREF(newitem); return -1; @@ -436,9 +451,13 @@ _siftupmax(PyListObject *heap, Py_ssize_t pos) childpos = 2*pos + 1; /* leftmost child position */ rightpos = childpos + 1; if (rightpos < endpos) { - cmp = cmp_lt( - PyList_GET_ITEM(heap, rightpos), - PyList_GET_ITEM(heap, childpos)); + PyObject* a = PyList_GET_ITEM(heap, rightpos); + PyObject* b = PyList_GET_ITEM(heap, childpos); + Py_INCREF(a); + Py_INCREF(b); + cmp = cmp_lt(a, b); + Py_DECREF(a); + Py_DECREF(b); if (cmp == -1) { Py_DECREF(newitem); return -1; diff --git a/src/python/Python-2.7.18/Modules/_ssl.c b/src/python/Python-2.7.18/Modules/_ssl.c index 98c8a5a4a..6df9f4779 100644 --- a/src/python/Python-2.7.18/Modules/_ssl.c +++ b/src/python/Python-2.7.18/Modules/_ssl.c @@ -324,6 +324,9 @@ typedef struct { PyObject *set_hostname; #endif int check_hostname; +#ifdef TLS1_3_VERSION + int post_handshake_auth; +#endif } PySSLContext; typedef struct { @@ -606,6 +609,28 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock, #endif SSL_set_mode(self->ssl, mode); + /* bpo-37428: newPySSLSocket() sets SSL_VERIFY_POST_HANDSHAKE flag for + * server sockets and SSL_set_post_handshake_auth() for client. */ +// #ifdef TLS1_3_VERSION +// if (sslctx->post_handshake_auth == 1) { +// if (socket_type == PY_SSL_SERVER) { +// /* bpo-37428: OpenSSL does not ignore SSL_VERIFY_POST_HANDSHAKE. +// * Set SSL_VERIFY_POST_HANDSHAKE flag only for server sockets and +// * only in combination with SSL_VERIFY_PEER flag. */ +// int mode = SSL_get_verify_mode(self->ssl); +// if (mode & SSL_VERIFY_PEER) { +// int (*verify_cb)(int, X509_STORE_CTX *) = NULL; +// verify_cb = SSL_get_verify_callback(self->ssl); +// mode |= SSL_VERIFY_POST_HANDSHAKE; +// SSL_set_verify(self->ssl, mode, verify_cb); +// } +// } else { +// /* client socket */ +// SSL_set_post_handshake_auth(self->ssl, 1); +// } +// } +// #endif + #if HAVE_SNI if (server_hostname != NULL) { /* Don't send SNI for IP addresses. We cannot simply use inet_aton() and @@ -2100,6 +2125,36 @@ If the TLS handshake is not yet complete, None is returned"); #endif /* HAVE_OPENSSL_FINISHED */ +/*[clinic input] +_ssl._SSLSocket.verify_client_post_handshake + +Initiate TLS 1.3 post-handshake authentication +[clinic start generated code]*/ + +PyDoc_STRVAR(_ssl__SSLSocket_verify_client_post_handshake__doc__, +"verify_client_post_handshake($self, /)\n" +"--\n" +"\n" +"Initiate TLS 1.3 post-handshake authentication"); + +static PyObject * +_ssl__SSLSocket_verify_client_post_handshake_impl(PySSLSocket *self) +/*[clinic end generated code: output=532147f3b1341425 input=6bfa874810a3d889]*/ +{ +#ifdef TLS1_3_VERSION + int err = SSL_verify_client_post_handshake(self->ssl); + if (err == 0) + return _setSSLError(NULL, 0, __FILE__, __LINE__); + else + Py_RETURN_NONE; +#else + PyErr_SetString(PyExc_NotImplementedError, + "Post-handshake auth is not supported by your " + "OpenSSL version."); + return NULL; +#endif +} + static PyGetSetDef ssl_getsetlist[] = { {"context", (getter) PySSL_get_context, (setter) PySSL_set_context, PySSL_set_context_doc}, @@ -2131,6 +2186,7 @@ static PyMethodDef PySSLMethods[] = { {"tls_unique_cb", (PyCFunction)PySSL_tls_unique_cb, METH_NOARGS, PySSL_tls_unique_cb_doc}, #endif + {"verify_client_post_handshake", (PyCFunction)_ssl__SSLSocket_verify_client_post_handshake_impl, METH_NOARGS, _ssl__SSLSocket_verify_client_post_handshake__doc__}, {NULL, NULL} }; @@ -2308,6 +2364,13 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds) } #endif +#ifdef TLS1_3_VERSION + { + self->post_handshake_auth = 0; + SSL_CTX_set_post_handshake_auth(self->ctx, self->post_handshake_auth); + } +#endif + return (PyObject *)self; } @@ -2527,6 +2590,8 @@ static int set_verify_mode(PySSLContext *self, PyObject *arg, void *c) { int n, mode; + int (*verify_cb)(int, X509_STORE_CTX *) = NULL; + if (!PyArg_Parse(arg, "i", &n)) return -1; if (n == PY_SSL_CERT_NONE) @@ -2540,13 +2605,20 @@ set_verify_mode(PySSLContext *self, PyObject *arg, void *c) "invalid value for verify_mode"); return -1; } + if (mode == SSL_VERIFY_NONE && self->check_hostname) { PyErr_SetString(PyExc_ValueError, "Cannot set verify_mode to CERT_NONE when " "check_hostname is enabled."); return -1; } - SSL_CTX_set_verify(self->ctx, mode, NULL); + + /* bpo-37428: newPySSLSocket() sets SSL_VERIFY_POST_HANDSHAKE flag for + * server sockets and SSL_set_post_handshake_auth() for client. */ + + /* keep current verify cb */ + verify_cb = SSL_CTX_get_verify_callback(self->ctx); + SSL_CTX_set_verify(self->ctx, mode, verify_cb); return 0; } @@ -2651,6 +2723,36 @@ set_check_hostname(PySSLContext *self, PyObject *arg, void *c) return 0; } +static PyObject * +get_post_handshake_auth(PySSLContext *self, void *c) { +#if TLS1_3_VERSION + return PyBool_FromLong(self->post_handshake_auth); +#else + Py_RETURN_NONE; +#endif +} + +#if TLS1_3_VERSION +static int +set_post_handshake_auth(PySSLContext *self, PyObject *arg, void *c) { + if (arg == NULL) { + PyErr_SetString(PyExc_AttributeError, "cannot delete attribute"); + return -1; + } + int pha = PyObject_IsTrue(arg); + + if (pha == -1) { + return -1; + } + self->post_handshake_auth = pha; + + /* bpo-37428: newPySSLSocket() sets SSL_VERIFY_POST_HANDSHAKE flag for + * server sockets and SSL_set_post_handshake_auth() for client. */ + + return 0; +} +#endif + typedef struct { PyThreadState *thread_state; @@ -3506,6 +3608,13 @@ static PyGetSetDef context_getsetlist[] = { #endif {"verify_mode", (getter) get_verify_mode, (setter) set_verify_mode, NULL}, + {"post_handshake_auth", (getter) get_post_handshake_auth, +#ifdef TLS1_3_VERSION + (setter) set_post_handshake_auth, +#else + NULL, +#endif + }, {NULL}, /* sentinel */ }; @@ -4532,3 +4641,4 @@ init_ssl(void) if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r)) return; } + diff --git a/src/python/Python-2.7.18/Modules/operator.c b/src/python/Python-2.7.18/Modules/operator.c index 7ddd123f4..67011a6a8 100644 --- a/src/python/Python-2.7.18/Modules/operator.c +++ b/src/python/Python-2.7.18/Modules/operator.c @@ -259,7 +259,7 @@ _tscmp(const unsigned char *a, const unsigned char *b, volatile const unsigned char *left; volatile const unsigned char *right; Py_ssize_t i; - unsigned char result; + volatile unsigned char result; /* loop count depends on length of b */ length = len_b; diff --git a/src/python/Python-2.7.18/Modules/socketmodule.c b/src/python/Python-2.7.18/Modules/socketmodule.c index 4d5a8f6f0..b145daf5c 100644 --- a/src/python/Python-2.7.18/Modules/socketmodule.c +++ b/src/python/Python-2.7.18/Modules/socketmodule.c @@ -142,7 +142,8 @@ sendall(data[, flags]) -- send all data\n\ send(data[, flags]) -- send data, may not send all of it\n\ sendto(data[, flags], addr) -- send data to a given address\n\ setblocking(0 | 1) -- set or clear the blocking I/O flag\n\ -setsockopt(level, optname, value) -- set socket options\n\ +getblocking() -- return True if socket is blocking, False if non-blocking\n\ +setsockopt(level, optname, value[, optlen]) -- set socket options\n\ settimeout(None | float) -- set or clear the timeout\n\ shutdown(how) -- shut down traffic in one or both directions\n\ \n\ @@ -1814,6 +1815,68 @@ Set the socket to blocking (flag is true) or non-blocking (false).\n\ setblocking(True) is equivalent to settimeout(None);\n\ setblocking(False) is equivalent to settimeout(0.0)."); +/* s.getblocking() method. + Returns True if socket is in blocking mode, + False if it is in non-blocking mode. +*/ +static PyObject * +sock_getblocking(PySocketSockObject *s) +{ + if (s->sock_timeout) { + Py_RETURN_TRUE; + } + else { + Py_RETURN_FALSE; + } +} + +PyDoc_STRVAR(getblocking_doc, +"getblocking()\n\ +\n\ +Returns True if socket is in blocking mode, or False if it\n\ +is in non-blocking mode."); + +static int +socket_parse_timeout(_PyTime_t *timeout, PyObject *timeout_obj) +{ +#ifdef MS_WINDOWS + struct timeval tv; +#endif +#ifndef HAVE_POLL + _PyTime_t ms; +#endif + int overflow = 0; + + if (timeout_obj == Py_None) { + *timeout = _PyTime_FromSeconds(-1); + return 0; + } + + if (_PyTime_FromSecondsObject(timeout, + timeout_obj, _PyTime_ROUND_TIMEOUT) < 0) + return -1; + + if (*timeout < 0) { + PyErr_SetString(PyExc_ValueError, "Timeout value out of range"); + return -1; + } + +#ifdef MS_WINDOWS + overflow |= (_PyTime_AsTimeval(*timeout, &tv, _PyTime_ROUND_TIMEOUT) < 0); +#endif +#ifndef HAVE_POLL + ms = _PyTime_AsMilliseconds(*timeout, _PyTime_ROUND_TIMEOUT); + overflow |= (ms > INT_MAX); +#endif + if (overflow) { + PyErr_SetString(PyExc_OverflowError, + "timeout doesn't fit into C timeval"); + return -1; + } + + return 0; +} + /* s.settimeout(timeout) method. Argument: None -- no timeout, blocking mode; same as setblocking(True) 0.0 -- non-blocking mode; same as setblocking(False) @@ -1837,11 +1900,34 @@ sock_settimeout(PySocketSockObject *s, PyObject *arg) } } - s->sock_timeout = timeout; - internal_setblocking(s, timeout < 0.0); + s->sock_timeout = timeout; - Py_INCREF(Py_None); - return Py_None; + int block = timeout < 0; + /* Blocking mode for a Python socket object means that operations + like :meth:`recv` or :meth:`sendall` will block the execution of + the current thread until they are complete or aborted with a + `socket.timeout` or `socket.error` errors. When timeout is `None`, + the underlying FD is in a blocking mode. When timeout is a positive + number, the FD is in a non-blocking mode, and socket ops are + implemented with a `select()` call. + + When timeout is 0.0, the FD is in a non-blocking mode. + + This table summarizes all states in which the socket object and + its underlying FD can be: + + ==================== ===================== ============== + `gettimeout()` `getblocking()` FD + ==================== ===================== ============== + ``None`` ``True`` blocking + ``0.0`` ``False`` non-blocking + ``> 0`` ``True`` non-blocking + */ + + if (internal_setblocking(s, block) == -1) { + return NULL; + } + Py_RETURN_NONE; } PyDoc_STRVAR(settimeout_doc, @@ -3122,6 +3208,8 @@ static PyMethodDef sock_methods[] = { sendto_doc}, {"setblocking", (PyCFunction)sock_setblocking, METH_O, setblocking_doc}, + {"getblocking", (PyCFunction)sock_getblocking, METH_NOARGS, + getblocking_doc}, {"settimeout", (PyCFunction)sock_settimeout, METH_O, settimeout_doc}, {"gettimeout", (PyCFunction)sock_gettimeout, METH_NOARGS, diff --git a/src/python/Python-2.7.18/Python/pytime.c b/src/python/Python-2.7.18/Python/pytime.c new file mode 100644 index 000000000..109d52692 --- /dev/null +++ b/src/python/Python-2.7.18/Python/pytime.c @@ -0,0 +1,1114 @@ +#include "Python.h" +#ifdef MS_WINDOWS +#include /* struct timeval */ +#endif + +#if defined(__APPLE__) +#include /* mach_absolute_time(), mach_timebase_info() */ +#endif + +#define _PyTime_check_mul_overflow(a, b) \ + (assert(b > 0), \ + (_PyTime_t)(a) < _PyTime_MIN / (_PyTime_t)(b) \ + || _PyTime_MAX / (_PyTime_t)(b) < (_PyTime_t)(a)) + +/* To millisecond (10^-3) */ +#define SEC_TO_MS 1000 + +/* To microseconds (10^-6) */ +#define MS_TO_US 1000 +#define SEC_TO_US (SEC_TO_MS * MS_TO_US) + +/* To nanoseconds (10^-9) */ +#define US_TO_NS 1000 +#define MS_TO_NS (MS_TO_US * US_TO_NS) +#define SEC_TO_NS (SEC_TO_MS * MS_TO_NS) + +/* Conversion from nanoseconds */ +#define NS_TO_MS (1000 * 1000) +#define NS_TO_US (1000) + +static void +error_time_t_overflow(void) +{ + PyErr_SetString(PyExc_OverflowError, + "timestamp out of range for platform time_t"); +} + +static void +_PyTime_overflow(void) +{ + PyErr_SetString(PyExc_OverflowError, + "timestamp too large to convert to C _PyTime_t"); +} + + +_PyTime_t +_PyTime_MulDiv(_PyTime_t ticks, _PyTime_t mul, _PyTime_t div) +{ + _PyTime_t intpart, remaining; + /* Compute (ticks * mul / div) in two parts to prevent integer overflow: + compute integer part, and then the remaining part. + + (ticks * mul) / div == (ticks / div) * mul + (ticks % div) * mul / div + + The caller must ensure that "(div - 1) * mul" cannot overflow. */ + intpart = ticks / div; + ticks %= div; + remaining = ticks * mul; + remaining /= div; + return intpart * mul + remaining; +} + + +time_t +_PyLong_AsTime_t(PyObject *obj) +{ +#if SIZEOF_TIME_T == SIZEOF_LONG_LONG + long long val; + val = PyLong_AsLongLong(obj); +#else + long val; + Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); + val = PyLong_AsLong(obj); +#endif + if (val == -1 && PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_OverflowError)) { + error_time_t_overflow(); + } + return -1; + } + return (time_t)val; +} + +PyObject * +_PyLong_FromTime_t(time_t t) +{ +#if SIZEOF_TIME_T == SIZEOF_LONG_LONG + return PyLong_FromLongLong((long long)t); +#else + Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); + return PyLong_FromLong((long)t); +#endif +} + +/* Round to nearest with ties going to nearest even integer + (_PyTime_ROUND_HALF_EVEN) */ +static double +_PyTime_RoundHalfEven(double x) +{ + double rounded = round(x); + if (fabs(x-rounded) == 0.5) { + /* halfway case: round to even */ + rounded = 2.0*round(x/2.0); + } + return rounded; +} + +static double +_PyTime_Round(double x, _PyTime_round_t round) +{ + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + d = x; + if (round == _PyTime_ROUND_HALF_EVEN) { + d = _PyTime_RoundHalfEven(d); + } + else if (round == _PyTime_ROUND_CEILING) { + d = ceil(d); + } + else if (round == _PyTime_ROUND_FLOOR) { + d = floor(d); + } + else { + assert(round == _PyTime_ROUND_UP); + d = (d >= 0.0) ? ceil(d) : floor(d); + } + return d; +} + +static int +_PyTime_DoubleToDenominator(double d, time_t *sec, long *numerator, + long idenominator, _PyTime_round_t round) +{ + double denominator = (double)idenominator; + double intpart; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double floatpart; + + floatpart = modf(d, &intpart); + + floatpart *= denominator; + floatpart = _PyTime_Round(floatpart, round); + if (floatpart >= denominator) { + floatpart -= denominator; + intpart += 1.0; + } + else if (floatpart < 0) { + floatpart += denominator; + intpart -= 1.0; + } + assert(0.0 <= floatpart && floatpart < denominator); + + if (!_Py_InIntegralTypeRange(time_t, intpart)) { + error_time_t_overflow(); + return -1; + } + *sec = (time_t)intpart; + *numerator = (long)floatpart; + assert(0 <= *numerator && *numerator < idenominator); + return 0; +} + +static int +_PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, + long denominator, _PyTime_round_t round) +{ + assert(denominator >= 1); + + if (PyFloat_Check(obj)) { + double d = PyFloat_AsDouble(obj); + if (Py_IS_NAN(d)) { + *numerator = 0; + PyErr_SetString(PyExc_ValueError, "Invalid value NaN (not a number)"); + return -1; + } + return _PyTime_DoubleToDenominator(d, sec, numerator, + denominator, round); + } + else { + *sec = _PyLong_AsTime_t(obj); + *numerator = 0; + if (*sec == (time_t)-1 && PyErr_Occurred()) { + return -1; + } + return 0; + } +} + +int +_PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round) +{ + if (PyFloat_Check(obj)) { + double intpart; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + d = PyFloat_AsDouble(obj); + if (Py_IS_NAN(d)) { + PyErr_SetString(PyExc_ValueError, "Invalid value NaN (not a number)"); + return -1; + } + + d = _PyTime_Round(d, round); + (void)modf(d, &intpart); + + if (!_Py_InIntegralTypeRange(time_t, intpart)) { + error_time_t_overflow(); + return -1; + } + *sec = (time_t)intpart; + return 0; + } + else { + *sec = _PyLong_AsTime_t(obj); + if (*sec == (time_t)-1 && PyErr_Occurred()) { + return -1; + } + return 0; + } +} + +int +_PyTime_ObjectToTimespec(PyObject *obj, time_t *sec, long *nsec, + _PyTime_round_t round) +{ + return _PyTime_ObjectToDenominator(obj, sec, nsec, SEC_TO_NS, round); +} + +int +_PyTime_ObjectToTimeval(PyObject *obj, time_t *sec, long *usec, + _PyTime_round_t round) +{ + return _PyTime_ObjectToDenominator(obj, sec, usec, SEC_TO_US, round); +} + +_PyTime_t +_PyTime_FromSeconds(int seconds) +{ + _PyTime_t t; + /* ensure that integer overflow cannot happen, int type should have 32 + bits, whereas _PyTime_t type has at least 64 bits (SEC_TO_MS takes 30 + bits). */ + Py_BUILD_ASSERT(INT_MAX <= _PyTime_MAX / SEC_TO_NS); + Py_BUILD_ASSERT(INT_MIN >= _PyTime_MIN / SEC_TO_NS); + + t = (_PyTime_t)seconds; + assert((t >= 0 && t <= _PyTime_MAX / SEC_TO_NS) + || (t < 0 && t >= _PyTime_MIN / SEC_TO_NS)); + t *= SEC_TO_NS; + return t; +} + +_PyTime_t +_PyTime_FromNanoseconds(_PyTime_t ns) +{ + /* _PyTime_t already uses nanosecond resolution, no conversion needed */ + return ns; +} + +int +_PyTime_FromNanosecondsObject(_PyTime_t *tp, PyObject *obj) +{ + long long nsec; + _PyTime_t t; + + if (!PyLong_Check(obj)) { + PyErr_Format(PyExc_TypeError, "expect int, got %s", + Py_TYPE(obj)->tp_name); + return -1; + } + + Py_BUILD_ASSERT(sizeof(long long) == sizeof(_PyTime_t)); + nsec = PyLong_AsLongLong(obj); + if (nsec == -1 && PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_OverflowError)) { + _PyTime_overflow(); + } + return -1; + } + + /* _PyTime_t already uses nanosecond resolution, no conversion needed */ + t = (_PyTime_t)nsec; + *tp = t; + return 0; +} + +#ifdef HAVE_CLOCK_GETTIME +static int +pytime_fromtimespec(_PyTime_t *tp, struct timespec *ts, int raise) +{ + _PyTime_t t, nsec; + int res = 0; + + Py_BUILD_ASSERT(sizeof(ts->tv_sec) <= sizeof(_PyTime_t)); + t = (_PyTime_t)ts->tv_sec; + + if (_PyTime_check_mul_overflow(t, SEC_TO_NS)) { + if (raise) { + _PyTime_overflow(); + } + res = -1; + t = (t > 0) ? _PyTime_MAX : _PyTime_MIN; + } + else { + t = t * SEC_TO_NS; + } + + nsec = ts->tv_nsec; + /* The following test is written for positive only nsec */ + assert(nsec >= 0); + if (t > _PyTime_MAX - nsec) { + if (raise) { + _PyTime_overflow(); + } + res = -1; + t = _PyTime_MAX; + } + else { + t += nsec; + } + + *tp = t; + return res; +} + +int +_PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts) +{ + return pytime_fromtimespec(tp, ts, 1); +} +#endif + +#if !defined(MS_WINDOWS) +static int +pytime_fromtimeval(_PyTime_t *tp, struct timeval *tv, int raise) +{ + _PyTime_t t, usec; + int res = 0; + + Py_BUILD_ASSERT(sizeof(tv->tv_sec) <= sizeof(_PyTime_t)); + t = (_PyTime_t)tv->tv_sec; + + if (_PyTime_check_mul_overflow(t, SEC_TO_NS)) { + if (raise) { + _PyTime_overflow(); + } + res = -1; + t = (t > 0) ? _PyTime_MAX : _PyTime_MIN; + } + else { + t = t * SEC_TO_NS; + } + + usec = (_PyTime_t)tv->tv_usec * US_TO_NS; + /* The following test is written for positive only usec */ + assert(usec >= 0); + if (t > _PyTime_MAX - usec) { + if (raise) { + _PyTime_overflow(); + } + res = -1; + t = _PyTime_MAX; + } + else { + t += usec; + } + + *tp = t; + return res; +} + +int +_PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv) +{ + return pytime_fromtimeval(tp, tv, 1); +} +#endif + +static int +_PyTime_FromDouble(_PyTime_t *t, double value, _PyTime_round_t round, + long unit_to_ns) +{ + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + /* convert to a number of nanoseconds */ + d = value; + d *= (double)unit_to_ns; + d = _PyTime_Round(d, round); + + if (!_Py_InIntegralTypeRange(_PyTime_t, d)) { + _PyTime_overflow(); + return -1; + } + *t = (_PyTime_t)d; + return 0; +} + +static int +_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, + long unit_to_ns) +{ + if (PyFloat_Check(obj)) { + double d; + d = PyFloat_AsDouble(obj); + if (Py_IS_NAN(d)) { + PyErr_SetString(PyExc_ValueError, "Invalid value NaN (not a number)"); + return -1; + } + return _PyTime_FromDouble(t, d, round, unit_to_ns); + } + else { + long long sec; + Py_BUILD_ASSERT(sizeof(long long) <= sizeof(_PyTime_t)); + + sec = PyLong_AsLongLong(obj); + if (sec == -1 && PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_OverflowError)) { + _PyTime_overflow(); + } + return -1; + } + + if (_PyTime_check_mul_overflow(sec, unit_to_ns)) { + _PyTime_overflow(); + return -1; + } + *t = sec * unit_to_ns; + return 0; + } +} + +int +_PyTime_FromSecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round) +{ + return _PyTime_FromObject(t, obj, round, SEC_TO_NS); +} + +int +_PyTime_FromMillisecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round) +{ + return _PyTime_FromObject(t, obj, round, MS_TO_NS); +} + +double +_PyTime_AsSecondsDouble(_PyTime_t t) +{ + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + if (t % SEC_TO_NS == 0) { + _PyTime_t secs; + /* Divide using integers to avoid rounding issues on the integer part. + 1e-9 cannot be stored exactly in IEEE 64-bit. */ + secs = t / SEC_TO_NS; + d = (double)secs; + } + else { + d = (double)t; + d /= 1e9; + } + return d; +} + +PyObject * +_PyTime_AsNanosecondsObject(_PyTime_t t) +{ + Py_BUILD_ASSERT(sizeof(long long) >= sizeof(_PyTime_t)); + return PyLong_FromLongLong((long long)t); +} + +static _PyTime_t +_PyTime_Divide(const _PyTime_t t, const _PyTime_t k, + const _PyTime_round_t round) +{ + assert(k > 1); + if (round == _PyTime_ROUND_HALF_EVEN) { + _PyTime_t x, r, abs_r; + x = t / k; + r = t % k; + abs_r = Py_ABS(r); + if (abs_r > k / 2 || (abs_r == k / 2 && (Py_ABS(x) & 1))) { + if (t >= 0) { + x++; + } + else { + x--; + } + } + return x; + } + else if (round == _PyTime_ROUND_CEILING) { + if (t >= 0) { + return (t + k - 1) / k; + } + else { + return t / k; + } + } + else if (round == _PyTime_ROUND_FLOOR){ + if (t >= 0) { + return t / k; + } + else { + return (t - (k - 1)) / k; + } + } + else { + assert(round == _PyTime_ROUND_UP); + if (t >= 0) { + return (t + k - 1) / k; + } + else { + return (t - (k - 1)) / k; + } + } +} + +_PyTime_t +_PyTime_AsMilliseconds(_PyTime_t t, _PyTime_round_t round) +{ + return _PyTime_Divide(t, NS_TO_MS, round); +} + +_PyTime_t +_PyTime_AsMicroseconds(_PyTime_t t, _PyTime_round_t round) +{ + return _PyTime_Divide(t, NS_TO_US, round); +} + +static int +_PyTime_AsTimeval_impl(_PyTime_t t, _PyTime_t *p_secs, int *p_us, + _PyTime_round_t round) +{ + _PyTime_t secs, ns; + int usec; + int res = 0; + + secs = t / SEC_TO_NS; + ns = t % SEC_TO_NS; + + usec = (int)_PyTime_Divide(ns, US_TO_NS, round); + if (usec < 0) { + usec += SEC_TO_US; + if (secs != _PyTime_MIN) { + secs -= 1; + } + else { + res = -1; + } + } + else if (usec >= SEC_TO_US) { + usec -= SEC_TO_US; + if (secs != _PyTime_MAX) { + secs += 1; + } + else { + res = -1; + } + } + assert(0 <= usec && usec < SEC_TO_US); + + *p_secs = secs; + *p_us = usec; + + return res; +} + +static int +_PyTime_AsTimevalStruct_impl(_PyTime_t t, struct timeval *tv, + _PyTime_round_t round, int raise) +{ + _PyTime_t secs, secs2; + int us; + int res; + + res = _PyTime_AsTimeval_impl(t, &secs, &us, round); + +#ifdef MS_WINDOWS + tv->tv_sec = (long)secs; +#else + tv->tv_sec = secs; +#endif + tv->tv_usec = us; + + secs2 = (_PyTime_t)tv->tv_sec; + if (res < 0 || secs2 != secs) { + if (raise) { + error_time_t_overflow(); + } + return -1; + } + return 0; +} + +int +_PyTime_AsTimeval(_PyTime_t t, struct timeval *tv, _PyTime_round_t round) +{ + return _PyTime_AsTimevalStruct_impl(t, tv, round, 1); +} + +int +_PyTime_AsTimeval_noraise(_PyTime_t t, struct timeval *tv, _PyTime_round_t round) +{ + return _PyTime_AsTimevalStruct_impl(t, tv, round, 0); +} + +int +_PyTime_AsTimevalTime_t(_PyTime_t t, time_t *p_secs, int *us, + _PyTime_round_t round) +{ + _PyTime_t secs; + int res; + + res = _PyTime_AsTimeval_impl(t, &secs, us, round); + + *p_secs = secs; + + if (res < 0 || (_PyTime_t)*p_secs != secs) { + error_time_t_overflow(); + return -1; + } + return 0; +} + + +#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) +int +_PyTime_AsTimespec(_PyTime_t t, struct timespec *ts) +{ + _PyTime_t secs, nsec; + + secs = t / SEC_TO_NS; + nsec = t % SEC_TO_NS; + if (nsec < 0) { + nsec += SEC_TO_NS; + secs -= 1; + } + ts->tv_sec = (time_t)secs; + assert(0 <= nsec && nsec < SEC_TO_NS); + ts->tv_nsec = nsec; + + if ((_PyTime_t)ts->tv_sec != secs) { + error_time_t_overflow(); + return -1; + } + return 0; +} +#endif + +static int +pygettimeofday(_PyTime_t *tp, _Py_clock_info_t *info, int raise) +{ +#ifdef MS_WINDOWS + FILETIME system_time; + ULARGE_INTEGER large; + + assert(info == NULL || raise); + + GetSystemTimeAsFileTime(&system_time); + large.u.LowPart = system_time.dwLowDateTime; + large.u.HighPart = system_time.dwHighDateTime; + /* 11,644,473,600,000,000,000: number of nanoseconds between + the 1st january 1601 and the 1st january 1970 (369 years + 89 leap + days). */ + *tp = large.QuadPart * 100 - 11644473600000000000; + if (info) { + DWORD timeAdjustment, timeIncrement; + BOOL isTimeAdjustmentDisabled, ok; + + info->implementation = "GetSystemTimeAsFileTime()"; + info->monotonic = 0; + ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, + &isTimeAdjustmentDisabled); + if (!ok) { + PyErr_SetFromWindowsErr(0); + return -1; + } + info->resolution = timeIncrement * 1e-7; + info->adjustable = 1; + } + +#else /* MS_WINDOWS */ + int err; +#ifdef HAVE_CLOCK_GETTIME + struct timespec ts; +#else + struct timeval tv; +#endif + + assert(info == NULL || raise); + +#ifdef HAVE_CLOCK_GETTIME + err = clock_gettime(CLOCK_REALTIME, &ts); + if (err) { + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + } + return -1; + } + if (pytime_fromtimespec(tp, &ts, raise) < 0) { + return -1; + } + + if (info) { + struct timespec res; + info->implementation = "clock_gettime(CLOCK_REALTIME)"; + info->monotonic = 0; + info->adjustable = 1; + if (clock_getres(CLOCK_REALTIME, &res) == 0) { + info->resolution = res.tv_sec + res.tv_nsec * 1e-9; + } + else { + info->resolution = 1e-9; + } + } +#else /* HAVE_CLOCK_GETTIME */ + + /* test gettimeofday() */ +#ifdef GETTIMEOFDAY_NO_TZ + err = gettimeofday(&tv); +#else + err = gettimeofday(&tv, (struct timezone *)NULL); +#endif + if (err) { + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + } + return -1; + } + if (pytime_fromtimeval(tp, &tv, raise) < 0) { + return -1; + } + + if (info) { + info->implementation = "gettimeofday()"; + info->resolution = 1e-6; + info->monotonic = 0; + info->adjustable = 1; + } +#endif /* !HAVE_CLOCK_GETTIME */ +#endif /* !MS_WINDOWS */ + return 0; +} + +_PyTime_t +_PyTime_GetSystemClock(void) +{ + _PyTime_t t; + if (pygettimeofday(&t, NULL, 0) < 0) { + /* should not happen, _PyTime_Init() checked the clock at startup */ + Py_UNREACHABLE(); + } + return t; +} + +int +_PyTime_GetSystemClockWithInfo(_PyTime_t *t, _Py_clock_info_t *info) +{ + return pygettimeofday(t, info, 1); +} + +static int +pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) +{ +#if defined(MS_WINDOWS) + ULONGLONG ticks; + _PyTime_t t; + + assert(info == NULL || raise); + + ticks = GetTickCount64(); + Py_BUILD_ASSERT(sizeof(ticks) <= sizeof(_PyTime_t)); + t = (_PyTime_t)ticks; + + if (_PyTime_check_mul_overflow(t, MS_TO_NS)) { + if (raise) { + _PyTime_overflow(); + return -1; + } + /* Hello, time traveler! */ + Py_UNREACHABLE(); + } + *tp = t * MS_TO_NS; + + if (info) { + DWORD timeAdjustment, timeIncrement; + BOOL isTimeAdjustmentDisabled, ok; + info->implementation = "GetTickCount64()"; + info->monotonic = 1; + ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement, + &isTimeAdjustmentDisabled); + if (!ok) { + PyErr_SetFromWindowsErr(0); + return -1; + } + info->resolution = timeIncrement * 1e-7; + info->adjustable = 0; + } + +#elif defined(__APPLE__) + static mach_timebase_info_data_t timebase; + static uint64_t t0 = 0; + uint64_t ticks; + + if (timebase.denom == 0) { + /* According to the Technical Q&A QA1398, mach_timebase_info() cannot + fail: https://developer.apple.com/library/mac/#qa/qa1398/ */ + (void)mach_timebase_info(&timebase); + + /* Sanity check: should never occur in practice */ + if (timebase.numer < 1 || timebase.denom < 1) { + PyErr_SetString(PyExc_RuntimeError, + "invalid mach_timebase_info"); + return -1; + } + + /* Check that timebase.numer and timebase.denom can be casted to + _PyTime_t. In practice, timebase uses uint32_t, so casting cannot + overflow. At the end, only make sure that the type is uint32_t + (_PyTime_t is 64-bit long). */ + assert(sizeof(timebase.numer) < sizeof(_PyTime_t)); + assert(sizeof(timebase.denom) < sizeof(_PyTime_t)); + + /* Make sure that (ticks * timebase.numer) cannot overflow in + _PyTime_MulDiv(), with ticks < timebase.denom. + + Known time bases: + + * always (1, 1) on Intel + * (1000000000, 33333335) or (1000000000, 25000000) on PowerPC + + None of these time bases can overflow with 64-bit _PyTime_t, but + check for overflow, just in case. */ + if ((_PyTime_t)timebase.numer > _PyTime_MAX / (_PyTime_t)timebase.denom) { + PyErr_SetString(PyExc_OverflowError, + "mach_timebase_info is too large"); + return -1; + } + + t0 = mach_absolute_time(); + } + + if (info) { + info->implementation = "mach_absolute_time()"; + info->resolution = (double)timebase.numer / (double)timebase.denom * 1e-9; + info->monotonic = 1; + info->adjustable = 0; + } + + ticks = mach_absolute_time(); + /* Use a "time zero" to reduce precision loss when converting time + to floatting point number, as in time.monotonic(). */ + ticks -= t0; + *tp = _PyTime_MulDiv(ticks, + (_PyTime_t)timebase.numer, + (_PyTime_t)timebase.denom); + +#elif defined(__hpux) + hrtime_t time; + + time = gethrtime(); + if (time == -1) { + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + } + return -1; + } + + *tp = time; + + if (info) { + info->implementation = "gethrtime()"; + info->resolution = 1e-9; + info->monotonic = 1; + info->adjustable = 0; + } + +#else + struct timespec ts; +#ifdef CLOCK_HIGHRES + const clockid_t clk_id = CLOCK_HIGHRES; + const char *implementation = "clock_gettime(CLOCK_HIGHRES)"; +#else + const clockid_t clk_id = CLOCK_MONOTONIC; + const char *implementation = "clock_gettime(CLOCK_MONOTONIC)"; +#endif + + assert(info == NULL || raise); + + if (clock_gettime(clk_id, &ts) != 0) { + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return -1; + } + + if (info) { + struct timespec res; + info->monotonic = 1; + info->implementation = implementation; + info->adjustable = 0; + if (clock_getres(clk_id, &res) != 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + info->resolution = res.tv_sec + res.tv_nsec * 1e-9; + } + if (pytime_fromtimespec(tp, &ts, raise) < 0) { + return -1; + } +#endif + return 0; +} + +_PyTime_t +_PyTime_GetMonotonicClock(void) +{ + _PyTime_t t; + if (pymonotonic(&t, NULL, 0) < 0) { + /* should not happen, _PyTime_Init() checked that monotonic clock at + startup */ + Py_UNREACHABLE(); + } + return t; +} + +int +_PyTime_GetMonotonicClockWithInfo(_PyTime_t *tp, _Py_clock_info_t *info) +{ + return pymonotonic(tp, info, 1); +} + + +#ifdef MS_WINDOWS +static int +win_perf_counter(_PyTime_t *tp, _Py_clock_info_t *info) +{ + static LONGLONG frequency = 0; + static LONGLONG t0 = 0; + LARGE_INTEGER now; + LONGLONG ticksll; + _PyTime_t ticks; + + if (frequency == 0) { + LARGE_INTEGER freq; + if (!QueryPerformanceFrequency(&freq)) { + PyErr_SetFromWindowsErr(0); + return -1; + } + frequency = freq.QuadPart; + + /* Sanity check: should never occur in practice */ + if (frequency < 1) { + PyErr_SetString(PyExc_RuntimeError, + "invalid QueryPerformanceFrequency"); + return -1; + } + + /* Check that frequency can be casted to _PyTime_t. + + Make also sure that (ticks * SEC_TO_NS) cannot overflow in + _PyTime_MulDiv(), with ticks < frequency. + + Known QueryPerformanceFrequency() values: + + * 10,000,000 (10 MHz): 100 ns resolution + * 3,579,545 Hz (3.6 MHz): 279 ns resolution + + None of these frequencies can overflow with 64-bit _PyTime_t, but + check for overflow, just in case. */ + if (frequency > _PyTime_MAX + || frequency > (LONGLONG)_PyTime_MAX / (LONGLONG)SEC_TO_NS) { + PyErr_SetString(PyExc_OverflowError, + "QueryPerformanceFrequency is too large"); + return -1; + } + + QueryPerformanceCounter(&now); + t0 = now.QuadPart; + } + + if (info) { + info->implementation = "QueryPerformanceCounter()"; + info->resolution = 1.0 / (double)frequency; + info->monotonic = 1; + info->adjustable = 0; + } + + QueryPerformanceCounter(&now); + ticksll = now.QuadPart; + + /* Use a "time zero" to reduce precision loss when converting time + to floatting point number, as in time.perf_counter(). */ + ticksll -= t0; + + /* Make sure that casting LONGLONG to _PyTime_t cannot overflow, + both types are signed */ + Py_BUILD_ASSERT(sizeof(ticksll) <= sizeof(ticks)); + ticks = (_PyTime_t)ticksll; + + *tp = _PyTime_MulDiv(ticks, SEC_TO_NS, (_PyTime_t)frequency); + return 0; +} +#endif + + +int +_PyTime_GetPerfCounterWithInfo(_PyTime_t *t, _Py_clock_info_t *info) +{ +#ifdef MS_WINDOWS + return win_perf_counter(t, info); +#else + return _PyTime_GetMonotonicClockWithInfo(t, info); +#endif +} + + +_PyTime_t +_PyTime_GetPerfCounter(void) +{ + _PyTime_t t; + if (_PyTime_GetPerfCounterWithInfo(&t, NULL)) { + Py_UNREACHABLE(); + } + return t; +} + + +int +_PyTime_Init(void) +{ + /* check that time.time(), time.monotonic() and time.perf_counter() clocks + are working properly to not have to check for exceptions at runtime. If + a clock works once, it cannot fail in next calls. */ + _PyTime_t t; + if (_PyTime_GetSystemClockWithInfo(&t, NULL) < 0) { + return -1; + } + if (_PyTime_GetMonotonicClockWithInfo(&t, NULL) < 0) { + return -1; + } + if (_PyTime_GetPerfCounterWithInfo(&t, NULL) < 0) { + return -1; + } + return 0; +} + +int +_PyTime_localtime(time_t t, struct tm *tm) +{ +#ifdef MS_WINDOWS + int error; + + error = localtime_s(tm, &t); + if (error != 0) { + errno = error; + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#else /* !MS_WINDOWS */ + +#ifdef _AIX + /* bpo-34373: AIX does not return NULL if t is too small or too large */ + if (t < -2145916800 /* 1902-01-01 */ + || t > 2145916800 /* 2038-01-01 */) { + errno = EINVAL; + PyErr_SetString(PyExc_OverflowError, + "localtime argument out of range"); + return -1; + } +#endif + + errno = 0; + if (localtime_r(&t, tm) == NULL) { + if (errno == 0) { + errno = EINVAL; + } + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif /* MS_WINDOWS */ +} + +int +_PyTime_gmtime(time_t t, struct tm *tm) +{ +#ifdef MS_WINDOWS + int error; + + error = gmtime_s(tm, &t); + if (error != 0) { + errno = error; + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#else /* !MS_WINDOWS */ + if (gmtime_r(&t, tm) == NULL) { +#ifdef EINVAL + if (errno == 0) { + errno = EINVAL; + } +#endif + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif /* MS_WINDOWS */ +} From 133bafeefb27badf03aa4a7a5acfcdb9b363213b Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 11:20:12 +0000 Subject: [PATCH 11/42] Document today's patching. --- src/python/README | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/python/README b/src/python/README index 73969b6b4..a1670f31a 100644 --- a/src/python/README +++ b/src/python/README @@ -14,6 +14,13 @@ to apply to our Python sources tree, then issue something like: cd Python-2.7.18 patch -p1 < ~/Downloads/CVE-2020-10735.diff +Python sources are currently patched from upstream Active State branch at +https://github.com/ActiveState/cpython/commits/2.7.18.6_base/ up to & including +fixes from July 31, 2024. Last commit: 0f39e68197b735203b8c1b4988ff78ae61842864. + +Patches that can be applied on Windows as hot fixes (see below for more details) +are saved as diff files in the current directory. They are also applied on +non-Windows platforms before building Python. Building Python on Windows From 8b3196a53fee30b621b145353d0385c73f7a2721 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 12:05:12 +0000 Subject: [PATCH 12/42] Patched our cryptography sources for CVE-2023-49083. Other safety issues not relevant for our old versions. --- chevah_build | 15 ++++++++------- .../hazmat/backends/openssl/backend.py | 5 ++++- .../tests/hazmat/primitives/test_pkcs7.py | 6 ++++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/chevah_build b/chevah_build index d5d2815c8..a1a426e8a 100755 --- a/chevah_build +++ b/chevah_build @@ -41,8 +41,8 @@ PIP_VERSION="20.3.4chevah1" # For safety alerts, we need to ignore some vulnerabilities which are either: # * not present in the final tarball, e.g. for wheel, safety, etc., # * not at all relevant, e.g. those for cryptography's bundled openssl, -# * not actually relevant for these old versions, e.g. 53048 for cryptography, -# * patched by us, e.g. 40291 for pip, 53048 for cryptography, +# * not actually relevant for these old versions, e.g. 65647 for cryptography, +# * patched by us, e.g. 40291 for pip, 53048/62556 for cryptography, # * not patched: 52495 for setuptools. # pip <21.1, click <8, dparse <0.5.2, wheel <0.38, safety <2.2, pywin32 <301. SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 54687" @@ -52,15 +52,16 @@ SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 52495 -i 58755 -i 52365 -i 59956" SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53306 -i 53298 -i 53305 -i 53301" SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53307 -i 53304 -i 53302 -i 53299" SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53303 -i 59062 -i 60225 -i 60223" -SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 60224" -# Other cryptography vulnerabilities, see a few lines above for more details. -SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53048 -i 59473" +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 60224 -i 62451 -i 62452 -i 65278" +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 65510 -i 71680 -i 71681" +# Other cryptography vulnerabilities, see above multi-line comment for more details. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53048 -i 59473 -i 62556 -i 65647" # setuptools 44.x is the last series to support Python 2.7. # More at https://github.com/pypa/setuptools/pull/1955. SETUPTOOLS_VERSION="44.1.1" # Version 3.2.1 (with patches) from python-modules/ is used with OpenSSL 1.0.2. -# Our patched versions fix CVE-2023-23931. -CRYPTOGRAPHY_VERSION="3.3.2chevah" +# Our patched versions fix CVE-2023-23931 and CVE-2023-49083. +CRYPTOGRAPHY_VERSION="3.3.2chevah2" # bcrypt 3.2.0 requires at least Python 3.6. BCRYPT_VERSION="3.1.7" # setproctitle 1.2.x requires at least Python 3.6. diff --git a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py index b7757e333..92f10e6fe 100644 --- a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py +++ b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py @@ -2673,9 +2673,12 @@ def _load_pkcs7_certificates(self, p7): _Reasons.UNSUPPORTED_SERIALIZATION, ) + certs: list[x509.Certificate] = [] + if p7.d.sign == self._ffi.NULL: + return certs + sk_x509 = p7.d.sign.cert num = self._lib.sk_X509_num(sk_x509) - certs = [] for i in range(num): x509 = self._lib.sk_X509_value(sk_x509, i) self.openssl_assert(x509 != self._ffi.NULL) diff --git a/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py b/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py index 8b93cb633..148a1e1ec 100644 --- a/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py +++ b/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py @@ -80,6 +80,12 @@ def test_load_pkcs7_unsupported_type(self): mode="rb", ) + def test_load_pkcs7_empty_certificates(self): + der = b"\x30\x0B\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x07\x02" + + certificates = pkcs7.load_der_pkcs7_certificates(der) + assert certificates == [] + # We have no public verification API and won't be adding one until we get # some requirements from users so this function exists to give us basic From 1909628df6635bc2d57706977108c060b5f48fa7 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 12:32:42 +0000 Subject: [PATCH 13/42] Patched our cryptography sources for CVE-2023-49083, take two. --- .../src/cryptography/hazmat/backends/openssl/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py index 92f10e6fe..235414b81 100644 --- a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py +++ b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py @@ -2673,7 +2673,7 @@ def _load_pkcs7_certificates(self, p7): _Reasons.UNSUPPORTED_SERIALIZATION, ) - certs: list[x509.Certificate] = [] + certs = [] # type: list of x509.Certificate if p7.d.sign == self._ffi.NULL: return certs From 5c5534477c380cebce294ada9bfd2ab660ed3350 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 12:36:37 +0000 Subject: [PATCH 14/42] Ignore one more `safety` id for `requests`: 71064. --- chevah_build | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/chevah_build b/chevah_build index a1a426e8a..1dcf0d5f2 100755 --- a/chevah_build +++ b/chevah_build @@ -39,7 +39,7 @@ PYOPENSSL_VERSION="21.0.0" # at https://github.com/chevah/pip/tree/20.3.4chevah. PIP_VERSION="20.3.4chevah1" # For safety alerts, we need to ignore some vulnerabilities which are either: -# * not present in the final tarball, e.g. for wheel, safety, etc., +# * not present in the final tarball, e.g. for wheel, safety, requests, etc., # * not at all relevant, e.g. those for cryptography's bundled openssl, # * not actually relevant for these old versions, e.g. 65647 for cryptography, # * patched by us, e.g. 40291 for pip, 53048/62556 for cryptography, @@ -48,6 +48,8 @@ PIP_VERSION="20.3.4chevah1" SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 54687" # setuptools <65.5.1, requests <2.31.0, certifi <2023.07.22. SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 52495 -i 58755 -i 52365 -i 59956" +# requests <2.32.2. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 71064" # These are related to cryptography's bundled OpenSSL libs. We don't use those. SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53306 -i 53298 -i 53305 -i 53301" SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53307 -i 53304 -i 53302 -i 53299" From 7c690ac39e5a0c30566db035ed64cb5408d863b1 Mon Sep 17 00:00:00 2001 From: dumol Date: Wed, 31 Jul 2024 12:44:31 +0000 Subject: [PATCH 15/42] Ignore `safety` id for one more of its deps: `idna`. --- chevah_build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chevah_build b/chevah_build index 1dcf0d5f2..2c001576a 100755 --- a/chevah_build +++ b/chevah_build @@ -48,8 +48,8 @@ PIP_VERSION="20.3.4chevah1" SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 54687" # setuptools <65.5.1, requests <2.31.0, certifi <2023.07.22. SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 52495 -i 58755 -i 52365 -i 59956" -# requests <2.32.2. -SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 71064" +# requests <2.32.2, idna <3.7. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 71064 -i 67895" # These are related to cryptography's bundled OpenSSL libs. We don't use those. SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53306 -i 53298 -i 53305 -i 53301" SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53307 -i 53304 -i 53302 -i 53299" From 7d4cb1e1161d1efffbb7711b70231b56d4a8ea25 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 10:34:54 +0000 Subject: [PATCH 16/42] Use last compat revision supporting Python 2.7. --- chevah_build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chevah_build b/chevah_build index 2c001576a..bc618c3fe 100755 --- a/chevah_build +++ b/chevah_build @@ -794,6 +794,8 @@ command_compat() { execute rm -rf compat execute git clone https://github.com/chevah/compat.git --depth=1 -b py2-support execute pushd compat + # Switch to last revision supporting Python 2.7. + execute git checkout d4a3dfc815e6cbfac5e0244a0ee22bf88627e76c # Copy over current brink stuff, as some changes might require it. execute cp ../../brink.{conf,sh} ./ # We patch the Python version to match the one that we have just built From 0e26a7d4883790b1df5432a8b3ff7d14c3998f80 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 10:46:08 +0000 Subject: [PATCH 17/42] Added more Safety IDs to ignore. --- chevah_build | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chevah_build b/chevah_build index bc618c3fe..7adc7145e 100755 --- a/chevah_build +++ b/chevah_build @@ -43,13 +43,13 @@ PIP_VERSION="20.3.4chevah1" # * not at all relevant, e.g. those for cryptography's bundled openssl, # * not actually relevant for these old versions, e.g. 65647 for cryptography, # * patched by us, e.g. 40291 for pip, 53048/62556 for cryptography, -# * not patched: 52495 for setuptools. +# * not patched: 52495/72236 for setuptools. # pip <21.1, click <8, dparse <0.5.2, wheel <0.38, safety <2.2, pywin32 <301. SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 54687" # setuptools <65.5.1, requests <2.31.0, certifi <2023.07.22. SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 52495 -i 58755 -i 52365 -i 59956" -# requests <2.32.2, idna <3.7. -SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 71064 -i 67895" +# requests <2.32.2, idna <3.7, setuptools <70.0.0, certifi <2024.07.04. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 71064 -i 67895 -i 72236 -i 72083" # These are related to cryptography's bundled OpenSSL libs. We don't use those. SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53306 -i 53298 -i 53305 -i 53301" SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53307 -i 53304 -i 53302 -i 53299" From 2890e120bfbd91310e61445bb7f905ab965304c0 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 10:53:03 +0000 Subject: [PATCH 18/42] Clone more of compat to reach last revision supporting py27. --- chevah_build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chevah_build b/chevah_build index 7adc7145e..df33792b1 100755 --- a/chevah_build +++ b/chevah_build @@ -792,7 +792,7 @@ command_compat() { execute pushd build echo '##### Running chevah.compat tests... #####' execute rm -rf compat - execute git clone https://github.com/chevah/compat.git --depth=1 -b py2-support + execute git clone https://github.com/chevah/compat.git execute pushd compat # Switch to last revision supporting Python 2.7. execute git checkout d4a3dfc815e6cbfac5e0244a0ee22bf88627e76c From 4356e2c3b479bd525ffa4afd57cc4d3ae5087bff Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 13:08:44 +0000 Subject: [PATCH 19/42] Updated psutil version to build and use to 6.0.0. --- chevah_build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chevah_build b/chevah_build index df33792b1..50ad2fb8e 100755 --- a/chevah_build +++ b/chevah_build @@ -27,12 +27,12 @@ SQLITE_VERSION="3.46.0" # Python modules versions to be used everywhere possible. PYSQLITE_VERSION="2.8.3" -CFFI_VERSION="1.15.1" SCANDIR_VERSION="1.10.0" -PSUTIL_VERSION="5.9.5" +PSUTIL_VERSION="6.0.0" SUBPROCESS32_VERSION="3.5.4" # Versions no longer upgradable because of Python 2 deprecation. +CFFI_VERSION="1.15.1" # pyOpenSSL 19.1.0 is used with OpenSSL 1.0.2 libs. PYOPENSSL_VERSION="21.0.0" # Backported fix for https://github.com/pypa/pip/issues/9827 From 52935d780c73d6752f55cc030b4ff85026bd200d Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 13:38:21 +0000 Subject: [PATCH 20/42] Try penultimate commit from py2-support branch of compat. --- chevah_build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chevah_build b/chevah_build index 50ad2fb8e..10d4f02a5 100755 --- a/chevah_build +++ b/chevah_build @@ -792,10 +792,10 @@ command_compat() { execute pushd build echo '##### Running chevah.compat tests... #####' execute rm -rf compat - execute git clone https://github.com/chevah/compat.git + execute git clone https://github.com/chevah/compat.git -b py2-support execute pushd compat # Switch to last revision supporting Python 2.7. - execute git checkout d4a3dfc815e6cbfac5e0244a0ee22bf88627e76c + execute git checkout ffeb6f6830a4fc8f3d2fefdf2f4eb7f4db8cbcf4 # Copy over current brink stuff, as some changes might require it. execute cp ../../brink.{conf,sh} ./ # We patch the Python version to match the one that we have just built From 340d8d5f6e36e7c00a5e70aa7fe14a4eb613b028 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 13:52:22 +0000 Subject: [PATCH 21/42] Deactivate compat tests in GitHub workflows for now. --- .github/workflows/bare.yaml | 6 +++--- .github/workflows/docker.yaml | 2 +- chevah_build | 2 -- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/bare.yaml b/.github/workflows/bare.yaml index fe8ecb728..e349f2218 100644 --- a/.github/workflows/bare.yaml +++ b/.github/workflows/bare.yaml @@ -69,7 +69,7 @@ jobs: - name: Compat tests run: | cd $CHEVAH_REPO - ./chevah_build compat + true ./chevah_build compat # Upload using a (per-OS selected) sftp command, then show final links. - name: Upload testing package @@ -141,7 +141,7 @@ jobs: - name: Compat tests run: | cd $CHEVAH_REPO - ./chevah_build compat + true ./chevah_build compat - name: Upload testing package run: | @@ -210,7 +210,7 @@ jobs: shell: bash run: | cd $CHEVAH_REPO - ./chevah_build compat + true ./chevah_build compat # To use an RSA key with SFTPPlus, install upstream OpenSSH package, # which is more finicky in regards to file permissions. diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index aa3d51ad9..16c7cbccf 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -95,7 +95,7 @@ jobs: run: | chown -R chevah /home/chevah/$CHEVAH_REPO cd /home/chevah/$CHEVAH_REPO - su chevah -c "./chevah_build compat" + true su chevah -c "./chevah_build compat" # Using `~/` is problematic under Docker, use `/root/`. - name: Upload testing package diff --git a/chevah_build b/chevah_build index 10d4f02a5..31ad0c244 100755 --- a/chevah_build +++ b/chevah_build @@ -794,8 +794,6 @@ command_compat() { execute rm -rf compat execute git clone https://github.com/chevah/compat.git -b py2-support execute pushd compat - # Switch to last revision supporting Python 2.7. - execute git checkout ffeb6f6830a4fc8f3d2fefdf2f4eb7f4db8cbcf4 # Copy over current brink stuff, as some changes might require it. execute cp ../../brink.{conf,sh} ./ # We patch the Python version to match the one that we have just built From 618b8d8aac5dbae81b2b898cf0dd16ffee200eef Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:03:20 +0000 Subject: [PATCH 22/42] Updated non-containerized workflows. --- .github/workflows/bare.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bare.yaml b/.github/workflows/bare.yaml index e349f2218..93a5d00bf 100644 --- a/.github/workflows/bare.yaml +++ b/.github/workflows/bare.yaml @@ -30,7 +30,7 @@ jobs: fail-fast: false matrix: # The ARM64 build actually runs on an Amazon Docker container on Laja. - runs-on: [ ubuntu-20.04, ubuntu-18.04, amzn-2-arm64 ] + runs-on: [ ubuntu-20.04, amzn-2-arm64 ] timeout-minutes: 120 steps: - name: Prepare OS @@ -96,7 +96,7 @@ jobs: strategy: fail-fast: false matrix: - runs-on: [ macos-11 ] + runs-on: [ macos-13 ] timeout-minutes: 60 steps: # Avoid linking to Homebrew's libintl during build. From cf619dbc16bccb33fb6db605c30152502c57f534 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:06:41 +0000 Subject: [PATCH 23/42] Try latest version to build on CentOS 5. --- chevah_build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chevah_build b/chevah_build index 31ad0c244..9463dc1a3 100755 --- a/chevah_build +++ b/chevah_build @@ -331,6 +331,8 @@ case $OS in export PATH="/usr/local/bin:$PATH" # In particular, Perl's Test::Simple and its deps are required. execute perl -MTest::Simple -e 1 + # Version 6.0.0 can't build on RHEL 5 and clones. + PSUTIL_VERSION="5.9.8" ;; *) # Only supported Linux distributions should be left. From a348029877e399f6594341e6ed59b37ae7aa19ef Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:23:35 +0000 Subject: [PATCH 24/42] Try older psutil version to build on CentOS 5. --- chevah_build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chevah_build b/chevah_build index 9463dc1a3..65bb755e8 100755 --- a/chevah_build +++ b/chevah_build @@ -331,8 +331,8 @@ case $OS in export PATH="/usr/local/bin:$PATH" # In particular, Perl's Test::Simple and its deps are required. execute perl -MTest::Simple -e 1 - # Version 6.0.0 can't build on RHEL 5 and clones. - PSUTIL_VERSION="5.9.8" + # Version 5.9.8 and newer can't build on RHEL 5 and clones. + PSUTIL_VERSION="5.9.6" ;; *) # Only supported Linux distributions should be left. From 3bc5bef6c5dbc23cbc99726a3ff52bdb50df6626 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:24:05 +0000 Subject: [PATCH 25/42] Try building ARM64 Linux package on macOS. --- .github/workflows/docker.yaml | 72 +++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 16c7cbccf..1336451ba 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -20,10 +20,76 @@ env: USER: chevah CHEVAH_CONTAINER: yes -# Using a job name that doesn't contain the OS name, to minimize the risk of -# confusion with the OS names of the containers, which are the relevant ones. jobs: - latest: + + arm64: + runs-on: macos-latest + container: amazonlinux-2 + strategy: + fail-fast: false + + timeout-minutes: 30 + steps: + - name: Prepare OS + run: yum -y install git-core gcc make m4 patch tar unzip perl perl-Test-Simple xz gcc-c++ dejagnu + + # On a Docker container, everything runs as root by default. + - name: Chevah user setup + run: | + useradd -g adm -s /bin/bash -m chevah + # Don't just add to the file, reset it, as some default options might + # be detrimental to our testing, e.g. CentOS 5's "requiretty" option. + echo '%adm ALL=NOPASSWD: ALL' > /etc/sudoers + + # GHA's checkout action doesn't work on exotic platforms. This fails on opening a new PR. + - name: Clone sources independently + run: | + cd /home/chevah/ + git init $CHEVAH_REPO + cd $CHEVAH_REPO + # Cleanup the repo. + git rev-parse --symbolic-full-name --verify --quiet HEAD || true + git rev-parse --symbolic-full-name --branches || true + git remote remove origin || true + # Update repo token. + git remote add origin https://github.com/chevah/$CHEVAH_REPO + git fetch --no-tags --prune origin + # Prepare the code. + git clean -f + git reset --hard ${{ github.event.after }} + git log -1 --format='%H' + + - name: Detect OS and build Python + run: | + cd /home/chevah/$CHEVAH_REPO + ./brink.sh detect_os + ./chevah_build build + + - name: Own tests + run: | + cd /home/chevah/$CHEVAH_REPO + ./chevah_build test + + # Compat tests must run as regular user with sudo rights. + - name: Compat tests + run: | + chown -R chevah /home/chevah/$CHEVAH_REPO + cd /home/chevah/$CHEVAH_REPO + true su chevah -c "./chevah_build compat" + + # Using `~/` is problematic under Docker, use `/root/`. + - name: Upload testing package + run: | + mkdir -pv /root/.ssh/ + cd /home/chevah/$CHEVAH_REPO + touch priv_key + chmod 600 priv_key + echo "${{ secrets.SFTPPLUS_BIN_PRIV_KEY }}" > priv_key + echo "${{ secrets.SFTPPLUS_BIN_HOST_KEY }}" > /root/.ssh/known_hosts + ./publish_dist.sh + rm priv_key + + x64: runs-on: ubuntu-latest container: ${{ matrix.container }} strategy: From 4abf06c6c71e50b9005fa3340c3a2b513a3df73a Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:31:31 +0000 Subject: [PATCH 26/42] No Docker on GitHub's Apple Silicon macOS runners. --- .github/workflows/docker.yaml | 67 ----------------------------------- 1 file changed, 67 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 1336451ba..d16426942 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -22,73 +22,6 @@ env: jobs: - arm64: - runs-on: macos-latest - container: amazonlinux-2 - strategy: - fail-fast: false - - timeout-minutes: 30 - steps: - - name: Prepare OS - run: yum -y install git-core gcc make m4 patch tar unzip perl perl-Test-Simple xz gcc-c++ dejagnu - - # On a Docker container, everything runs as root by default. - - name: Chevah user setup - run: | - useradd -g adm -s /bin/bash -m chevah - # Don't just add to the file, reset it, as some default options might - # be detrimental to our testing, e.g. CentOS 5's "requiretty" option. - echo '%adm ALL=NOPASSWD: ALL' > /etc/sudoers - - # GHA's checkout action doesn't work on exotic platforms. This fails on opening a new PR. - - name: Clone sources independently - run: | - cd /home/chevah/ - git init $CHEVAH_REPO - cd $CHEVAH_REPO - # Cleanup the repo. - git rev-parse --symbolic-full-name --verify --quiet HEAD || true - git rev-parse --symbolic-full-name --branches || true - git remote remove origin || true - # Update repo token. - git remote add origin https://github.com/chevah/$CHEVAH_REPO - git fetch --no-tags --prune origin - # Prepare the code. - git clean -f - git reset --hard ${{ github.event.after }} - git log -1 --format='%H' - - - name: Detect OS and build Python - run: | - cd /home/chevah/$CHEVAH_REPO - ./brink.sh detect_os - ./chevah_build build - - - name: Own tests - run: | - cd /home/chevah/$CHEVAH_REPO - ./chevah_build test - - # Compat tests must run as regular user with sudo rights. - - name: Compat tests - run: | - chown -R chevah /home/chevah/$CHEVAH_REPO - cd /home/chevah/$CHEVAH_REPO - true su chevah -c "./chevah_build compat" - - # Using `~/` is problematic under Docker, use `/root/`. - - name: Upload testing package - run: | - mkdir -pv /root/.ssh/ - cd /home/chevah/$CHEVAH_REPO - touch priv_key - chmod 600 priv_key - echo "${{ secrets.SFTPPLUS_BIN_PRIV_KEY }}" > priv_key - echo "${{ secrets.SFTPPLUS_BIN_HOST_KEY }}" > /root/.ssh/known_hosts - ./publish_dist.sh - rm priv_key - x64: runs-on: ubuntu-latest container: ${{ matrix.container }} From 8f0df95393f17d55d3e33a33923e5adbdad5e975 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:37:25 +0000 Subject: [PATCH 27/42] Properly set an older psutil version to build on generic Linux. --- chevah_build | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/chevah_build b/chevah_build index 65bb755e8..fb8e8cef3 100755 --- a/chevah_build +++ b/chevah_build @@ -28,6 +28,7 @@ SQLITE_VERSION="3.46.0" # Python modules versions to be used everywhere possible. PYSQLITE_VERSION="2.8.3" SCANDIR_VERSION="1.10.0" +# An older version is used on generic Linux to have it built on CentOS 5. PSUTIL_VERSION="6.0.0" SUBPROCESS32_VERSION="3.5.4" @@ -331,8 +332,16 @@ case $OS in export PATH="/usr/local/bin:$PATH" # In particular, Perl's Test::Simple and its deps are required. execute perl -MTest::Simple -e 1 - # Version 5.9.8 and newer can't build on RHEL 5 and clones. - PSUTIL_VERSION="5.9.6" + # Version 6.0.0 of psutil can't build on RHEL 5 and clones. + PIP_LIBRARIES="\ + cryptography==${CRYPTOGRAPHY_VERSION} \ + pyOpenSSL==${PYOPENSSL_VERSION} \ + scandir==${SCANDIR_VERSION} \ + subprocess32==${SUBPROCESS32_VERSION} \ + bcrypt==${BCRYPT_VERSION} \ + psutil==5.9.8 \ + setproctitle==${SETPROCTITLE_VERSION} + " ;; *) # Only supported Linux distributions should be left. From cbd3a089dbfadcaba78341f174e2f852be75665a Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:44:04 +0000 Subject: [PATCH 28/42] Try psutil version 5.9.6 on CentOS 5. --- chevah_build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chevah_build b/chevah_build index fb8e8cef3..427fc1522 100755 --- a/chevah_build +++ b/chevah_build @@ -332,14 +332,14 @@ case $OS in export PATH="/usr/local/bin:$PATH" # In particular, Perl's Test::Simple and its deps are required. execute perl -MTest::Simple -e 1 - # Version 6.0.0 of psutil can't build on RHEL 5 and clones. + # Version 5.9.8 and newer of psutil can't build on RHEL 5 and clones. PIP_LIBRARIES="\ cryptography==${CRYPTOGRAPHY_VERSION} \ pyOpenSSL==${PYOPENSSL_VERSION} \ scandir==${SCANDIR_VERSION} \ subprocess32==${SUBPROCESS32_VERSION} \ bcrypt==${BCRYPT_VERSION} \ - psutil==5.9.8 \ + psutil==5.9.6 \ setproctitle==${SETPROCTITLE_VERSION} " ;; From bab398119f5482d9e522b0e29a0c364965a7982b Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 14:56:58 +0000 Subject: [PATCH 29/42] Try bulding Ubuntu 18.04 package in a container. --- .github/workflows/docker.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index d16426942..e09ad0428 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -30,7 +30,7 @@ jobs: matrix: # CentOS 5.11 setup was saved as an image pushed to Docker Hub. See the # Overview section at https://hub.docker.com/r/proatria/centos for details. - container: [ 'alpine:3.12', 'centos:8.2.2004', 'proatria/centos:5.11-chevah1' ] + container: [ 'alpine:3.12', 'centos:8.2.2004', 'proatria/centos:5.11-chevah1', 'ubuntu:18.04' ] timeout-minutes: 30 steps: From f540db242c309f5a64b93131e3f25bc7ea865277 Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 15:00:56 +0000 Subject: [PATCH 30/42] Try bulding Ubuntu 18.04 package in a container, take two. --- .github/workflows/docker.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index e09ad0428..3db636d31 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -52,6 +52,13 @@ jobs: yum -y upgrade yum -y install git curl gcc make m4 automake libtool patch openssl-devel zlib-devel libffi-devel ncurses-devel sudo which openssh-clients + - name: Ubuntu setup + if: startsWith(matrix.container, 'ubuntu') + run: | + apt update + apt --yes dist-upgrade + apt --yes install gcc make m4 automake libtool patch git libffi-dev zlib1g-dev libncurses5-dev libssl-dev + # On a Docker container, everything runs as root by default. - name: Chevah user setup run: | From 4a3120a623bb213ac8b93a6ba3be3fbec9619e1c Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 1 Aug 2024 15:02:24 +0000 Subject: [PATCH 31/42] Try bulding Ubuntu 18.04 package in a container, take three. --- .github/workflows/docker.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 3db636d31..cf7658199 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -57,7 +57,7 @@ jobs: run: | apt update apt --yes dist-upgrade - apt --yes install gcc make m4 automake libtool patch git libffi-dev zlib1g-dev libncurses5-dev libssl-dev + apt --yes install curl bash gcc make m4 automake libtool patch git libffi-dev zlib1g-dev libncurses5-dev libssl-dev # On a Docker container, everything runs as root by default. - name: Chevah user setup From 0a58cdbb8efafb3a7f18e1e023a7377cb2caddee Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 15 Aug 2024 14:08:57 +0000 Subject: [PATCH 32/42] Patched our Python sources for CVE-2024-0397. --- src/python/Python-2.7.18/Modules/_ssl.c | 93 ++++++++++++++++++++++++- src/python/README | 5 +- 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/src/python/Python-2.7.18/Modules/_ssl.c b/src/python/Python-2.7.18/Modules/_ssl.c index 6df9f4779..e28f02d12 100644 --- a/src/python/Python-2.7.18/Modules/_ssl.c +++ b/src/python/Python-2.7.18/Modules/_ssl.c @@ -106,6 +106,10 @@ struct py_ssl_library_code { # define PY_OPENSSL_1_1_API 1 #endif +#if (OPENSSL_VERSION_NUMBER >= 0x30300000L) && !defined(LIBRESSL_VERSION_NUMBER) +# define OPENSSL_VERSION_3_3 1 +#endif + /* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */ #if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL # define PY_OPENSSL_1_1_API 1 @@ -161,6 +165,16 @@ struct py_ssl_library_code { #define HAVE_OPENSSL_CRYPTO_LOCK #endif +/* OpenSSL 1.1+ allows locking X509_STORE, 1.0.2 doesn't. */ +#ifdef OPENSSL_VERSION_1_1 +#define HAVE_OPENSSL_X509_STORE_LOCK +#endif + +/* OpenSSL 3.3 added the X509_STORE_get1_objects API */ +#ifdef OPENSSL_VERSION_3_3 +#define HAVE_OPENSSL_X509_STORE_GET1_OBJECTS 1 +#endif + #if defined(OPENSSL_VERSION_1_1) && !defined(OPENSSL_NO_SSL2) #define OPENSSL_NO_SSL2 #endif @@ -3504,7 +3518,15 @@ cert_store_stats(PySSLContext *self) int x509 = 0, crl = 0, ca = 0, i; store = SSL_CTX_get_cert_store(self->ctx); - objs = X509_STORE_get0_objects(store); + #if HAVE_OPENSSL_X509_STORE_GET1_OBJECTS + objs = X509_STORE_get1_objects(store); + if (objs == NULL) { + PyErr_SetString(PyExc_MemoryError, "failed to query cert store"); + return NULL; + } + #else + objs = X509_STORE_get0_objects(store); + #endif for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { obj = sk_X509_OBJECT_value(objs, i); switch (X509_OBJECT_get_type(obj)) { @@ -3521,9 +3543,15 @@ cert_store_stats(PySSLContext *self) /* Ignore X509_LU_FAIL, X509_LU_RETRY, X509_LU_PKEY. * As far as I can tell they are internal states and never * stored in a cert store */ + /* Ignore enrecognized types */ break; } } + +#if HAVE_OPENSSL_X509_STORE_GET1_OBJECTS + sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free); +#endif + return Py_BuildValue("{sisisi}", "x509", x509, "crl", crl, "x509_ca", ca); } @@ -3558,9 +3586,16 @@ get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwds) if ((rlist = PyList_New(0)) == NULL) { return NULL; } - store = SSL_CTX_get_cert_store(self->ctx); +#if HAVE_OPENSSL_X509_STORE_GET1_OBJECTS + objs = X509_STORE_get1_objects(store); + if (objs == NULL) { + PyErr_SetString(PyExc_MemoryError, "failed to query cert store"); + return NULL; + } +#else objs = X509_STORE_get0_objects(store); +#endif for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { X509_OBJECT *obj; X509 *cert; @@ -3588,9 +3623,15 @@ get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwds) } Py_CLEAR(ci); } + #if HAVE_OPENSSL_X509_STORE_GET1_OBJECTS + sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free); + #endif return rlist; error: +#if HAVE_OPENSSL_X509_STORE_GET1_OBJECTS + sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free); +#endif Py_XDECREF(ci); Py_XDECREF(rlist); return NULL; @@ -4642,3 +4683,51 @@ init_ssl(void) return; } +/* Shim of X509_STORE_get1_objects API from OpenSSL 3.3 + * Only available with the X509_STORE_lock() API */ +#if defined(HAVE_OPENSSL_X509_STORE_LOCK) && !defined(OPENSSL_VERSION_3_3) +#define HAVE_OPENSSL_X509_STORE_GET1_OBJECTS 1 + +static X509_OBJECT *x509_object_dup(const X509_OBJECT *obj) +{ + int ok; + X509_OBJECT *ret = X509_OBJECT_new(); + if (ret == NULL) { + return NULL; + } + switch (X509_OBJECT_get_type(obj)) { + case X509_LU_X509: + ok = X509_OBJECT_set1_X509(ret, X509_OBJECT_get0_X509(obj)); + break; + case X509_LU_CRL: + /* X509_OBJECT_get0_X509_CRL was not const-correct prior to 3.0.*/ + ok = X509_OBJECT_set1_X509_CRL( + ret, X509_OBJECT_get0_X509_CRL((X509_OBJECT *)obj)); + break; + default: + /* We cannot duplicate unrecognized types in a polyfill, but it is + * safe to leave an empty object. The caller will ignore it. */ + ok = 1; + break; + } + if (!ok) { + X509_OBJECT_free(ret); + return NULL; + } + return ret; +} + +static STACK_OF(X509_OBJECT) * +X509_STORE_get1_objects(X509_STORE *store) +{ + STACK_OF(X509_OBJECT) *ret; + if (!X509_STORE_lock(store)) { + return NULL; + } + ret = sk_X509_OBJECT_deep_copy(X509_STORE_get0_objects(store), + x509_object_dup, X509_OBJECT_free); + X509_STORE_unlock(store); + return ret; +} +#endif + diff --git a/src/python/README b/src/python/README index a1670f31a..f3d5a7602 100644 --- a/src/python/README +++ b/src/python/README @@ -14,9 +14,8 @@ to apply to our Python sources tree, then issue something like: cd Python-2.7.18 patch -p1 < ~/Downloads/CVE-2020-10735.diff -Python sources are currently patched from upstream Active State branch at -https://github.com/ActiveState/cpython/commits/2.7.18.6_base/ up to & including -fixes from July 31, 2024. Last commit: 0f39e68197b735203b8c1b4988ff78ae61842864. +Python sources are currently patched from upstream Active State branch up to and +including fixes from Aug 9, 2024 for ActiveState Python version 2.7.18.10. Patches that can be applied on Windows as hot fixes (see below for more details) are saved as diff files in the current directory. They are also applied on From 80735e7bd76301ff63b6a932fa6ef7ec69b7f83c Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 15 Aug 2024 14:47:20 +0000 Subject: [PATCH 33/42] Patched our OpenSSL 1.1.1 sources for CVE-2024-2511, CVE-2024-4741, CVE-2024-5535. --- .../test_python_binary_dist.py | 2 +- src/openssl/README | 7 +- .../ACKNOWLEDGEMENTS | 0 .../AUTHORS | 0 .../CHANGES | 17 +++++ .../CONTRIBUTING | 0 .../Configurations/00-base-templates.conf | 0 .../Configurations/10-main.conf | 0 .../Configurations/15-android.conf | 0 .../Configurations/15-ios.conf | 0 .../Configurations/50-djgpp.conf | 0 .../Configurations/50-haiku.conf | 0 .../Configurations/50-masm.conf | 0 .../Configurations/50-win-onecore.conf | 0 .../Configurations/INTERNALS.Configure | 0 .../Configurations/README | 0 .../Configurations/README.design | 0 .../Configurations/common.tmpl | 0 .../Configurations/common0.tmpl | 0 .../Configurations/descrip.mms.tmpl | 0 .../Configurations/shared-info.pl | 0 .../Configurations/unix-Makefile.tmpl | 0 .../Configurations/unix-checker.pm | 0 .../Configurations/windows-checker.pm | 0 .../Configurations/windows-makefile.tmpl | 0 .../Configure | 0 .../FAQ | 0 .../INSTALL | 0 .../LICENSE | 0 .../NEWS | 7 ++ .../NOTES.ANDROID | 0 .../NOTES.DJGPP | 0 .../NOTES.PERL | 0 .../NOTES.UNIX | 0 .../NOTES.VMS | 0 .../NOTES.WIN | 0 .../README | 2 +- .../README.ENGINE | 0 .../README.FIPS | 0 .../VMS/VMSify-conf.pl | 0 .../VMS/engine.opt | 0 .../VMS/msg_install.com | 0 .../VMS/msg_staging.com | 0 .../VMS/openssl_ivp.com.in | 0 .../VMS/openssl_shutdown.com.in | 0 .../VMS/openssl_startup.com.in | 0 .../VMS/openssl_utils.com.in | 0 .../VMS/test-includes.com | 0 .../VMS/translatesyms.pl | 0 .../apps/CA.pl.in | 0 .../apps/app_rand.c | 0 .../apps/apps.c | 0 .../apps/apps.h | 0 .../apps/asn1pars.c | 0 .../apps/bf_prefix.c | 0 .../apps/build.info | 0 .../apps/ca-cert.srl | 0 .../apps/ca-key.pem | 0 .../apps/ca-req.pem | 0 .../apps/ca.c | 0 .../apps/cert.pem | 0 .../apps/ciphers.c | 0 .../apps/client.pem | 0 .../apps/cms.c | 0 .../apps/crl.c | 0 .../apps/crl2p7.c | 0 .../apps/ct_log_list.cnf | 0 .../apps/demoSRP/srp_verifier.txt | 0 .../apps/demoSRP/srp_verifier.txt.attr | 0 .../apps/dgst.c | 0 .../apps/dh1024.pem | 0 .../apps/dh2048.pem | 0 .../apps/dh4096.pem | 0 .../apps/dhparam.c | 0 .../apps/dsa-ca.pem | 0 .../apps/dsa-pca.pem | 0 .../apps/dsa.c | 0 .../apps/dsa1024.pem | 0 .../apps/dsa512.pem | 0 .../apps/dsap.pem | 0 .../apps/dsaparam.c | 0 .../apps/ec.c | 0 .../apps/ecparam.c | 0 .../apps/enc.c | 0 .../apps/engine.c | 0 .../apps/errstr.c | 0 .../apps/gendsa.c | 0 .../apps/genpkey.c | 0 .../apps/genrsa.c | 0 .../apps/nseq.c | 0 .../apps/ocsp.c | 0 .../apps/openssl-vms.cnf | 0 .../apps/openssl.c | 0 .../apps/openssl.cnf | 0 .../apps/opt.c | 0 .../apps/passwd.c | 0 .../apps/pca-cert.srl | 0 .../apps/pca-key.pem | 0 .../apps/pca-req.pem | 0 .../apps/pkcs12.c | 0 .../apps/pkcs7.c | 0 .../apps/pkcs8.c | 0 .../apps/pkey.c | 0 .../apps/pkeyparam.c | 0 .../apps/pkeyutl.c | 0 .../apps/prime.c | 0 .../apps/privkey.pem | 0 .../apps/progs.pl | 0 .../apps/rand.c | 0 .../apps/rehash.c | 0 .../apps/req.c | 0 .../apps/req.pem | 0 .../apps/rsa.c | 0 .../apps/rsa8192.pem | 0 .../apps/rsautl.c | 0 .../apps/s1024key.pem | 0 .../apps/s1024req.pem | 0 .../apps/s512-key.pem | 0 .../apps/s512-req.pem | 0 .../apps/s_apps.h | 0 .../apps/s_cb.c | 0 .../apps/s_client.c | 0 .../apps/s_server.c | 0 .../apps/s_socket.c | 0 .../apps/s_time.c | 0 .../apps/server.pem | 0 .../apps/server.srl | 0 .../apps/server2.pem | 0 .../apps/sess_id.c | 0 .../apps/smime.c | 0 .../apps/speed.c | 0 .../apps/spkac.c | 0 .../apps/srp.c | 0 .../apps/storeutl.c | 0 .../apps/testCA.pem | 0 .../apps/testdsa.h | 0 .../apps/testrsa.h | 0 .../apps/timeouts.h | 0 .../apps/ts.c | 0 .../apps/tsget.in | 0 .../apps/verify.c | 0 .../apps/version.c | 0 .../apps/vms_decc_argv.c | 0 .../apps/vms_decc_init.c | 0 .../apps/vms_term_sock.c | 0 .../apps/vms_term_sock.h | 0 .../apps/win32_init.c | 0 .../apps/x509.c | 0 .../build.info | 0 .../config | 0 .../config.com | 0 .../crypto/LPdir_nyi.c | 0 .../crypto/LPdir_unix.c | 0 .../crypto/LPdir_vms.c | 0 .../crypto/LPdir_win.c | 0 .../crypto/LPdir_win32.c | 0 .../crypto/LPdir_wince.c | 0 .../crypto/aes/aes_cbc.c | 0 .../crypto/aes/aes_cfb.c | 0 .../crypto/aes/aes_core.c | 0 .../crypto/aes/aes_ecb.c | 0 .../crypto/aes/aes_ige.c | 0 .../crypto/aes/aes_local.h | 0 .../crypto/aes/aes_misc.c | 0 .../crypto/aes/aes_ofb.c | 0 .../crypto/aes/aes_wrap.c | 0 .../crypto/aes/aes_x86core.c | 0 .../crypto/aes/asm/aes-armv4.pl | 0 .../crypto/aes/asm/aes-c64xplus.pl | 0 .../crypto/aes/asm/aes-ia64.S | 0 .../crypto/aes/asm/aes-mips.pl | 0 .../crypto/aes/asm/aes-parisc.pl | 0 .../crypto/aes/asm/aes-ppc.pl | 0 .../crypto/aes/asm/aes-s390x.pl | 0 .../crypto/aes/asm/aes-sparcv9.pl | 0 .../crypto/aes/asm/aesfx-sparcv9.pl | 0 .../crypto/aes/asm/aesni-mb-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha1-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha256-x86_64.pl | 0 .../crypto/aes/asm/aesni-x86.pl | 0 .../crypto/aes/asm/aesni-x86_64.pl | 0 .../crypto/aes/asm/aesp8-ppc.pl | 0 .../crypto/aes/asm/aest4-sparcv9.pl | 0 .../crypto/aes/asm/aesv8-armx.pl | 0 .../crypto/aes/asm/bsaes-armv7.pl | 0 .../crypto/aes/asm/vpaes-armv8.pl | 0 .../crypto/aes/asm/vpaes-ppc.pl | 0 .../crypto/aes/asm/vpaes-x86.pl | 0 .../crypto/aes/asm/vpaes-x86_64.pl | 0 .../crypto/aes/build.info | 0 .../crypto/alphacpuid.pl | 0 .../crypto/aria/aria.c | 0 .../crypto/aria/build.info | 0 .../crypto/arm64cpuid.pl | 0 .../crypto/arm_arch.h | 0 .../crypto/armcap.c | 0 .../crypto/armv4cpuid.pl | 0 .../crypto/asn1/a_bitstr.c | 0 .../crypto/asn1/a_d2i_fp.c | 0 .../crypto/asn1/a_digest.c | 0 .../crypto/asn1/a_dup.c | 0 .../crypto/asn1/a_gentm.c | 0 .../crypto/asn1/a_i2d_fp.c | 0 .../crypto/asn1/a_int.c | 0 .../crypto/asn1/a_mbstr.c | 0 .../crypto/asn1/a_object.c | 0 .../crypto/asn1/a_octet.c | 0 .../crypto/asn1/a_print.c | 0 .../crypto/asn1/a_sign.c | 0 .../crypto/asn1/a_strex.c | 0 .../crypto/asn1/a_strnid.c | 0 .../crypto/asn1/a_time.c | 0 .../crypto/asn1/a_type.c | 0 .../crypto/asn1/a_utctm.c | 0 .../crypto/asn1/a_utf8.c | 0 .../crypto/asn1/a_verify.c | 0 .../crypto/asn1/ameth_lib.c | 0 .../crypto/asn1/asn1_err.c | 0 .../crypto/asn1/asn1_gen.c | 0 .../crypto/asn1/asn1_item_list.c | 0 .../crypto/asn1/asn1_item_list.h | 0 .../crypto/asn1/asn1_lib.c | 0 .../crypto/asn1/asn1_local.h | 0 .../crypto/asn1/asn1_par.c | 0 .../crypto/asn1/asn_mime.c | 0 .../crypto/asn1/asn_moid.c | 0 .../crypto/asn1/asn_mstbl.c | 0 .../crypto/asn1/asn_pack.c | 0 .../crypto/asn1/bio_asn1.c | 0 .../crypto/asn1/bio_ndef.c | 0 .../crypto/asn1/build.info | 0 .../crypto/asn1/charmap.h | 0 .../crypto/asn1/charmap.pl | 0 .../crypto/asn1/d2i_pr.c | 0 .../crypto/asn1/d2i_pu.c | 0 .../crypto/asn1/evp_asn1.c | 0 .../crypto/asn1/f_int.c | 0 .../crypto/asn1/f_string.c | 0 .../crypto/asn1/i2d_pr.c | 0 .../crypto/asn1/i2d_pu.c | 0 .../crypto/asn1/n_pkey.c | 0 .../crypto/asn1/nsseq.c | 0 .../crypto/asn1/p5_pbe.c | 0 .../crypto/asn1/p5_pbev2.c | 0 .../crypto/asn1/p5_scrypt.c | 0 .../crypto/asn1/p8_pkey.c | 0 .../crypto/asn1/standard_methods.h | 0 .../crypto/asn1/t_bitst.c | 0 .../crypto/asn1/t_pkey.c | 0 .../crypto/asn1/t_spki.c | 0 .../crypto/asn1/tasn_dec.c | 0 .../crypto/asn1/tasn_enc.c | 0 .../crypto/asn1/tasn_fre.c | 0 .../crypto/asn1/tasn_new.c | 0 .../crypto/asn1/tasn_prn.c | 0 .../crypto/asn1/tasn_scn.c | 0 .../crypto/asn1/tasn_typ.c | 0 .../crypto/asn1/tasn_utl.c | 0 .../crypto/asn1/tbl_standard.h | 0 .../crypto/asn1/x_algor.c | 0 .../crypto/asn1/x_bignum.c | 0 .../crypto/asn1/x_info.c | 0 .../crypto/asn1/x_int64.c | 0 .../crypto/asn1/x_long.c | 0 .../crypto/asn1/x_pkey.c | 0 .../crypto/asn1/x_sig.c | 0 .../crypto/asn1/x_spki.c | 0 .../crypto/asn1/x_val.c | 0 .../crypto/async/arch/async_null.c | 0 .../crypto/async/arch/async_null.h | 0 .../crypto/async/arch/async_posix.c | 0 .../crypto/async/arch/async_posix.h | 0 .../crypto/async/arch/async_win.c | 0 .../crypto/async/arch/async_win.h | 0 .../crypto/async/async.c | 0 .../crypto/async/async_err.c | 0 .../crypto/async/async_local.h | 0 .../crypto/async/async_wait.c | 0 .../crypto/async/build.info | 0 .../crypto/bf/asm/bf-586.pl | 0 .../crypto/bf/bf_cfb64.c | 0 .../crypto/bf/bf_ecb.c | 0 .../crypto/bf/bf_enc.c | 0 .../crypto/bf/bf_local.h | 0 .../crypto/bf/bf_ofb64.c | 0 .../crypto/bf/bf_pi.h | 0 .../crypto/bf/bf_skey.c | 0 .../crypto/bf/build.info | 0 .../crypto/bio/b_addr.c | 0 .../crypto/bio/b_dump.c | 0 .../crypto/bio/b_print.c | 0 .../crypto/bio/b_sock.c | 0 .../crypto/bio/b_sock2.c | 0 .../crypto/bio/bf_buff.c | 0 .../crypto/bio/bf_lbuf.c | 0 .../crypto/bio/bf_nbio.c | 0 .../crypto/bio/bf_null.c | 0 .../crypto/bio/bio_cb.c | 0 .../crypto/bio/bio_err.c | 0 .../crypto/bio/bio_lib.c | 0 .../crypto/bio/bio_local.h | 0 .../crypto/bio/bio_meth.c | 0 .../crypto/bio/bss_acpt.c | 0 .../crypto/bio/bss_bio.c | 0 .../crypto/bio/bss_conn.c | 0 .../crypto/bio/bss_dgram.c | 0 .../crypto/bio/bss_fd.c | 0 .../crypto/bio/bss_file.c | 0 .../crypto/bio/bss_log.c | 0 .../crypto/bio/bss_mem.c | 0 .../crypto/bio/bss_null.c | 0 .../crypto/bio/bss_sock.c | 0 .../crypto/bio/build.info | 0 .../crypto/blake2/blake2_impl.h | 0 .../crypto/blake2/blake2_local.h | 0 .../crypto/blake2/blake2b.c | 0 .../crypto/blake2/blake2s.c | 0 .../crypto/blake2/build.info | 0 .../crypto/blake2/m_blake2b.c | 0 .../crypto/blake2/m_blake2s.c | 0 .../crypto/bn/README.pod | 0 .../crypto/bn/asm/alpha-mont.pl | 0 .../crypto/bn/asm/armv4-gf2m.pl | 0 .../crypto/bn/asm/armv4-mont.pl | 0 .../crypto/bn/asm/armv8-mont.pl | 0 .../crypto/bn/asm/bn-586.pl | 0 .../crypto/bn/asm/bn-c64xplus.asm | 0 .../crypto/bn/asm/c64xplus-gf2m.pl | 0 .../crypto/bn/asm/co-586.pl | 0 .../crypto/bn/asm/ia64-mont.pl | 0 .../crypto/bn/asm/ia64.S | 0 .../crypto/bn/asm/mips-mont.pl | 0 .../crypto/bn/asm/mips.pl | 0 .../crypto/bn/asm/parisc-mont.pl | 0 .../crypto/bn/asm/ppc-mont.pl | 0 .../crypto/bn/asm/ppc.pl | 0 .../crypto/bn/asm/ppc64-mont.pl | 0 .../crypto/bn/asm/rsaz-avx2.pl | 0 .../crypto/bn/asm/rsaz-x86_64.pl | 0 .../crypto/bn/asm/s390x-gf2m.pl | 0 .../crypto/bn/asm/s390x-mont.pl | 0 .../crypto/bn/asm/s390x.S | 0 .../crypto/bn/asm/sparct4-mont.pl | 0 .../crypto/bn/asm/sparcv8.S | 0 .../crypto/bn/asm/sparcv8plus.S | 0 .../crypto/bn/asm/sparcv9-gf2m.pl | 0 .../crypto/bn/asm/sparcv9-mont.pl | 0 .../crypto/bn/asm/sparcv9a-mont.pl | 0 .../crypto/bn/asm/via-mont.pl | 0 .../crypto/bn/asm/vis3-mont.pl | 0 .../crypto/bn/asm/x86-gf2m.pl | 0 .../crypto/bn/asm/x86-mont.pl | 0 .../crypto/bn/asm/x86_64-gcc.c | 0 .../crypto/bn/asm/x86_64-gf2m.pl | 0 .../crypto/bn/asm/x86_64-mont.pl | 0 .../crypto/bn/asm/x86_64-mont5.pl | 0 .../crypto/bn/bn_add.c | 0 .../crypto/bn/bn_asm.c | 0 .../crypto/bn/bn_blind.c | 0 .../crypto/bn/bn_const.c | 0 .../crypto/bn/bn_ctx.c | 0 .../crypto/bn/bn_depr.c | 0 .../crypto/bn/bn_dh.c | 0 .../crypto/bn/bn_div.c | 0 .../crypto/bn/bn_err.c | 0 .../crypto/bn/bn_exp.c | 0 .../crypto/bn/bn_exp2.c | 0 .../crypto/bn/bn_gcd.c | 0 .../crypto/bn/bn_gf2m.c | 0 .../crypto/bn/bn_intern.c | 0 .../crypto/bn/bn_kron.c | 0 .../crypto/bn/bn_lib.c | 0 .../crypto/bn/bn_local.h | 0 .../crypto/bn/bn_mod.c | 0 .../crypto/bn/bn_mont.c | 0 .../crypto/bn/bn_mpi.c | 0 .../crypto/bn/bn_mul.c | 0 .../crypto/bn/bn_nist.c | 0 .../crypto/bn/bn_prime.c | 0 .../crypto/bn/bn_prime.h | 0 .../crypto/bn/bn_prime.pl | 0 .../crypto/bn/bn_print.c | 0 .../crypto/bn/bn_rand.c | 0 .../crypto/bn/bn_recp.c | 0 .../crypto/bn/bn_shift.c | 0 .../crypto/bn/bn_sqr.c | 0 .../crypto/bn/bn_sqrt.c | 0 .../crypto/bn/bn_srp.c | 0 .../crypto/bn/bn_word.c | 0 .../crypto/bn/bn_x931p.c | 0 .../crypto/bn/build.info | 0 .../crypto/bn/rsaz_exp.c | 0 .../crypto/bn/rsaz_exp.h | 0 .../crypto/buffer/buf_err.c | 0 .../crypto/buffer/buffer.c | 0 .../crypto/buffer/build.info | 0 .../crypto/build.info | 0 .../crypto/c64xpluscpuid.pl | 0 .../crypto/camellia/asm/cmll-x86.pl | 0 .../crypto/camellia/asm/cmll-x86_64.pl | 0 .../crypto/camellia/asm/cmllt4-sparcv9.pl | 0 .../crypto/camellia/build.info | 0 .../crypto/camellia/camellia.c | 0 .../crypto/camellia/cmll_cbc.c | 0 .../crypto/camellia/cmll_cfb.c | 0 .../crypto/camellia/cmll_ctr.c | 0 .../crypto/camellia/cmll_ecb.c | 0 .../crypto/camellia/cmll_local.h | 0 .../crypto/camellia/cmll_misc.c | 0 .../crypto/camellia/cmll_ofb.c | 0 .../crypto/cast/asm/cast-586.pl | 0 .../crypto/cast/build.info | 0 .../crypto/cast/c_cfb64.c | 0 .../crypto/cast/c_ecb.c | 0 .../crypto/cast/c_enc.c | 0 .../crypto/cast/c_ofb64.c | 0 .../crypto/cast/c_skey.c | 0 .../crypto/cast/cast_local.h | 0 .../crypto/cast/cast_s.h | 0 .../crypto/chacha/asm/chacha-armv4.pl | 0 .../crypto/chacha/asm/chacha-armv8.pl | 0 .../crypto/chacha/asm/chacha-c64xplus.pl | 0 .../crypto/chacha/asm/chacha-ppc.pl | 0 .../crypto/chacha/asm/chacha-s390x.pl | 0 .../crypto/chacha/asm/chacha-x86.pl | 0 .../crypto/chacha/asm/chacha-x86_64.pl | 0 .../crypto/chacha/build.info | 0 .../crypto/chacha/chacha_enc.c | 0 .../crypto/cmac/build.info | 0 .../crypto/cmac/cm_ameth.c | 0 .../crypto/cmac/cm_pmeth.c | 0 .../crypto/cmac/cmac.c | 0 .../crypto/cms/build.info | 0 .../crypto/cms/cms_asn1.c | 0 .../crypto/cms/cms_att.c | 0 .../crypto/cms/cms_cd.c | 0 .../crypto/cms/cms_dd.c | 0 .../crypto/cms/cms_enc.c | 0 .../crypto/cms/cms_env.c | 0 .../crypto/cms/cms_err.c | 0 .../crypto/cms/cms_ess.c | 0 .../crypto/cms/cms_io.c | 0 .../crypto/cms/cms_kari.c | 0 .../crypto/cms/cms_lib.c | 0 .../crypto/cms/cms_local.h | 0 .../crypto/cms/cms_pwri.c | 0 .../crypto/cms/cms_sd.c | 0 .../crypto/cms/cms_smime.c | 0 .../crypto/comp/build.info | 0 .../crypto/comp/c_zlib.c | 0 .../crypto/comp/comp_err.c | 0 .../crypto/comp/comp_lib.c | 0 .../crypto/comp/comp_local.h | 0 .../crypto/conf/build.info | 0 .../crypto/conf/conf_api.c | 0 .../crypto/conf/conf_def.c | 0 .../crypto/conf/conf_def.h | 0 .../crypto/conf/conf_err.c | 0 .../crypto/conf/conf_lib.c | 0 .../crypto/conf/conf_local.h | 0 .../crypto/conf/conf_mall.c | 0 .../crypto/conf/conf_mod.c | 0 .../crypto/conf/conf_sap.c | 0 .../crypto/conf/conf_ssl.c | 0 .../crypto/conf/keysets.pl | 0 .../crypto/cpt_err.c | 0 .../crypto/cryptlib.c | 0 .../crypto/ct/build.info | 0 .../crypto/ct/ct_b64.c | 0 .../crypto/ct/ct_err.c | 0 .../crypto/ct/ct_local.h | 0 .../crypto/ct/ct_log.c | 0 .../crypto/ct/ct_oct.c | 0 .../crypto/ct/ct_policy.c | 0 .../crypto/ct/ct_prn.c | 0 .../crypto/ct/ct_sct.c | 0 .../crypto/ct/ct_sct_ctx.c | 0 .../crypto/ct/ct_vfy.c | 0 .../crypto/ct/ct_x509v3.c | 0 .../crypto/ctype.c | 0 .../crypto/cversion.c | 0 .../crypto/des/asm/crypt586.pl | 0 .../crypto/des/asm/des-586.pl | 0 .../crypto/des/asm/des_enc.m4 | 0 .../crypto/des/asm/desboth.pl | 0 .../crypto/des/asm/dest4-sparcv9.pl | 0 .../crypto/des/build.info | 0 .../crypto/des/cbc_cksm.c | 0 .../crypto/des/cbc_enc.c | 0 .../crypto/des/cfb64ede.c | 0 .../crypto/des/cfb64enc.c | 0 .../crypto/des/cfb_enc.c | 0 .../crypto/des/des_enc.c | 0 .../crypto/des/des_local.h | 0 .../crypto/des/ecb3_enc.c | 0 .../crypto/des/ecb_enc.c | 0 .../crypto/des/fcrypt.c | 0 .../crypto/des/fcrypt_b.c | 0 .../crypto/des/ncbc_enc.c | 0 .../crypto/des/ofb64ede.c | 0 .../crypto/des/ofb64enc.c | 0 .../crypto/des/ofb_enc.c | 0 .../crypto/des/pcbc_enc.c | 0 .../crypto/des/qud_cksm.c | 0 .../crypto/des/rand_key.c | 0 .../crypto/des/set_key.c | 0 .../crypto/des/spr.h | 0 .../crypto/des/str2key.c | 0 .../crypto/des/xcbc_enc.c | 0 .../crypto/dh/build.info | 0 .../crypto/dh/dh1024.pem | 0 .../crypto/dh/dh192.pem | 0 .../crypto/dh/dh2048.pem | 0 .../crypto/dh/dh4096.pem | 0 .../crypto/dh/dh512.pem | 0 .../crypto/dh/dh_ameth.c | 0 .../crypto/dh/dh_asn1.c | 0 .../crypto/dh/dh_check.c | 0 .../crypto/dh/dh_depr.c | 0 .../crypto/dh/dh_err.c | 0 .../crypto/dh/dh_gen.c | 0 .../crypto/dh/dh_kdf.c | 0 .../crypto/dh/dh_key.c | 0 .../crypto/dh/dh_lib.c | 0 .../crypto/dh/dh_local.h | 0 .../crypto/dh/dh_meth.c | 0 .../crypto/dh/dh_pmeth.c | 0 .../crypto/dh/dh_prn.c | 0 .../crypto/dh/dh_rfc5114.c | 0 .../crypto/dh/dh_rfc7919.c | 0 .../crypto/dllmain.c | 0 .../crypto/dsa/build.info | 0 .../crypto/dsa/dsa_ameth.c | 0 .../crypto/dsa/dsa_asn1.c | 0 .../crypto/dsa/dsa_depr.c | 0 .../crypto/dsa/dsa_err.c | 0 .../crypto/dsa/dsa_gen.c | 0 .../crypto/dsa/dsa_key.c | 0 .../crypto/dsa/dsa_lib.c | 0 .../crypto/dsa/dsa_local.h | 0 .../crypto/dsa/dsa_meth.c | 0 .../crypto/dsa/dsa_ossl.c | 0 .../crypto/dsa/dsa_pmeth.c | 0 .../crypto/dsa/dsa_prn.c | 0 .../crypto/dsa/dsa_sign.c | 0 .../crypto/dsa/dsa_vrf.c | 0 .../crypto/dso/build.info | 0 .../crypto/dso/dso_dl.c | 0 .../crypto/dso/dso_dlfcn.c | 0 .../crypto/dso/dso_err.c | 0 .../crypto/dso/dso_lib.c | 0 .../crypto/dso/dso_local.h | 0 .../crypto/dso/dso_openssl.c | 0 .../crypto/dso/dso_vms.c | 0 .../crypto/dso/dso_win32.c | 0 .../crypto/ebcdic.c | 0 .../crypto/ec/asm/ecp_nistz256-armv4.pl | 0 .../crypto/ec/asm/ecp_nistz256-armv8.pl | 0 .../crypto/ec/asm/ecp_nistz256-ppc64.pl | 0 .../crypto/ec/asm/ecp_nistz256-sparcv9.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86_64.pl | 0 .../crypto/ec/asm/x25519-ppc64.pl | 0 .../crypto/ec/asm/x25519-x86_64.pl | 0 .../crypto/ec/build.info | 0 .../crypto/ec/curve25519.c | 0 .../ec/curve448/arch_32/arch_intrinsics.h | 0 .../crypto/ec/curve448/arch_32/f_impl.c | 0 .../crypto/ec/curve448/arch_32/f_impl.h | 0 .../crypto/ec/curve448/curve448.c | 0 .../crypto/ec/curve448/curve448_local.h | 0 .../crypto/ec/curve448/curve448_tables.c | 0 .../crypto/ec/curve448/curve448utils.h | 0 .../crypto/ec/curve448/ed448.h | 0 .../crypto/ec/curve448/eddsa.c | 0 .../crypto/ec/curve448/f_generic.c | 0 .../crypto/ec/curve448/field.h | 0 .../crypto/ec/curve448/point_448.h | 0 .../crypto/ec/curve448/scalar.c | 0 .../crypto/ec/curve448/word.h | 0 .../crypto/ec/ec2_oct.c | 0 .../crypto/ec/ec2_smpl.c | 0 .../crypto/ec/ec_ameth.c | 0 .../crypto/ec/ec_asn1.c | 0 .../crypto/ec/ec_check.c | 0 .../crypto/ec/ec_curve.c | 0 .../crypto/ec/ec_cvt.c | 0 .../crypto/ec/ec_err.c | 0 .../crypto/ec/ec_key.c | 0 .../crypto/ec/ec_kmeth.c | 0 .../crypto/ec/ec_lib.c | 0 .../crypto/ec/ec_local.h | 0 .../crypto/ec/ec_mult.c | 0 .../crypto/ec/ec_oct.c | 0 .../crypto/ec/ec_pmeth.c | 0 .../crypto/ec/ec_print.c | 0 .../crypto/ec/ecdh_kdf.c | 0 .../crypto/ec/ecdh_ossl.c | 0 .../crypto/ec/ecdsa_ossl.c | 0 .../crypto/ec/ecdsa_sign.c | 0 .../crypto/ec/ecdsa_vrf.c | 0 .../crypto/ec/eck_prn.c | 0 .../crypto/ec/ecp_mont.c | 0 .../crypto/ec/ecp_nist.c | 0 .../crypto/ec/ecp_nistp224.c | 0 .../crypto/ec/ecp_nistp256.c | 0 .../crypto/ec/ecp_nistp521.c | 0 .../crypto/ec/ecp_nistputil.c | 0 .../crypto/ec/ecp_nistz256.c | 0 .../crypto/ec/ecp_nistz256_table.c | 0 .../crypto/ec/ecp_oct.c | 0 .../crypto/ec/ecp_smpl.c | 0 .../crypto/ec/ecx_meth.c | 0 .../crypto/engine/README | 0 .../crypto/engine/build.info | 0 .../crypto/engine/eng_all.c | 0 .../crypto/engine/eng_cnf.c | 0 .../crypto/engine/eng_ctrl.c | 0 .../crypto/engine/eng_devcrypto.c | 0 .../crypto/engine/eng_dyn.c | 0 .../crypto/engine/eng_err.c | 0 .../crypto/engine/eng_fat.c | 0 .../crypto/engine/eng_init.c | 0 .../crypto/engine/eng_lib.c | 0 .../crypto/engine/eng_list.c | 0 .../crypto/engine/eng_local.h | 0 .../crypto/engine/eng_openssl.c | 0 .../crypto/engine/eng_pkey.c | 0 .../crypto/engine/eng_rdrand.c | 0 .../crypto/engine/eng_table.c | 0 .../crypto/engine/tb_asnmth.c | 0 .../crypto/engine/tb_cipher.c | 0 .../crypto/engine/tb_dh.c | 0 .../crypto/engine/tb_digest.c | 0 .../crypto/engine/tb_dsa.c | 0 .../crypto/engine/tb_eckey.c | 0 .../crypto/engine/tb_pkmeth.c | 0 .../crypto/engine/tb_rand.c | 0 .../crypto/engine/tb_rsa.c | 0 .../crypto/err/README | 0 .../crypto/err/build.info | 0 .../crypto/err/err.c | 0 .../crypto/err/err_all.c | 0 .../crypto/err/err_prn.c | 0 .../crypto/err/openssl.ec | 0 .../crypto/err/openssl.txt | 0 .../crypto/evp/bio_b64.c | 0 .../crypto/evp/bio_enc.c | 0 .../crypto/evp/bio_md.c | 0 .../crypto/evp/bio_ok.c | 0 .../crypto/evp/build.info | 0 .../crypto/evp/c_allc.c | 0 .../crypto/evp/c_alld.c | 0 .../crypto/evp/cmeth_lib.c | 0 .../crypto/evp/digest.c | 0 .../crypto/evp/e_aes.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha1.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha256.c | 0 .../crypto/evp/e_aria.c | 0 .../crypto/evp/e_bf.c | 0 .../crypto/evp/e_camellia.c | 0 .../crypto/evp/e_cast.c | 0 .../crypto/evp/e_chacha20_poly1305.c | 0 .../crypto/evp/e_des.c | 0 .../crypto/evp/e_des3.c | 0 .../crypto/evp/e_idea.c | 0 .../crypto/evp/e_null.c | 0 .../crypto/evp/e_old.c | 0 .../crypto/evp/e_rc2.c | 0 .../crypto/evp/e_rc4.c | 0 .../crypto/evp/e_rc4_hmac_md5.c | 0 .../crypto/evp/e_rc5.c | 0 .../crypto/evp/e_seed.c | 0 .../crypto/evp/e_sm4.c | 0 .../crypto/evp/e_xcbc_d.c | 0 .../crypto/evp/encode.c | 0 .../crypto/evp/evp_cnf.c | 0 .../crypto/evp/evp_enc.c | 0 .../crypto/evp/evp_err.c | 0 .../crypto/evp/evp_key.c | 0 .../crypto/evp/evp_lib.c | 0 .../crypto/evp/evp_local.h | 0 .../crypto/evp/evp_pbe.c | 0 .../crypto/evp/evp_pkey.c | 0 .../crypto/evp/m_md2.c | 0 .../crypto/evp/m_md4.c | 0 .../crypto/evp/m_md5.c | 0 .../crypto/evp/m_md5_sha1.c | 0 .../crypto/evp/m_mdc2.c | 0 .../crypto/evp/m_null.c | 0 .../crypto/evp/m_ripemd.c | 0 .../crypto/evp/m_sha1.c | 0 .../crypto/evp/m_sha3.c | 0 .../crypto/evp/m_sigver.c | 0 .../crypto/evp/m_wp.c | 0 .../crypto/evp/names.c | 0 .../crypto/evp/p5_crpt.c | 0 .../crypto/evp/p5_crpt2.c | 0 .../crypto/evp/p_dec.c | 0 .../crypto/evp/p_enc.c | 0 .../crypto/evp/p_lib.c | 0 .../crypto/evp/p_open.c | 0 .../crypto/evp/p_seal.c | 0 .../crypto/evp/p_sign.c | 0 .../crypto/evp/p_verify.c | 0 .../crypto/evp/pbe_scrypt.c | 0 .../crypto/evp/pmeth_fn.c | 0 .../crypto/evp/pmeth_gn.c | 0 .../crypto/evp/pmeth_lib.c | 0 .../crypto/ex_data.c | 0 .../crypto/getenv.c | 0 .../crypto/hmac/build.info | 0 .../crypto/hmac/hm_ameth.c | 0 .../crypto/hmac/hm_pmeth.c | 0 .../crypto/hmac/hmac.c | 0 .../crypto/hmac/hmac_local.h | 0 .../crypto/ia64cpuid.S | 0 .../crypto/idea/build.info | 0 .../crypto/idea/i_cbc.c | 0 .../crypto/idea/i_cfb64.c | 0 .../crypto/idea/i_ecb.c | 0 .../crypto/idea/i_ofb64.c | 0 .../crypto/idea/i_skey.c | 0 .../crypto/idea/idea_local.h | 0 .../crypto/init.c | 0 .../crypto/kdf/build.info | 0 .../crypto/kdf/hkdf.c | 0 .../crypto/kdf/kdf_err.c | 0 .../crypto/kdf/scrypt.c | 0 .../crypto/kdf/tls1_prf.c | 0 .../crypto/lhash/build.info | 0 .../crypto/lhash/lh_stats.c | 0 .../crypto/lhash/lhash.c | 0 .../crypto/lhash/lhash_local.h | 0 .../crypto/md2/build.info | 0 .../crypto/md2/md2_dgst.c | 0 .../crypto/md2/md2_one.c | 0 .../crypto/md4/build.info | 0 .../crypto/md4/md4_dgst.c | 0 .../crypto/md4/md4_local.h | 0 .../crypto/md4/md4_one.c | 0 .../crypto/md5/asm/md5-586.pl | 0 .../crypto/md5/asm/md5-sparcv9.pl | 0 .../crypto/md5/asm/md5-x86_64.pl | 0 .../crypto/md5/build.info | 0 .../crypto/md5/md5_dgst.c | 0 .../crypto/md5/md5_local.h | 0 .../crypto/md5/md5_one.c | 0 .../crypto/mdc2/build.info | 0 .../crypto/mdc2/mdc2_one.c | 0 .../crypto/mdc2/mdc2dgst.c | 0 .../crypto/mem.c | 0 .../crypto/mem_clr.c | 0 .../crypto/mem_dbg.c | 0 .../crypto/mem_sec.c | 0 .../crypto/mips_arch.h | 0 .../crypto/modes/asm/aesni-gcm-x86_64.pl | 0 .../crypto/modes/asm/ghash-alpha.pl | 0 .../crypto/modes/asm/ghash-armv4.pl | 0 .../crypto/modes/asm/ghash-c64xplus.pl | 0 .../crypto/modes/asm/ghash-ia64.pl | 0 .../crypto/modes/asm/ghash-parisc.pl | 0 .../crypto/modes/asm/ghash-s390x.pl | 0 .../crypto/modes/asm/ghash-sparcv9.pl | 0 .../crypto/modes/asm/ghash-x86.pl | 0 .../crypto/modes/asm/ghash-x86_64.pl | 0 .../crypto/modes/asm/ghashp8-ppc.pl | 0 .../crypto/modes/asm/ghashv8-armx.pl | 0 .../crypto/modes/build.info | 0 .../crypto/modes/cbc128.c | 0 .../crypto/modes/ccm128.c | 0 .../crypto/modes/cfb128.c | 0 .../crypto/modes/ctr128.c | 0 .../crypto/modes/cts128.c | 0 .../crypto/modes/gcm128.c | 0 .../crypto/modes/modes_local.h | 0 .../crypto/modes/ocb128.c | 0 .../crypto/modes/ofb128.c | 0 .../crypto/modes/wrap128.c | 0 .../crypto/modes/xts128.c | 0 .../crypto/o_dir.c | 0 .../crypto/o_fips.c | 0 .../crypto/o_fopen.c | 0 .../crypto/o_init.c | 0 .../crypto/o_str.c | 0 .../crypto/o_time.c | 0 .../crypto/objects/README | 0 .../crypto/objects/build.info | 0 .../crypto/objects/o_names.c | 0 .../crypto/objects/obj_dat.c | 0 .../crypto/objects/obj_dat.h | 0 .../crypto/objects/obj_dat.pl | 0 .../crypto/objects/obj_err.c | 0 .../crypto/objects/obj_lib.c | 0 .../crypto/objects/obj_local.h | 0 .../crypto/objects/obj_mac.num | 0 .../crypto/objects/obj_xref.c | 0 .../crypto/objects/obj_xref.h | 0 .../crypto/objects/obj_xref.txt | 0 .../crypto/objects/objects.pl | 0 .../crypto/objects/objects.txt | 0 .../crypto/objects/objxref.pl | 0 .../crypto/ocsp/build.info | 0 .../crypto/ocsp/ocsp_asn.c | 0 .../crypto/ocsp/ocsp_cl.c | 0 .../crypto/ocsp/ocsp_err.c | 0 .../crypto/ocsp/ocsp_ext.c | 0 .../crypto/ocsp/ocsp_ht.c | 0 .../crypto/ocsp/ocsp_lib.c | 0 .../crypto/ocsp/ocsp_local.h | 0 .../crypto/ocsp/ocsp_prn.c | 0 .../crypto/ocsp/ocsp_srv.c | 0 .../crypto/ocsp/ocsp_vfy.c | 0 .../crypto/ocsp/v3_ocsp.c | 0 .../crypto/pariscid.pl | 0 .../crypto/pem/build.info | 0 .../crypto/pem/pem_all.c | 0 .../crypto/pem/pem_err.c | 0 .../crypto/pem/pem_info.c | 0 .../crypto/pem/pem_lib.c | 0 .../crypto/pem/pem_oth.c | 0 .../crypto/pem/pem_pk8.c | 0 .../crypto/pem/pem_pkey.c | 0 .../crypto/pem/pem_sign.c | 0 .../crypto/pem/pem_x509.c | 0 .../crypto/pem/pem_xaux.c | 0 .../crypto/pem/pvkfmt.c | 0 .../crypto/perlasm/README | 0 .../crypto/perlasm/arm-xlate.pl | 0 .../crypto/perlasm/cbc.pl | 0 .../crypto/perlasm/ppc-xlate.pl | 0 .../crypto/perlasm/sparcv9_modes.pl | 0 .../crypto/perlasm/x86_64-xlate.pl | 0 .../crypto/perlasm/x86asm.pl | 0 .../crypto/perlasm/x86gas.pl | 0 .../crypto/perlasm/x86masm.pl | 0 .../crypto/perlasm/x86nasm.pl | 0 .../crypto/pkcs12/build.info | 0 .../crypto/pkcs12/p12_add.c | 0 .../crypto/pkcs12/p12_asn.c | 0 .../crypto/pkcs12/p12_attr.c | 0 .../crypto/pkcs12/p12_crpt.c | 0 .../crypto/pkcs12/p12_crt.c | 0 .../crypto/pkcs12/p12_decr.c | 0 .../crypto/pkcs12/p12_init.c | 0 .../crypto/pkcs12/p12_key.c | 0 .../crypto/pkcs12/p12_kiss.c | 0 .../crypto/pkcs12/p12_local.h | 0 .../crypto/pkcs12/p12_mutl.c | 0 .../crypto/pkcs12/p12_npas.c | 0 .../crypto/pkcs12/p12_p8d.c | 0 .../crypto/pkcs12/p12_p8e.c | 0 .../crypto/pkcs12/p12_sbag.c | 0 .../crypto/pkcs12/p12_utl.c | 0 .../crypto/pkcs12/pk12err.c | 0 .../crypto/pkcs7/bio_pk7.c | 0 .../crypto/pkcs7/build.info | 0 .../crypto/pkcs7/pk7_asn1.c | 0 .../crypto/pkcs7/pk7_attr.c | 0 .../crypto/pkcs7/pk7_doit.c | 0 .../crypto/pkcs7/pk7_lib.c | 0 .../crypto/pkcs7/pk7_mime.c | 0 .../crypto/pkcs7/pk7_smime.c | 0 .../crypto/pkcs7/pkcs7err.c | 0 .../crypto/poly1305/asm/poly1305-armv4.pl | 0 .../crypto/poly1305/asm/poly1305-armv8.pl | 0 .../crypto/poly1305/asm/poly1305-c64xplus.pl | 0 .../crypto/poly1305/asm/poly1305-mips.pl | 0 .../crypto/poly1305/asm/poly1305-ppc.pl | 0 .../crypto/poly1305/asm/poly1305-ppcfp.pl | 0 .../crypto/poly1305/asm/poly1305-s390x.pl | 0 .../crypto/poly1305/asm/poly1305-sparcv9.pl | 0 .../crypto/poly1305/asm/poly1305-x86.pl | 0 .../crypto/poly1305/asm/poly1305-x86_64.pl | 0 .../crypto/poly1305/build.info | 0 .../crypto/poly1305/poly1305.c | 0 .../crypto/poly1305/poly1305_ameth.c | 0 .../crypto/poly1305/poly1305_base2_44.c | 0 .../crypto/poly1305/poly1305_ieee754.c | 0 .../crypto/poly1305/poly1305_local.h | 0 .../crypto/poly1305/poly1305_pmeth.c | 0 .../crypto/ppc_arch.h | 0 .../crypto/ppccap.c | 0 .../crypto/ppccpuid.pl | 0 .../crypto/rand/build.info | 0 .../crypto/rand/drbg_ctr.c | 0 .../crypto/rand/drbg_lib.c | 0 .../crypto/rand/rand_egd.c | 0 .../crypto/rand/rand_err.c | 0 .../crypto/rand/rand_lib.c | 0 .../crypto/rand/rand_local.h | 0 .../crypto/rand/rand_unix.c | 0 .../crypto/rand/rand_vms.c | 0 .../crypto/rand/rand_win.c | 0 .../crypto/rand/randfile.c | 0 .../crypto/rc2/build.info | 0 .../crypto/rc2/rc2_cbc.c | 0 .../crypto/rc2/rc2_ecb.c | 0 .../crypto/rc2/rc2_local.h | 0 .../crypto/rc2/rc2_skey.c | 0 .../crypto/rc2/rc2cfb64.c | 0 .../crypto/rc2/rc2ofb64.c | 0 .../crypto/rc4/asm/rc4-586.pl | 0 .../crypto/rc4/asm/rc4-c64xplus.pl | 0 .../crypto/rc4/asm/rc4-md5-x86_64.pl | 0 .../crypto/rc4/asm/rc4-parisc.pl | 0 .../crypto/rc4/asm/rc4-s390x.pl | 0 .../crypto/rc4/asm/rc4-x86_64.pl | 0 .../crypto/rc4/build.info | 0 .../crypto/rc4/rc4_enc.c | 0 .../crypto/rc4/rc4_local.h | 0 .../crypto/rc4/rc4_skey.c | 0 .../crypto/rc5/asm/rc5-586.pl | 0 .../crypto/rc5/build.info | 0 .../crypto/rc5/rc5_ecb.c | 0 .../crypto/rc5/rc5_enc.c | 0 .../crypto/rc5/rc5_local.h | 0 .../crypto/rc5/rc5_skey.c | 0 .../crypto/rc5/rc5cfb64.c | 0 .../crypto/rc5/rc5ofb64.c | 0 .../crypto/ripemd/asm/rmd-586.pl | 0 .../crypto/ripemd/build.info | 0 .../crypto/ripemd/rmd_dgst.c | 0 .../crypto/ripemd/rmd_local.h | 0 .../crypto/ripemd/rmd_one.c | 0 .../crypto/ripemd/rmdconst.h | 0 .../crypto/rsa/build.info | 0 .../crypto/rsa/rsa_ameth.c | 0 .../crypto/rsa/rsa_asn1.c | 0 .../crypto/rsa/rsa_chk.c | 0 .../crypto/rsa/rsa_crpt.c | 0 .../crypto/rsa/rsa_depr.c | 0 .../crypto/rsa/rsa_err.c | 0 .../crypto/rsa/rsa_gen.c | 0 .../crypto/rsa/rsa_lib.c | 0 .../crypto/rsa/rsa_local.h | 0 .../crypto/rsa/rsa_meth.c | 0 .../crypto/rsa/rsa_mp.c | 0 .../crypto/rsa/rsa_none.c | 0 .../crypto/rsa/rsa_oaep.c | 0 .../crypto/rsa/rsa_ossl.c | 0 .../crypto/rsa/rsa_pk1.c | 0 .../crypto/rsa/rsa_pmeth.c | 0 .../crypto/rsa/rsa_prn.c | 0 .../crypto/rsa/rsa_pss.c | 0 .../crypto/rsa/rsa_saos.c | 0 .../crypto/rsa/rsa_sign.c | 0 .../crypto/rsa/rsa_ssl.c | 0 .../crypto/rsa/rsa_x931.c | 0 .../crypto/rsa/rsa_x931g.c | 0 .../crypto/s390x_arch.h | 0 .../crypto/s390xcap.c | 0 .../crypto/s390xcpuid.pl | 0 .../crypto/seed/build.info | 0 .../crypto/seed/seed.c | 0 .../crypto/seed/seed_cbc.c | 0 .../crypto/seed/seed_cfb.c | 0 .../crypto/seed/seed_ecb.c | 0 .../crypto/seed/seed_local.h | 0 .../crypto/seed/seed_ofb.c | 0 .../crypto/sha/asm/keccak1600-armv4.pl | 0 .../crypto/sha/asm/keccak1600-armv8.pl | 0 .../crypto/sha/asm/keccak1600-avx2.pl | 0 .../crypto/sha/asm/keccak1600-avx512.pl | 0 .../crypto/sha/asm/keccak1600-avx512vl.pl | 0 .../crypto/sha/asm/keccak1600-c64x.pl | 0 .../crypto/sha/asm/keccak1600-mmx.pl | 0 .../crypto/sha/asm/keccak1600-ppc64.pl | 0 .../crypto/sha/asm/keccak1600-s390x.pl | 0 .../crypto/sha/asm/keccak1600-x86_64.pl | 0 .../crypto/sha/asm/keccak1600p8-ppc.pl | 0 .../crypto/sha/asm/sha1-586.pl | 0 .../crypto/sha/asm/sha1-alpha.pl | 0 .../crypto/sha/asm/sha1-armv4-large.pl | 0 .../crypto/sha/asm/sha1-armv8.pl | 0 .../crypto/sha/asm/sha1-c64xplus.pl | 0 .../crypto/sha/asm/sha1-ia64.pl | 0 .../crypto/sha/asm/sha1-mb-x86_64.pl | 0 .../crypto/sha/asm/sha1-mips.pl | 0 .../crypto/sha/asm/sha1-parisc.pl | 0 .../crypto/sha/asm/sha1-ppc.pl | 0 .../crypto/sha/asm/sha1-s390x.pl | 0 .../crypto/sha/asm/sha1-sparcv9.pl | 0 .../crypto/sha/asm/sha1-sparcv9a.pl | 0 .../crypto/sha/asm/sha1-thumb.pl | 0 .../crypto/sha/asm/sha1-x86_64.pl | 0 .../crypto/sha/asm/sha256-586.pl | 0 .../crypto/sha/asm/sha256-armv4.pl | 0 .../crypto/sha/asm/sha256-c64xplus.pl | 0 .../crypto/sha/asm/sha256-mb-x86_64.pl | 0 .../crypto/sha/asm/sha512-586.pl | 0 .../crypto/sha/asm/sha512-armv4.pl | 0 .../crypto/sha/asm/sha512-armv8.pl | 0 .../crypto/sha/asm/sha512-c64xplus.pl | 0 .../crypto/sha/asm/sha512-ia64.pl | 0 .../crypto/sha/asm/sha512-mips.pl | 0 .../crypto/sha/asm/sha512-parisc.pl | 0 .../crypto/sha/asm/sha512-ppc.pl | 0 .../crypto/sha/asm/sha512-s390x.pl | 0 .../crypto/sha/asm/sha512-sparcv9.pl | 0 .../crypto/sha/asm/sha512-x86_64.pl | 0 .../crypto/sha/asm/sha512p8-ppc.pl | 0 .../crypto/sha/build.info | 0 .../crypto/sha/keccak1600.c | 0 .../crypto/sha/sha1_one.c | 0 .../crypto/sha/sha1dgst.c | 0 .../crypto/sha/sha256.c | 0 .../crypto/sha/sha512.c | 0 .../crypto/sha/sha_local.h | 0 .../crypto/siphash/build.info | 0 .../crypto/siphash/siphash.c | 0 .../crypto/siphash/siphash_ameth.c | 0 .../crypto/siphash/siphash_local.h | 0 .../crypto/siphash/siphash_pmeth.c | 0 .../crypto/sm2/build.info | 0 .../crypto/sm2/sm2_crypt.c | 0 .../crypto/sm2/sm2_err.c | 0 .../crypto/sm2/sm2_pmeth.c | 0 .../crypto/sm2/sm2_sign.c | 0 .../crypto/sm3/build.info | 0 .../crypto/sm3/m_sm3.c | 0 .../crypto/sm3/sm3.c | 0 .../crypto/sm3/sm3_local.h | 0 .../crypto/sm4/build.info | 0 .../crypto/sm4/sm4.c | 0 .../crypto/sparc_arch.h | 0 .../crypto/sparccpuid.S | 0 .../crypto/sparcv9cap.c | 0 .../crypto/srp/build.info | 0 .../crypto/srp/srp_lib.c | 0 .../crypto/srp/srp_vfy.c | 0 .../crypto/stack/build.info | 0 .../crypto/stack/stack.c | 0 .../crypto/store/build.info | 0 .../crypto/store/loader_file.c | 0 .../crypto/store/store_err.c | 0 .../crypto/store/store_init.c | 0 .../crypto/store/store_lib.c | 0 .../crypto/store/store_local.h | 0 .../crypto/store/store_register.c | 0 .../crypto/store/store_strings.c | 0 .../crypto/threads_none.c | 0 .../crypto/threads_pthread.c | 0 .../crypto/threads_win.c | 0 .../crypto/ts/build.info | 0 .../crypto/ts/ts_asn1.c | 0 .../crypto/ts/ts_conf.c | 0 .../crypto/ts/ts_err.c | 0 .../crypto/ts/ts_lib.c | 0 .../crypto/ts/ts_local.h | 0 .../crypto/ts/ts_req_print.c | 0 .../crypto/ts/ts_req_utils.c | 0 .../crypto/ts/ts_rsp_print.c | 0 .../crypto/ts/ts_rsp_sign.c | 0 .../crypto/ts/ts_rsp_utils.c | 0 .../crypto/ts/ts_rsp_verify.c | 0 .../crypto/ts/ts_verify_ctx.c | 0 .../crypto/txt_db/build.info | 0 .../crypto/txt_db/txt_db.c | 0 .../crypto/ui/build.info | 0 .../crypto/ui/ui_err.c | 0 .../crypto/ui/ui_lib.c | 0 .../crypto/ui/ui_local.h | 0 .../crypto/ui/ui_null.c | 0 .../crypto/ui/ui_openssl.c | 0 .../crypto/ui/ui_util.c | 0 .../crypto/uid.c | 0 .../crypto/vms_rms.h | 0 .../crypto/whrlpool/asm/wp-mmx.pl | 0 .../crypto/whrlpool/asm/wp-x86_64.pl | 0 .../crypto/whrlpool/build.info | 0 .../crypto/whrlpool/wp_block.c | 0 .../crypto/whrlpool/wp_dgst.c | 0 .../crypto/whrlpool/wp_local.h | 0 .../crypto/x509/build.info | 0 .../crypto/x509/by_dir.c | 0 .../crypto/x509/by_file.c | 0 .../crypto/x509/t_crl.c | 0 .../crypto/x509/t_req.c | 0 .../crypto/x509/t_x509.c | 0 .../crypto/x509/x509_att.c | 0 .../crypto/x509/x509_cmp.c | 0 .../crypto/x509/x509_d2.c | 0 .../crypto/x509/x509_def.c | 0 .../crypto/x509/x509_err.c | 0 .../crypto/x509/x509_ext.c | 0 .../crypto/x509/x509_local.h | 0 .../crypto/x509/x509_lu.c | 0 .../crypto/x509/x509_meth.c | 0 .../crypto/x509/x509_obj.c | 0 .../crypto/x509/x509_r2x.c | 0 .../crypto/x509/x509_req.c | 0 .../crypto/x509/x509_set.c | 0 .../crypto/x509/x509_trs.c | 0 .../crypto/x509/x509_txt.c | 0 .../crypto/x509/x509_v3.c | 0 .../crypto/x509/x509_vfy.c | 0 .../crypto/x509/x509_vpm.c | 0 .../crypto/x509/x509cset.c | 0 .../crypto/x509/x509name.c | 0 .../crypto/x509/x509rset.c | 0 .../crypto/x509/x509spki.c | 0 .../crypto/x509/x509type.c | 0 .../crypto/x509/x_all.c | 0 .../crypto/x509/x_attrib.c | 0 .../crypto/x509/x_crl.c | 0 .../crypto/x509/x_exten.c | 0 .../crypto/x509/x_name.c | 0 .../crypto/x509/x_pubkey.c | 0 .../crypto/x509/x_req.c | 0 .../crypto/x509/x_x509.c | 0 .../crypto/x509/x_x509a.c | 0 .../crypto/x509v3/build.info | 0 .../crypto/x509v3/ext_dat.h | 0 .../crypto/x509v3/pcy_cache.c | 0 .../crypto/x509v3/pcy_data.c | 0 .../crypto/x509v3/pcy_lib.c | 0 .../crypto/x509v3/pcy_local.h | 0 .../crypto/x509v3/pcy_map.c | 0 .../crypto/x509v3/pcy_node.c | 0 .../crypto/x509v3/pcy_tree.c | 0 .../crypto/x509v3/standard_exts.h | 0 .../crypto/x509v3/v3_addr.c | 0 .../crypto/x509v3/v3_admis.c | 0 .../crypto/x509v3/v3_admis.h | 0 .../crypto/x509v3/v3_akey.c | 0 .../crypto/x509v3/v3_akeya.c | 0 .../crypto/x509v3/v3_alt.c | 0 .../crypto/x509v3/v3_asid.c | 0 .../crypto/x509v3/v3_bcons.c | 0 .../crypto/x509v3/v3_bitst.c | 0 .../crypto/x509v3/v3_conf.c | 0 .../crypto/x509v3/v3_cpols.c | 0 .../crypto/x509v3/v3_crld.c | 0 .../crypto/x509v3/v3_enum.c | 0 .../crypto/x509v3/v3_extku.c | 0 .../crypto/x509v3/v3_genn.c | 0 .../crypto/x509v3/v3_ia5.c | 0 .../crypto/x509v3/v3_info.c | 0 .../crypto/x509v3/v3_int.c | 0 .../crypto/x509v3/v3_lib.c | 0 .../crypto/x509v3/v3_ncons.c | 0 .../crypto/x509v3/v3_pci.c | 0 .../crypto/x509v3/v3_pcia.c | 0 .../crypto/x509v3/v3_pcons.c | 0 .../crypto/x509v3/v3_pku.c | 0 .../crypto/x509v3/v3_pmaps.c | 0 .../crypto/x509v3/v3_prn.c | 0 .../crypto/x509v3/v3_purp.c | 0 .../crypto/x509v3/v3_skey.c | 0 .../crypto/x509v3/v3_sxnet.c | 0 .../crypto/x509v3/v3_tlsf.c | 0 .../crypto/x509v3/v3_utl.c | 0 .../crypto/x509v3/v3err.c | 0 .../crypto/x86_64cpuid.pl | 0 .../crypto/x86cpuid.pl | 0 .../demos/README | 0 .../demos/bio/Makefile | 0 .../demos/bio/README | 0 .../demos/bio/accept.cnf | 0 .../demos/bio/client-arg.c | 0 .../demos/bio/client-conf.c | 0 .../demos/bio/cmod.cnf | 0 .../demos/bio/connect.cnf | 0 .../demos/bio/descrip.mms | 0 .../demos/bio/intca.pem | 0 .../demos/bio/root.pem | 0 .../demos/bio/saccept.c | 0 .../demos/bio/sconnect.c | 0 .../demos/bio/server-arg.c | 0 .../demos/bio/server-cmod.c | 0 .../demos/bio/server-conf.c | 0 .../demos/bio/server-ec.pem | 0 .../demos/bio/server.pem | 0 .../demos/bio/shared.opt | 0 .../demos/bio/static.opt | 0 .../demos/certs/README | 0 .../demos/certs/apps/apps.cnf | 0 .../demos/certs/apps/ckey.pem | 0 .../demos/certs/apps/intkey.pem | 0 .../demos/certs/apps/mkacerts.sh | 0 .../demos/certs/apps/mkxcerts.sh | 0 .../demos/certs/apps/rootkey.pem | 0 .../demos/certs/apps/skey.pem | 0 .../demos/certs/apps/skey2.pem | 0 .../demos/certs/ca.cnf | 0 .../demos/certs/mkcerts.sh | 0 .../demos/certs/ocspquery.sh | 0 .../demos/certs/ocsprun.sh | 0 .../demos/cms/cacert.pem | 0 .../demos/cms/cakey.pem | 0 .../demos/cms/cms_comp.c | 0 .../demos/cms/cms_ddec.c | 0 .../demos/cms/cms_dec.c | 0 .../demos/cms/cms_denc.c | 0 .../demos/cms/cms_enc.c | 0 .../demos/cms/cms_sign.c | 0 .../demos/cms/cms_sign2.c | 0 .../demos/cms/cms_uncomp.c | 0 .../demos/cms/cms_ver.c | 0 .../demos/cms/comp.txt | 0 .../demos/cms/encr.txt | 0 .../demos/cms/sign.txt | 0 .../demos/cms/signer.pem | 0 .../demos/cms/signer2.pem | 0 .../demos/engines/e_chil.txt | 0 .../demos/evp/Makefile | 0 .../demos/evp/aesccm.c | 0 .../demos/evp/aesgcm.c | 0 .../demos/pkcs12/pkread.c | 0 .../demos/pkcs12/pkwrite.c | 0 .../demos/smime/cacert.pem | 0 .../demos/smime/cakey.pem | 0 .../demos/smime/encr.txt | 0 .../demos/smime/sign.txt | 0 .../demos/smime/signer.pem | 0 .../demos/smime/signer2.pem | 0 .../demos/smime/smdec.c | 0 .../demos/smime/smenc.c | 0 .../demos/smime/smsign.c | 0 .../demos/smime/smsign2.c | 0 .../demos/smime/smver.c | 0 .../doc/HOWTO/certificates.txt | 0 .../doc/HOWTO/keys.txt | 0 .../doc/README | 0 .../doc/dir-locals.example.el | 0 .../doc/fingerprints.txt | 0 .../doc/man1/CA.pl.pod | 0 .../doc/man1/asn1parse.pod | 0 .../doc/man1/ca.pod | 0 .../doc/man1/ciphers.pod | 0 .../doc/man1/cms.pod | 0 .../doc/man1/crl.pod | 0 .../doc/man1/crl2pkcs7.pod | 0 .../doc/man1/dgst.pod | 0 .../doc/man1/dhparam.pod | 0 .../doc/man1/dsa.pod | 0 .../doc/man1/dsaparam.pod | 0 .../doc/man1/ec.pod | 0 .../doc/man1/ecparam.pod | 0 .../doc/man1/enc.pod | 0 .../doc/man1/engine.pod | 0 .../doc/man1/errstr.pod | 0 .../doc/man1/gendsa.pod | 0 .../doc/man1/genpkey.pod | 0 .../doc/man1/genrsa.pod | 0 .../doc/man1/list.pod | 0 .../doc/man1/nseq.pod | 0 .../doc/man1/ocsp.pod | 0 .../doc/man1/openssl.pod | 0 .../doc/man1/passwd.pod | 0 .../doc/man1/pkcs12.pod | 0 .../doc/man1/pkcs7.pod | 0 .../doc/man1/pkcs8.pod | 0 .../doc/man1/pkey.pod | 0 .../doc/man1/pkeyparam.pod | 0 .../doc/man1/pkeyutl.pod | 0 .../doc/man1/prime.pod | 0 .../doc/man1/rand.pod | 0 .../doc/man1/rehash.pod | 0 .../doc/man1/req.pod | 0 .../doc/man1/rsa.pod | 0 .../doc/man1/rsautl.pod | 0 .../doc/man1/s_client.pod | 0 .../doc/man1/s_server.pod | 0 .../doc/man1/s_time.pod | 0 .../doc/man1/sess_id.pod | 0 .../doc/man1/smime.pod | 0 .../doc/man1/speed.pod | 0 .../doc/man1/spkac.pod | 0 .../doc/man1/srp.pod | 0 .../doc/man1/storeutl.pod | 0 .../doc/man1/ts.pod | 0 .../doc/man1/tsget.pod | 0 .../doc/man1/verify.pod | 0 .../doc/man1/version.pod | 0 .../doc/man1/x509.pod | 0 .../doc/man3/ADMISSIONS.pod | 0 .../doc/man3/ASN1_INTEGER_get_int64.pod | 0 .../doc/man3/ASN1_ITEM_lookup.pod | 0 .../doc/man3/ASN1_OBJECT_new.pod | 0 .../doc/man3/ASN1_STRING_TABLE_add.pod | 0 .../doc/man3/ASN1_STRING_length.pod | 0 .../doc/man3/ASN1_STRING_new.pod | 0 .../doc/man3/ASN1_STRING_print_ex.pod | 0 .../doc/man3/ASN1_TIME_set.pod | 0 .../doc/man3/ASN1_TYPE_get.pod | 0 .../doc/man3/ASN1_generate_nconf.pod | 0 .../doc/man3/ASYNC_WAIT_CTX_new.pod | 0 .../doc/man3/ASYNC_start_job.pod | 0 .../doc/man3/BF_encrypt.pod | 0 .../doc/man3/BIO_ADDR.pod | 0 .../doc/man3/BIO_ADDRINFO.pod | 0 .../doc/man3/BIO_connect.pod | 0 .../doc/man3/BIO_ctrl.pod | 0 .../doc/man3/BIO_f_base64.pod | 0 .../doc/man3/BIO_f_buffer.pod | 0 .../doc/man3/BIO_f_cipher.pod | 0 .../doc/man3/BIO_f_md.pod | 0 .../doc/man3/BIO_f_null.pod | 0 .../doc/man3/BIO_f_ssl.pod | 0 .../doc/man3/BIO_find_type.pod | 0 .../doc/man3/BIO_get_data.pod | 0 .../doc/man3/BIO_get_ex_new_index.pod | 0 .../doc/man3/BIO_meth_new.pod | 0 .../doc/man3/BIO_new.pod | 0 .../doc/man3/BIO_new_CMS.pod | 0 .../doc/man3/BIO_parse_hostserv.pod | 0 .../doc/man3/BIO_printf.pod | 0 .../doc/man3/BIO_push.pod | 0 .../doc/man3/BIO_read.pod | 0 .../doc/man3/BIO_s_accept.pod | 0 .../doc/man3/BIO_s_bio.pod | 0 .../doc/man3/BIO_s_connect.pod | 0 .../doc/man3/BIO_s_fd.pod | 0 .../doc/man3/BIO_s_file.pod | 0 .../doc/man3/BIO_s_mem.pod | 0 .../doc/man3/BIO_s_null.pod | 0 .../doc/man3/BIO_s_socket.pod | 0 .../doc/man3/BIO_set_callback.pod | 0 .../doc/man3/BIO_should_retry.pod | 0 .../doc/man3/BN_BLINDING_new.pod | 0 .../doc/man3/BN_CTX_new.pod | 0 .../doc/man3/BN_CTX_start.pod | 0 .../doc/man3/BN_add.pod | 0 .../doc/man3/BN_add_word.pod | 0 .../doc/man3/BN_bn2bin.pod | 0 .../doc/man3/BN_cmp.pod | 0 .../doc/man3/BN_copy.pod | 0 .../doc/man3/BN_generate_prime.pod | 0 .../doc/man3/BN_mod_inverse.pod | 0 .../doc/man3/BN_mod_mul_montgomery.pod | 0 .../doc/man3/BN_mod_mul_reciprocal.pod | 0 .../doc/man3/BN_new.pod | 0 .../doc/man3/BN_num_bytes.pod | 0 .../doc/man3/BN_rand.pod | 0 .../doc/man3/BN_security_bits.pod | 0 .../doc/man3/BN_set_bit.pod | 0 .../doc/man3/BN_swap.pod | 0 .../doc/man3/BN_zero.pod | 0 .../doc/man3/BUF_MEM_new.pod | 0 .../doc/man3/CMS_add0_cert.pod | 0 .../doc/man3/CMS_add1_recipient_cert.pod | 0 .../doc/man3/CMS_add1_signer.pod | 0 .../doc/man3/CMS_compress.pod | 0 .../doc/man3/CMS_decrypt.pod | 0 .../doc/man3/CMS_encrypt.pod | 0 .../doc/man3/CMS_final.pod | 0 .../doc/man3/CMS_get0_RecipientInfos.pod | 0 .../doc/man3/CMS_get0_SignerInfos.pod | 0 .../doc/man3/CMS_get0_type.pod | 0 .../doc/man3/CMS_get1_ReceiptRequest.pod | 0 .../doc/man3/CMS_sign.pod | 0 .../doc/man3/CMS_sign_receipt.pod | 0 .../doc/man3/CMS_uncompress.pod | 0 .../doc/man3/CMS_verify.pod | 0 .../doc/man3/CMS_verify_receipt.pod | 0 .../doc/man3/CONF_modules_free.pod | 0 .../doc/man3/CONF_modules_load_file.pod | 0 .../doc/man3/CRYPTO_THREAD_run_once.pod | 0 .../doc/man3/CRYPTO_get_ex_new_index.pod | 0 .../doc/man3/CRYPTO_memcmp.pod | 0 .../doc/man3/CTLOG_STORE_get0_log_by_id.pod | 0 .../doc/man3/CTLOG_STORE_new.pod | 0 .../doc/man3/CTLOG_new.pod | 0 .../doc/man3/CT_POLICY_EVAL_CTX_new.pod | 0 .../doc/man3/DEFINE_STACK_OF.pod | 0 .../doc/man3/DES_random_key.pod | 0 .../doc/man3/DH_generate_key.pod | 0 .../doc/man3/DH_generate_parameters.pod | 0 .../doc/man3/DH_get0_pqg.pod | 0 .../doc/man3/DH_get_1024_160.pod | 0 .../doc/man3/DH_meth_new.pod | 0 .../doc/man3/DH_new.pod | 0 .../doc/man3/DH_new_by_nid.pod | 0 .../doc/man3/DH_set_method.pod | 0 .../doc/man3/DH_size.pod | 0 .../doc/man3/DSA_SIG_new.pod | 0 .../doc/man3/DSA_do_sign.pod | 0 .../doc/man3/DSA_dup_DH.pod | 0 .../doc/man3/DSA_generate_key.pod | 0 .../doc/man3/DSA_generate_parameters.pod | 0 .../doc/man3/DSA_get0_pqg.pod | 0 .../doc/man3/DSA_meth_new.pod | 0 .../doc/man3/DSA_new.pod | 0 .../doc/man3/DSA_set_method.pod | 0 .../doc/man3/DSA_sign.pod | 0 .../doc/man3/DSA_size.pod | 0 .../doc/man3/DTLS_get_data_mtu.pod | 0 .../doc/man3/DTLS_set_timer_cb.pod | 0 .../doc/man3/DTLSv1_listen.pod | 0 .../doc/man3/ECDSA_SIG_new.pod | 0 .../doc/man3/ECPKParameters_print.pod | 0 .../doc/man3/EC_GFp_simple_method.pod | 0 .../doc/man3/EC_GROUP_copy.pod | 0 .../doc/man3/EC_GROUP_new.pod | 0 .../doc/man3/EC_KEY_get_enc_flags.pod | 0 .../doc/man3/EC_KEY_new.pod | 0 .../doc/man3/EC_POINT_add.pod | 0 .../doc/man3/EC_POINT_new.pod | 0 .../doc/man3/ENGINE_add.pod | 0 .../doc/man3/ERR_GET_LIB.pod | 0 .../doc/man3/ERR_clear_error.pod | 0 .../doc/man3/ERR_error_string.pod | 0 .../doc/man3/ERR_get_error.pod | 0 .../doc/man3/ERR_load_crypto_strings.pod | 0 .../doc/man3/ERR_load_strings.pod | 0 .../doc/man3/ERR_print_errors.pod | 0 .../doc/man3/ERR_put_error.pod | 0 .../doc/man3/ERR_remove_state.pod | 0 .../doc/man3/ERR_set_mark.pod | 0 .../doc/man3/EVP_BytesToKey.pod | 0 .../man3/EVP_CIPHER_CTX_get_cipher_data.pod | 0 .../doc/man3/EVP_CIPHER_meth_new.pod | 0 .../doc/man3/EVP_DigestInit.pod | 0 .../doc/man3/EVP_DigestSignInit.pod | 0 .../doc/man3/EVP_DigestVerifyInit.pod | 0 .../doc/man3/EVP_EncodeInit.pod | 0 .../doc/man3/EVP_EncryptInit.pod | 0 .../doc/man3/EVP_MD_meth_new.pod | 0 .../doc/man3/EVP_OpenInit.pod | 0 .../doc/man3/EVP_PKEY_ASN1_METHOD.pod | 0 .../doc/man3/EVP_PKEY_CTX_ctrl.pod | 0 .../doc/man3/EVP_PKEY_CTX_new.pod | 0 .../doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod | 0 .../EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod | 0 .../doc/man3/EVP_PKEY_asn1_get_count.pod | 0 .../doc/man3/EVP_PKEY_cmp.pod | 0 .../doc/man3/EVP_PKEY_decrypt.pod | 0 .../doc/man3/EVP_PKEY_derive.pod | 0 .../doc/man3/EVP_PKEY_encrypt.pod | 0 .../man3/EVP_PKEY_get_default_digest_nid.pod | 0 .../doc/man3/EVP_PKEY_keygen.pod | 0 .../doc/man3/EVP_PKEY_meth_get_count.pod | 0 .../doc/man3/EVP_PKEY_meth_new.pod | 0 .../doc/man3/EVP_PKEY_new.pod | 0 .../doc/man3/EVP_PKEY_print_private.pod | 0 .../doc/man3/EVP_PKEY_set1_RSA.pod | 0 .../doc/man3/EVP_PKEY_sign.pod | 0 .../doc/man3/EVP_PKEY_size.pod | 0 .../doc/man3/EVP_PKEY_verify.pod | 0 .../doc/man3/EVP_PKEY_verify_recover.pod | 0 .../doc/man3/EVP_SealInit.pod | 0 .../doc/man3/EVP_SignInit.pod | 0 .../doc/man3/EVP_VerifyInit.pod | 0 .../doc/man3/EVP_aes.pod | 0 .../doc/man3/EVP_aria.pod | 0 .../doc/man3/EVP_bf_cbc.pod | 0 .../doc/man3/EVP_blake2b512.pod | 0 .../doc/man3/EVP_camellia.pod | 0 .../doc/man3/EVP_cast5_cbc.pod | 0 .../doc/man3/EVP_chacha20.pod | 0 .../doc/man3/EVP_des.pod | 0 .../doc/man3/EVP_desx_cbc.pod | 0 .../doc/man3/EVP_idea_cbc.pod | 0 .../doc/man3/EVP_md2.pod | 0 .../doc/man3/EVP_md4.pod | 0 .../doc/man3/EVP_md5.pod | 0 .../doc/man3/EVP_mdc2.pod | 0 .../doc/man3/EVP_rc2_cbc.pod | 0 .../doc/man3/EVP_rc4.pod | 0 .../doc/man3/EVP_rc5_32_12_16_cbc.pod | 0 .../doc/man3/EVP_ripemd160.pod | 0 .../doc/man3/EVP_seed_cbc.pod | 0 .../doc/man3/EVP_sha1.pod | 0 .../doc/man3/EVP_sha224.pod | 0 .../doc/man3/EVP_sha3_224.pod | 0 .../doc/man3/EVP_sm3.pod | 0 .../doc/man3/EVP_sm4_cbc.pod | 0 .../doc/man3/EVP_whirlpool.pod | 0 .../doc/man3/HMAC.pod | 0 .../doc/man3/MD5.pod | 0 .../doc/man3/MDC2_Init.pod | 0 .../doc/man3/OBJ_nid2obj.pod | 0 .../doc/man3/OCSP_REQUEST_new.pod | 0 .../doc/man3/OCSP_cert_to_id.pod | 0 .../doc/man3/OCSP_request_add1_nonce.pod | 0 .../doc/man3/OCSP_resp_find_status.pod | 0 .../doc/man3/OCSP_response_status.pod | 0 .../doc/man3/OCSP_sendreq_new.pod | 0 .../doc/man3/OPENSSL_Applink.pod | 0 .../doc/man3/OPENSSL_LH_COMPFUNC.pod | 0 .../doc/man3/OPENSSL_LH_stats.pod | 0 .../doc/man3/OPENSSL_VERSION_NUMBER.pod | 0 .../doc/man3/OPENSSL_config.pod | 0 .../doc/man3/OPENSSL_fork_prepare.pod | 0 .../doc/man3/OPENSSL_ia32cap.pod | 0 .../doc/man3/OPENSSL_init_crypto.pod | 0 .../doc/man3/OPENSSL_init_ssl.pod | 0 .../doc/man3/OPENSSL_instrument_bus.pod | 0 .../doc/man3/OPENSSL_load_builtin_modules.pod | 0 .../doc/man3/OPENSSL_malloc.pod | 0 .../doc/man3/OPENSSL_secure_malloc.pod | 0 .../doc/man3/OSSL_STORE_INFO.pod | 0 .../doc/man3/OSSL_STORE_LOADER.pod | 0 .../doc/man3/OSSL_STORE_SEARCH.pod | 0 .../doc/man3/OSSL_STORE_expect.pod | 0 .../doc/man3/OSSL_STORE_open.pod | 0 .../doc/man3/OpenSSL_add_all_algorithms.pod | 0 .../doc/man3/PEM_bytes_read_bio.pod | 0 .../doc/man3/PEM_read.pod | 0 .../doc/man3/PEM_read_CMS.pod | 0 .../doc/man3/PEM_read_bio_PrivateKey.pod | 0 .../doc/man3/PEM_read_bio_ex.pod | 0 .../doc/man3/PEM_write_bio_CMS_stream.pod | 0 .../doc/man3/PEM_write_bio_PKCS7_stream.pod | 0 .../doc/man3/PKCS12_create.pod | 0 .../doc/man3/PKCS12_newpass.pod | 0 .../doc/man3/PKCS12_parse.pod | 0 .../doc/man3/PKCS5_PBKDF2_HMAC.pod | 0 .../doc/man3/PKCS7_decrypt.pod | 0 .../doc/man3/PKCS7_encrypt.pod | 0 .../doc/man3/PKCS7_sign.pod | 0 .../doc/man3/PKCS7_sign_add_signer.pod | 0 .../doc/man3/PKCS7_verify.pod | 0 .../doc/man3/RAND_DRBG_generate.pod | 0 .../doc/man3/RAND_DRBG_get0_master.pod | 0 .../doc/man3/RAND_DRBG_new.pod | 0 .../doc/man3/RAND_DRBG_reseed.pod | 0 .../doc/man3/RAND_DRBG_set_callbacks.pod | 0 .../doc/man3/RAND_DRBG_set_ex_data.pod | 0 .../doc/man3/RAND_add.pod | 0 .../doc/man3/RAND_bytes.pod | 0 .../doc/man3/RAND_cleanup.pod | 0 .../doc/man3/RAND_egd.pod | 0 .../doc/man3/RAND_load_file.pod | 0 .../doc/man3/RAND_set_rand_method.pod | 0 .../doc/man3/RC4_set_key.pod | 0 .../doc/man3/RIPEMD160_Init.pod | 0 .../doc/man3/RSA_blinding_on.pod | 0 .../doc/man3/RSA_check_key.pod | 0 .../doc/man3/RSA_generate_key.pod | 0 .../doc/man3/RSA_get0_key.pod | 0 .../doc/man3/RSA_meth_new.pod | 0 .../doc/man3/RSA_new.pod | 0 .../doc/man3/RSA_padding_add_PKCS1_type_1.pod | 0 .../doc/man3/RSA_print.pod | 0 .../doc/man3/RSA_private_encrypt.pod | 0 .../doc/man3/RSA_public_encrypt.pod | 0 .../doc/man3/RSA_set_method.pod | 0 .../doc/man3/RSA_sign.pod | 0 .../doc/man3/RSA_sign_ASN1_OCTET_STRING.pod | 0 .../doc/man3/RSA_size.pod | 0 .../doc/man3/SCT_new.pod | 0 .../doc/man3/SCT_print.pod | 0 .../doc/man3/SCT_validate.pod | 0 .../doc/man3/SHA256_Init.pod | 0 .../doc/man3/SMIME_read_CMS.pod | 0 .../doc/man3/SMIME_read_PKCS7.pod | 0 .../doc/man3/SMIME_write_CMS.pod | 0 .../doc/man3/SMIME_write_PKCS7.pod | 0 .../doc/man3/SSL_CIPHER_get_name.pod | 0 .../man3/SSL_COMP_add_compression_method.pod | 0 .../doc/man3/SSL_CONF_CTX_new.pod | 0 .../doc/man3/SSL_CONF_CTX_set1_prefix.pod | 0 .../doc/man3/SSL_CONF_CTX_set_flags.pod | 0 .../doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod | 0 .../doc/man3/SSL_CONF_cmd.pod | 0 .../doc/man3/SSL_CONF_cmd_argv.pod | 0 .../doc/man3/SSL_CTX_add1_chain_cert.pod | 0 .../doc/man3/SSL_CTX_add_extra_chain_cert.pod | 0 .../doc/man3/SSL_CTX_add_session.pod | 0 .../doc/man3/SSL_CTX_config.pod | 0 .../doc/man3/SSL_CTX_ctrl.pod | 0 .../doc/man3/SSL_CTX_dane_enable.pod | 0 .../doc/man3/SSL_CTX_flush_sessions.pod | 0 .../doc/man3/SSL_CTX_free.pod | 0 .../doc/man3/SSL_CTX_get0_param.pod | 0 .../doc/man3/SSL_CTX_get_verify_mode.pod | 0 .../man3/SSL_CTX_has_client_custom_ext.pod | 0 .../man3/SSL_CTX_load_verify_locations.pod | 0 .../doc/man3/SSL_CTX_new.pod | 0 .../doc/man3/SSL_CTX_sess_number.pod | 0 .../doc/man3/SSL_CTX_sess_set_cache_size.pod | 0 .../doc/man3/SSL_CTX_sess_set_get_cb.pod | 0 .../doc/man3/SSL_CTX_sessions.pod | 0 .../doc/man3/SSL_CTX_set0_CA_list.pod | 0 .../doc/man3/SSL_CTX_set1_curves.pod | 0 .../doc/man3/SSL_CTX_set1_sigalgs.pod | 0 .../man3/SSL_CTX_set1_verify_cert_store.pod | 0 .../doc/man3/SSL_CTX_set_alpn_select_cb.pod | 0 .../doc/man3/SSL_CTX_set_cert_cb.pod | 0 .../doc/man3/SSL_CTX_set_cert_store.pod | 0 .../man3/SSL_CTX_set_cert_verify_callback.pod | 0 .../doc/man3/SSL_CTX_set_cipher_list.pod | 0 .../doc/man3/SSL_CTX_set_client_cert_cb.pod | 0 .../doc/man3/SSL_CTX_set_client_hello_cb.pod | 0 .../SSL_CTX_set_ct_validation_callback.pod | 0 .../doc/man3/SSL_CTX_set_ctlog_list_file.pod | 0 .../man3/SSL_CTX_set_default_passwd_cb.pod | 0 .../doc/man3/SSL_CTX_set_ex_data.pod | 0 .../man3/SSL_CTX_set_generate_session_id.pod | 0 .../doc/man3/SSL_CTX_set_info_callback.pod | 0 .../doc/man3/SSL_CTX_set_keylog_callback.pod | 0 .../doc/man3/SSL_CTX_set_max_cert_list.pod | 0 .../man3/SSL_CTX_set_min_proto_version.pod | 0 .../doc/man3/SSL_CTX_set_mode.pod | 0 .../doc/man3/SSL_CTX_set_msg_callback.pod | 0 .../doc/man3/SSL_CTX_set_num_tickets.pod | 0 .../doc/man3/SSL_CTX_set_options.pod | 0 .../man3/SSL_CTX_set_psk_client_callback.pod | 0 .../doc/man3/SSL_CTX_set_quiet_shutdown.pod | 0 .../doc/man3/SSL_CTX_set_read_ahead.pod | 0 .../SSL_CTX_set_record_padding_callback.pod | 0 .../doc/man3/SSL_CTX_set_security_level.pod | 0 .../man3/SSL_CTX_set_session_cache_mode.pod | 0 .../man3/SSL_CTX_set_session_id_context.pod | 0 .../man3/SSL_CTX_set_session_ticket_cb.pod | 0 .../man3/SSL_CTX_set_split_send_fragment.pod | 0 .../doc/man3/SSL_CTX_set_ssl_version.pod | 0 ...L_CTX_set_stateless_cookie_generate_cb.pod | 0 .../doc/man3/SSL_CTX_set_timeout.pod | 0 ...SSL_CTX_set_tlsext_servername_callback.pod | 0 .../doc/man3/SSL_CTX_set_tlsext_status_cb.pod | 0 .../man3/SSL_CTX_set_tlsext_ticket_key_cb.pod | 0 .../doc/man3/SSL_CTX_set_tlsext_use_srtp.pod | 0 .../doc/man3/SSL_CTX_set_tmp_dh_callback.pod | 0 .../doc/man3/SSL_CTX_set_verify.pod | 0 .../doc/man3/SSL_CTX_use_certificate.pod | 0 .../man3/SSL_CTX_use_psk_identity_hint.pod | 0 .../doc/man3/SSL_CTX_use_serverinfo.pod | 0 .../doc/man3/SSL_SESSION_free.pod | 0 .../doc/man3/SSL_SESSION_get0_cipher.pod | 0 .../doc/man3/SSL_SESSION_get0_hostname.pod | 0 .../doc/man3/SSL_SESSION_get0_id_context.pod | 0 .../doc/man3/SSL_SESSION_get0_peer.pod | 0 .../doc/man3/SSL_SESSION_get_compress_id.pod | 0 .../doc/man3/SSL_SESSION_get_ex_data.pod | 0 .../man3/SSL_SESSION_get_protocol_version.pod | 0 .../doc/man3/SSL_SESSION_get_time.pod | 0 .../doc/man3/SSL_SESSION_has_ticket.pod | 0 .../doc/man3/SSL_SESSION_is_resumable.pod | 0 .../doc/man3/SSL_SESSION_print.pod | 0 .../doc/man3/SSL_SESSION_set1_id.pod | 0 .../doc/man3/SSL_accept.pod | 0 .../doc/man3/SSL_alert_type_string.pod | 0 .../doc/man3/SSL_alloc_buffers.pod | 0 .../doc/man3/SSL_check_chain.pod | 0 .../doc/man3/SSL_clear.pod | 0 .../doc/man3/SSL_connect.pod | 0 .../doc/man3/SSL_do_handshake.pod | 0 .../doc/man3/SSL_export_keying_material.pod | 0 .../doc/man3/SSL_extension_supported.pod | 0 .../doc/man3/SSL_free.pod | 0 .../doc/man3/SSL_get0_peer_scts.pod | 0 .../doc/man3/SSL_get_SSL_CTX.pod | 0 .../doc/man3/SSL_get_all_async_fds.pod | 0 .../doc/man3/SSL_get_ciphers.pod | 0 .../doc/man3/SSL_get_client_random.pod | 0 .../doc/man3/SSL_get_current_cipher.pod | 0 .../doc/man3/SSL_get_default_timeout.pod | 0 .../doc/man3/SSL_get_error.pod | 0 .../doc/man3/SSL_get_extms_support.pod | 0 .../doc/man3/SSL_get_fd.pod | 0 .../doc/man3/SSL_get_peer_cert_chain.pod | 0 .../doc/man3/SSL_get_peer_certificate.pod | 0 .../doc/man3/SSL_get_peer_signature_nid.pod | 0 .../doc/man3/SSL_get_peer_tmp_key.pod | 0 .../doc/man3/SSL_get_psk_identity.pod | 0 .../doc/man3/SSL_get_rbio.pod | 0 .../doc/man3/SSL_get_session.pod | 0 .../doc/man3/SSL_get_shared_sigalgs.pod | 0 .../doc/man3/SSL_get_verify_result.pod | 0 .../doc/man3/SSL_get_version.pod | 0 .../doc/man3/SSL_in_init.pod | 0 .../doc/man3/SSL_key_update.pod | 0 .../doc/man3/SSL_library_init.pod | 0 .../doc/man3/SSL_load_client_CA_file.pod | 0 .../doc/man3/SSL_new.pod | 0 .../doc/man3/SSL_pending.pod | 0 .../doc/man3/SSL_read.pod | 0 .../doc/man3/SSL_read_early_data.pod | 0 .../doc/man3/SSL_rstate_string.pod | 0 .../doc/man3/SSL_session_reused.pod | 0 .../doc/man3/SSL_set1_host.pod | 0 .../doc/man3/SSL_set_bio.pod | 0 .../doc/man3/SSL_set_connect_state.pod | 0 .../doc/man3/SSL_set_fd.pod | 0 .../doc/man3/SSL_set_session.pod | 0 .../doc/man3/SSL_set_shutdown.pod | 0 .../doc/man3/SSL_set_verify_result.pod | 0 .../doc/man3/SSL_shutdown.pod | 0 .../doc/man3/SSL_state_string.pod | 0 .../doc/man3/SSL_want.pod | 0 .../doc/man3/SSL_write.pod | 0 .../doc/man3/UI_STRING.pod | 0 .../doc/man3/UI_UTIL_read_pw.pod | 0 .../doc/man3/UI_create_method.pod | 0 .../doc/man3/UI_new.pod | 0 .../doc/man3/X509V3_get_d2i.pod | 0 .../doc/man3/X509_ALGOR_dup.pod | 0 .../doc/man3/X509_CRL_get0_by_serial.pod | 0 .../doc/man3/X509_EXTENSION_set_object.pod | 0 .../doc/man3/X509_LOOKUP.pod | 0 .../doc/man3/X509_LOOKUP_hash_dir.pod | 0 .../doc/man3/X509_LOOKUP_meth_new.pod | 0 .../doc/man3/X509_NAME_ENTRY_get_object.pod | 0 .../doc/man3/X509_NAME_add_entry_by_txt.pod | 0 .../doc/man3/X509_NAME_get0_der.pod | 0 .../doc/man3/X509_NAME_get_index_by_NID.pod | 0 .../doc/man3/X509_NAME_print_ex.pod | 0 .../doc/man3/X509_PUBKEY_new.pod | 0 .../doc/man3/X509_SIG_get0.pod | 0 .../doc/man3/X509_STORE_CTX_get_error.pod | 0 .../doc/man3/X509_STORE_CTX_new.pod | 0 .../doc/man3/X509_STORE_CTX_set_verify_cb.pod | 0 .../doc/man3/X509_STORE_add_cert.pod | 0 .../doc/man3/X509_STORE_get0_param.pod | 0 .../doc/man3/X509_STORE_new.pod | 0 .../man3/X509_STORE_set_verify_cb_func.pod | 0 .../doc/man3/X509_VERIFY_PARAM_set_flags.pod | 0 .../doc/man3/X509_check_ca.pod | 0 .../doc/man3/X509_check_host.pod | 0 .../doc/man3/X509_check_issued.pod | 0 .../doc/man3/X509_check_private_key.pod | 0 .../doc/man3/X509_check_purpose.pod | 0 .../doc/man3/X509_cmp.pod | 0 .../doc/man3/X509_cmp_time.pod | 0 .../doc/man3/X509_digest.pod | 0 .../doc/man3/X509_dup.pod | 0 .../doc/man3/X509_get0_notBefore.pod | 0 .../doc/man3/X509_get0_signature.pod | 0 .../doc/man3/X509_get0_uids.pod | 0 .../doc/man3/X509_get_extension_flags.pod | 0 .../doc/man3/X509_get_pubkey.pod | 0 .../doc/man3/X509_get_serialNumber.pod | 0 .../doc/man3/X509_get_subject_name.pod | 0 .../doc/man3/X509_get_version.pod | 0 .../doc/man3/X509_new.pod | 0 .../doc/man3/X509_sign.pod | 0 .../doc/man3/X509_verify_cert.pod | 0 .../doc/man3/X509v3_get_ext_by_NID.pod | 0 .../doc/man3/d2i_DHparams.pod | 0 .../doc/man3/d2i_PKCS8PrivateKey_bio.pod | 0 .../doc/man3/d2i_PrivateKey.pod | 0 .../doc/man3/d2i_SSL_SESSION.pod | 0 .../doc/man3/d2i_X509.pod | 0 .../doc/man3/i2d_CMS_bio_stream.pod | 0 .../doc/man3/i2d_PKCS7_bio_stream.pod | 0 .../doc/man3/i2d_re_X509_tbs.pod | 0 .../doc/man3/o2i_SCT_LIST.pod | 0 .../doc/man5/config.pod | 0 .../doc/man5/x509v3_config.pod | 0 .../doc/man7/Ed25519.pod | 0 .../doc/man7/RAND.pod | 0 .../doc/man7/RAND_DRBG.pod | 0 .../doc/man7/RSA-PSS.pod | 0 .../doc/man7/SM2.pod | 0 .../doc/man7/X25519.pod | 0 .../doc/man7/bio.pod | 0 .../doc/man7/crypto.pod | 0 .../doc/man7/ct.pod | 0 .../doc/man7/des_modes.pod | 0 .../doc/man7/evp.pod | 0 .../doc/man7/ossl_store-file.pod | 0 .../doc/man7/ossl_store.pod | 0 .../doc/man7/passphrase-encoding.pod | 0 .../doc/man7/proxy-certificates.pod | 0 .../doc/man7/scrypt.pod | 0 .../doc/man7/ssl.pod | 0 .../doc/man7/x509.pod | 0 .../doc/openssl-c-indent.el | 0 .../e_os.h | 0 .../engines/asm/e_padlock-x86.pl | 0 .../engines/asm/e_padlock-x86_64.pl | 0 .../engines/build.info | 0 .../engines/e_afalg.c | 0 .../engines/e_afalg.ec | 0 .../engines/e_afalg.h | 0 .../engines/e_afalg.txt | 0 .../engines/e_afalg_err.c | 0 .../engines/e_afalg_err.h | 0 .../engines/e_capi.c | 0 .../engines/e_capi.ec | 0 .../engines/e_capi.txt | 0 .../engines/e_capi_err.c | 0 .../engines/e_capi_err.h | 0 .../engines/e_dasync.c | 0 .../engines/e_dasync.ec | 0 .../engines/e_dasync.txt | 0 .../engines/e_dasync_err.c | 0 .../engines/e_dasync_err.h | 0 .../engines/e_ossltest.c | 0 .../engines/e_ossltest.ec | 0 .../engines/e_ossltest.txt | 0 .../engines/e_ossltest_err.c | 0 .../engines/e_ossltest_err.h | 0 .../engines/e_padlock.c | 0 .../external/perl/Downloaded.txt | 0 .../external/perl/Text-Template-1.46/Artistic | 0 .../external/perl/Text-Template-1.46/COPYING | 0 .../external/perl/Text-Template-1.46/INSTALL | 0 .../external/perl/Text-Template-1.46/MANIFEST | 0 .../perl/Text-Template-1.46/META.json | 0 .../external/perl/Text-Template-1.46/META.yml | 0 .../perl/Text-Template-1.46/Makefile.PL | 0 .../external/perl/Text-Template-1.46/README | 0 .../Text-Template-1.46/lib/Text/Template.pm | 0 .../lib/Text/Template/Preprocess.pm | 0 .../perl/Text-Template-1.46/t/00-version.t | 0 .../perl/Text-Template-1.46/t/01-basic.t | 0 .../perl/Text-Template-1.46/t/02-hash.t | 0 .../perl/Text-Template-1.46/t/03-out.t | 0 .../perl/Text-Template-1.46/t/04-safe.t | 0 .../perl/Text-Template-1.46/t/05-safe2.t | 0 .../perl/Text-Template-1.46/t/06-ofh.t | 0 .../perl/Text-Template-1.46/t/07-safe3.t | 0 .../perl/Text-Template-1.46/t/08-exported.t | 0 .../perl/Text-Template-1.46/t/09-error.t | 0 .../perl/Text-Template-1.46/t/10-delimiters.t | 0 .../perl/Text-Template-1.46/t/11-prepend.t | 0 .../perl/Text-Template-1.46/t/12-preprocess.t | 0 .../perl/Text-Template-1.46/t/13-taint.t | 0 .../perl/Text-Template-1.46/t/14-broken.t | 0 .../external/perl/transfer/Text/Template.pm | 0 .../fuzz/README.md | 0 .../fuzz/asn1.c | 0 .../fuzz/asn1parse.c | 0 .../fuzz/bignum.c | 0 .../fuzz/bndiv.c | 0 .../fuzz/build.info | 0 .../fuzz/client.c | 0 .../fuzz/cms.c | 0 .../fuzz/conf.c | 0 .../fuzz/crl.c | 0 .../fuzz/ct.c | 0 .../fuzz/driver.c | 0 .../fuzz/fuzzer.h | 0 .../fuzz/helper.py | 0 .../fuzz/mkfuzzoids.pl | 0 .../fuzz/oids.txt | 0 .../fuzz/rand.inc | 0 .../fuzz/server.c | 0 .../fuzz/test-corpus.c | 0 .../fuzz/x509.c | 0 .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 0 .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/crypto/aria.h | 0 .../include/crypto/asn1.h | 0 .../include/crypto/async.h | 0 .../include/crypto/bn.h | 0 .../include/crypto/bn_conf.h.in | 0 .../include/crypto/bn_dh.h | 0 .../include/crypto/bn_srp.h | 0 .../include/crypto/chacha.h | 0 .../include/crypto/cryptlib.h | 0 .../include/crypto/ctype.h | 0 .../include/crypto/dso_conf.h.in | 0 .../include/crypto/ec.h | 0 .../include/crypto/engine.h | 0 .../include/crypto/err.h | 0 .../include/crypto/evp.h | 0 .../include/crypto/lhash.h | 0 .../include/crypto/md32_common.h | 0 .../include/crypto/objects.h | 0 .../include/crypto/poly1305.h | 0 .../include/crypto/rand.h | 0 .../include/crypto/sha.h | 0 .../include/crypto/siphash.h | 0 .../include/crypto/sm2.h | 0 .../include/crypto/sm2err.h | 0 .../include/crypto/sm3.h | 0 .../include/crypto/sm4.h | 0 .../include/crypto/store.h | 0 .../include/crypto/x509.h | 0 .../internal/__DECC_INCLUDE_EPILOGUE.H | 0 .../internal/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/internal/bio.h | 0 .../include/internal/comp.h | 0 .../include/internal/conf.h | 0 .../include/internal/constant_time.h | 0 .../include/internal/cryptlib.h | 0 .../include/internal/dane.h | 0 .../include/internal/dso.h | 0 .../include/internal/dsoerr.h | 0 .../include/internal/err.h | 0 .../include/internal/nelem.h | 0 .../include/internal/numbers.h | 0 .../include/internal/o_dir.h | 0 .../include/internal/o_str.h | 0 .../include/internal/refcount.h | 0 .../include/internal/sockets.h | 0 .../include/internal/sslconf.h | 0 .../include/internal/thread_once.h | 0 .../include/internal/tsan_assist.h | 0 .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 0 .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/openssl/aes.h | 0 .../include/openssl/asn1.h | 0 .../include/openssl/asn1_mac.h | 0 .../include/openssl/asn1err.h | 0 .../include/openssl/asn1t.h | 0 .../include/openssl/async.h | 0 .../include/openssl/asyncerr.h | 0 .../include/openssl/bio.h | 0 .../include/openssl/bioerr.h | 0 .../include/openssl/blowfish.h | 0 .../include/openssl/bn.h | 0 .../include/openssl/bnerr.h | 0 .../include/openssl/buffer.h | 0 .../include/openssl/buffererr.h | 0 .../include/openssl/camellia.h | 0 .../include/openssl/cast.h | 0 .../include/openssl/cmac.h | 0 .../include/openssl/cms.h | 0 .../include/openssl/cmserr.h | 0 .../include/openssl/comp.h | 0 .../include/openssl/comperr.h | 0 .../include/openssl/conf.h | 0 .../include/openssl/conf_api.h | 0 .../include/openssl/conferr.h | 0 .../include/openssl/crypto.h | 0 .../include/openssl/cryptoerr.h | 0 .../include/openssl/ct.h | 0 .../include/openssl/cterr.h | 0 .../include/openssl/des.h | 0 .../include/openssl/dh.h | 0 .../include/openssl/dherr.h | 0 .../include/openssl/dsa.h | 0 .../include/openssl/dsaerr.h | 0 .../include/openssl/dtls1.h | 0 .../include/openssl/e_os2.h | 0 .../include/openssl/ebcdic.h | 0 .../include/openssl/ec.h | 0 .../include/openssl/ecdh.h | 0 .../include/openssl/ecdsa.h | 0 .../include/openssl/ecerr.h | 0 .../include/openssl/engine.h | 0 .../include/openssl/engineerr.h | 0 .../include/openssl/err.h | 0 .../include/openssl/evp.h | 0 .../include/openssl/evperr.h | 0 .../include/openssl/hmac.h | 0 .../include/openssl/idea.h | 0 .../include/openssl/kdf.h | 0 .../include/openssl/kdferr.h | 0 .../include/openssl/lhash.h | 0 .../include/openssl/md2.h | 0 .../include/openssl/md4.h | 0 .../include/openssl/md5.h | 0 .../include/openssl/mdc2.h | 0 .../include/openssl/modes.h | 0 .../include/openssl/obj_mac.h | 0 .../include/openssl/objects.h | 0 .../include/openssl/objectserr.h | 0 .../include/openssl/ocsp.h | 0 .../include/openssl/ocsperr.h | 0 .../include/openssl/opensslconf.h.in | 0 .../include/openssl/opensslv.h | 2 +- .../include/openssl/ossl_typ.h | 0 .../include/openssl/pem.h | 0 .../include/openssl/pem2.h | 0 .../include/openssl/pemerr.h | 0 .../include/openssl/pkcs12.h | 0 .../include/openssl/pkcs12err.h | 0 .../include/openssl/pkcs7.h | 0 .../include/openssl/pkcs7err.h | 0 .../include/openssl/rand.h | 0 .../include/openssl/rand_drbg.h | 0 .../include/openssl/randerr.h | 0 .../include/openssl/rc2.h | 0 .../include/openssl/rc4.h | 0 .../include/openssl/rc5.h | 0 .../include/openssl/ripemd.h | 0 .../include/openssl/rsa.h | 0 .../include/openssl/rsaerr.h | 0 .../include/openssl/safestack.h | 0 .../include/openssl/seed.h | 0 .../include/openssl/sha.h | 0 .../include/openssl/srp.h | 0 .../include/openssl/srtp.h | 0 .../include/openssl/ssl.h | 0 .../include/openssl/ssl2.h | 0 .../include/openssl/ssl3.h | 0 .../include/openssl/sslerr.h | 0 .../include/openssl/stack.h | 0 .../include/openssl/store.h | 0 .../include/openssl/storeerr.h | 0 .../include/openssl/symhacks.h | 0 .../include/openssl/tls1.h | 0 .../include/openssl/ts.h | 0 .../include/openssl/tserr.h | 0 .../include/openssl/txt_db.h | 0 .../include/openssl/ui.h | 0 .../include/openssl/uierr.h | 0 .../include/openssl/whrlpool.h | 0 .../include/openssl/x509.h | 0 .../include/openssl/x509_vfy.h | 0 .../include/openssl/x509err.h | 0 .../include/openssl/x509v3.h | 0 .../include/openssl/x509v3err.h | 0 .../ms/applink.c | 0 .../ms/cmp.pl | 0 .../ms/uplink-common.pl | 0 .../ms/uplink-ia64.pl | 0 .../ms/uplink-x86.pl | 0 .../ms/uplink-x86_64.pl | 0 .../ms/uplink.c | 0 .../ms/uplink.h | 0 .../os-dep/haiku.h | 0 .../ssl/bio_ssl.c | 0 .../ssl/build.info | 0 .../ssl/d1_lib.c | 0 .../ssl/d1_msg.c | 0 .../ssl/d1_srtp.c | 0 .../ssl/methods.c | 0 .../ssl/packet.c | 0 .../ssl/packet_local.h | 0 .../ssl/pqueue.c | 0 .../ssl/record/README | 0 .../ssl/record/dtls1_bitmap.c | 0 .../ssl/record/rec_layer_d1.c | 0 .../ssl/record/rec_layer_s3.c | 9 +++ .../ssl/record/record.h | 1 + .../ssl/record/record_local.h | 0 .../ssl/record/ssl3_buffer.c | 0 .../ssl/record/ssl3_record.c | 0 .../ssl/record/ssl3_record_tls13.c | 0 .../ssl/s3_cbc.c | 0 .../ssl/s3_enc.c | 0 .../ssl/s3_lib.c | 0 .../ssl/s3_msg.c | 0 .../ssl/ssl_asn1.c | 0 .../ssl/ssl_cert.c | 0 .../ssl/ssl_cert_table.h | 0 .../ssl/ssl_ciph.c | 0 .../ssl/ssl_conf.c | 0 .../ssl/ssl_err.c | 0 .../ssl/ssl_init.c | 0 .../ssl/ssl_lib.c | 71 ++++++++++++------ .../ssl/ssl_local.h | 0 .../ssl/ssl_mcnf.c | 0 .../ssl/ssl_rsa.c | 0 .../ssl/ssl_sess.c | 28 +++++-- .../ssl/ssl_stat.c | 0 .../ssl/ssl_txt.c | 0 .../ssl/ssl_utst.c | 0 .../ssl/statem/README | 0 .../ssl/statem/extensions.c | 0 .../ssl/statem/extensions_clnt.c | 0 .../ssl/statem/extensions_cust.c | 0 .../ssl/statem/extensions_srvr.c | 0 .../ssl/statem/statem.c | 0 .../ssl/statem/statem.h | 0 .../ssl/statem/statem_clnt.c | 0 .../ssl/statem/statem_dtls.c | 0 .../ssl/statem/statem_lib.c | 0 .../ssl/statem/statem_local.h | 0 .../ssl/statem/statem_srvr.c | 5 +- .../ssl/t1_enc.c | 0 .../ssl/t1_lib.c | 0 .../ssl/t1_trce.c | 0 .../ssl/tls13_enc.c | 0 .../ssl/tls_srp.c | 0 .../test/CAss.cnf | 0 .../test/CAssdh.cnf | 0 .../test/CAssdsa.cnf | 0 .../test/CAssrsa.cnf | 0 .../test/CAtsa.cnf | 0 .../test/P1ss.cnf | 0 .../test/P2ss.cnf | 0 .../test/README | 0 .../test/README.external | 0 .../test/README.ssltest.md | 0 .../test/Sssdsa.cnf | 0 .../test/Sssrsa.cnf | 0 .../test/Uss.cnf | 0 .../test/aborttest.c | 0 .../test/afalgtest.c | 0 .../test/asn1_decode_test.c | 0 .../test/asn1_encode_test.c | 0 .../test/asn1_internal_test.c | 0 .../test/asn1_string_table_test.c | 0 .../test/asn1_time_test.c | 0 .../test/asynciotest.c | 0 .../test/asynctest.c | 0 .../test/bad_dtls_test.c | 0 .../test/bftest.c | 0 .../test/bio_callback_test.c | 0 .../test/bio_enc_test.c | 0 .../test/bio_memleak_test.c | 0 .../test/bioprinttest.c | 0 .../test/bntest.c | 0 .../test/bntests.pl | 0 .../test/build.info | 0 .../test/casttest.c | 0 .../test/certs/alt1-cert.pem | 0 .../test/certs/alt1-key.pem | 0 .../test/certs/alt2-cert.pem | 0 .../test/certs/alt2-key.pem | 0 .../test/certs/alt3-cert.pem | 0 .../test/certs/alt3-key.pem | 0 .../test/certs/bad-pc3-cert.pem | 0 .../test/certs/bad-pc3-key.pem | 0 .../test/certs/bad-pc4-cert.pem | 0 .../test/certs/bad-pc4-key.pem | 0 .../test/certs/bad-pc6-cert.pem | 0 .../test/certs/bad-pc6-key.pem | 0 .../test/certs/bad.key | 0 .../test/certs/bad.pem | 0 .../test/certs/badalt1-cert.pem | 0 .../test/certs/badalt1-key.pem | 0 .../test/certs/badalt10-cert.pem | 0 .../test/certs/badalt10-key.pem | 0 .../test/certs/badalt2-cert.pem | 0 .../test/certs/badalt2-key.pem | 0 .../test/certs/badalt3-cert.pem | 0 .../test/certs/badalt3-key.pem | 0 .../test/certs/badalt4-cert.pem | 0 .../test/certs/badalt4-key.pem | 0 .../test/certs/badalt5-cert.pem | 0 .../test/certs/badalt5-key.pem | 0 .../test/certs/badalt6-cert.pem | 0 .../test/certs/badalt6-key.pem | 0 .../test/certs/badalt7-cert.pem | 0 .../test/certs/badalt7-key.pem | 0 .../test/certs/badalt8-cert.pem | 0 .../test/certs/badalt8-key.pem | 0 .../test/certs/badalt9-cert.pem | 0 .../test/certs/badalt9-key.pem | 0 .../test/certs/badcn1-cert.pem | 0 .../test/certs/badcn1-key.pem | 0 .../test/certs/ca+anyEKU.pem | 0 .../test/certs/ca+clientAuth.pem | 0 .../test/certs/ca+serverAuth.pem | 0 .../test/certs/ca-anyEKU.pem | 0 .../test/certs/ca-cert-768.pem | 0 .../test/certs/ca-cert-768i.pem | 0 .../test/certs/ca-cert-ec-explicit.pem | 0 .../test/certs/ca-cert-ec-named.pem | 0 .../test/certs/ca-cert-md5-any.pem | 0 .../test/certs/ca-cert-md5.pem | 0 .../test/certs/ca-cert.pem | 0 .../test/certs/ca-cert2.pem | 0 .../test/certs/ca-clientAuth.pem | 0 .../test/certs/ca-expired.pem | 0 .../test/certs/ca-key-768.pem | 0 .../test/certs/ca-key-ec-explicit.pem | 0 .../test/certs/ca-key-ec-named.pem | 0 .../test/certs/ca-key.pem | 0 .../test/certs/ca-key2.pem | 0 .../test/certs/ca-name2.pem | 0 .../test/certs/ca-nonbc.pem | 0 .../test/certs/ca-nonca.pem | 0 .../test/certs/ca-pol-cert.pem | 0 .../test/certs/ca-pss-cert.pem | 0 .../test/certs/ca-pss-key.pem | 0 .../test/certs/ca-root2.pem | 0 .../test/certs/ca-serverAuth.pem | 0 .../test/certs/cca+anyEKU.pem | 0 .../test/certs/cca+clientAuth.pem | 0 .../test/certs/cca+serverAuth.pem | 0 .../test/certs/cca-anyEKU.pem | 0 .../test/certs/cca-cert.pem | 0 .../test/certs/cca-clientAuth.pem | 0 .../test/certs/cca-serverAuth.pem | 0 .../test/certs/client-ed25519-cert.pem | 0 .../test/certs/client-ed25519-key.pem | 0 .../test/certs/client-ed448-cert.pem | 0 .../test/certs/client-ed448-key.pem | 0 .../test/certs/croot+anyEKU.pem | 0 .../test/certs/croot+clientAuth.pem | 0 .../test/certs/croot+serverAuth.pem | 0 .../test/certs/croot-anyEKU.pem | 0 .../test/certs/croot-cert.pem | 0 .../test/certs/croot-clientAuth.pem | 0 .../test/certs/croot-serverAuth.pem | 0 .../test/certs/cross-key.pem | 0 .../test/certs/cross-root.pem | 0 .../test/certs/cyrillic.msb | 0 .../test/certs/cyrillic.pem | 0 .../test/certs/cyrillic.utf8 | 0 .../test/certs/cyrillic_crl.pem | 0 .../test/certs/cyrillic_crl.utf8 | 0 .../test/certs/dhp2048.pem | 0 .../test/certs/ee+clientAuth.pem | 0 .../test/certs/ee+serverAuth.pem | 0 .../test/certs/ee-cert-768.pem | 0 .../test/certs/ee-cert-768i.pem | 0 .../test/certs/ee-cert-ec-explicit.pem | 0 .../test/certs/ee-cert-ec-named-explicit.pem | 0 .../test/certs/ee-cert-ec-named-named.pem | 0 .../test/certs/ee-cert-md5.pem | 0 .../test/certs/ee-cert-policies-bad.pem | 0 .../test/certs/ee-cert-policies.pem | 0 .../test/certs/ee-cert.pem | 0 .../test/certs/ee-cert2.pem | 0 .../test/certs/ee-client-chain.pem | 0 .../test/certs/ee-client.pem | 0 .../test/certs/ee-clientAuth.pem | 0 .../test/certs/ee-ecdsa-client-chain.pem | 0 .../test/certs/ee-ecdsa-key.pem | 0 .../test/certs/ee-ed25519.pem | 0 .../test/certs/ee-expired.pem | 0 .../test/certs/ee-key-768.pem | 0 .../test/certs/ee-key-ec-explicit.pem | 0 .../test/certs/ee-key-ec-named-explicit.pem | 0 .../test/certs/ee-key-ec-named-named.pem | 0 .../test/certs/ee-key.pem | 0 .../test/certs/ee-name2.pem | 0 .../test/certs/ee-pathlen.pem | 0 .../test/certs/ee-pss-cert.pem | 0 .../test/certs/ee-pss-sha1-cert.pem | 0 .../test/certs/ee-pss-sha256-cert.pem | 0 .../test/certs/ee-self-signed.pem | 0 .../test/certs/ee-serverAuth.pem | 0 .../test/certs/embeddedSCTs1-key.pem | 0 .../test/certs/embeddedSCTs1.pem | 0 .../test/certs/embeddedSCTs1.sct | 0 .../test/certs/embeddedSCTs1_issuer-key.pem | 0 .../test/certs/embeddedSCTs1_issuer.pem | 0 .../test/certs/embeddedSCTs3.pem | 0 .../test/certs/embeddedSCTs3.sct | 0 .../test/certs/embeddedSCTs3_issuer.pem | 0 .../test/certs/goodcn1-cert.pem | 0 .../test/certs/goodcn1-key.pem | 0 .../test/certs/interCA.key | 0 .../test/certs/interCA.pem | 0 .../test/certs/invalid-cert.pem | 0 .../test/certs/leaf.key | 0 .../test/certs/leaf.pem | 0 .../test/certs/many-constraints.pem | 0 .../test/certs/many-names1.pem | 0 .../test/certs/many-names2.pem | 0 .../test/certs/many-names3.pem | 0 .../test/certs/mkcert.sh | 0 .../test/certs/nca+anyEKU.pem | 0 .../test/certs/nca+serverAuth.pem | 0 .../test/certs/ncca-cert.pem | 0 .../test/certs/ncca-key.pem | 0 .../test/certs/ncca1-cert.pem | 0 .../test/certs/ncca1-key.pem | 0 .../test/certs/ncca2-cert.pem | 0 .../test/certs/ncca2-key.pem | 0 .../test/certs/ncca3-cert.pem | 0 .../test/certs/ncca3-key.pem | 0 .../test/certs/nroot+anyEKU.pem | 0 .../test/certs/nroot+serverAuth.pem | 0 .../test/certs/p256-server-cert.pem | 0 .../test/certs/p256-server-key.pem | 0 .../test/certs/p384-root-key.pem | 0 .../test/certs/p384-root.pem | 0 .../test/certs/p384-server-cert.pem | 0 .../test/certs/p384-server-key.pem | 0 .../test/certs/pathlen.pem | 0 .../test/certs/pc1-cert.pem | 0 .../test/certs/pc1-key.pem | 0 .../test/certs/pc2-cert.pem | 0 .../test/certs/pc2-key.pem | 0 .../test/certs/pc5-cert.pem | 0 .../test/certs/pc5-key.pem | 0 .../test/certs/root+anyEKU.pem | 0 .../test/certs/root+clientAuth.pem | 0 .../test/certs/root+serverAuth.pem | 0 .../test/certs/root-anyEKU.pem | 0 .../test/certs/root-cert-768.pem | 0 .../test/certs/root-cert-md5.pem | 0 .../test/certs/root-cert-rsa2.pem | 0 .../test/certs/root-cert.pem | 0 .../test/certs/root-cert2.pem | 0 .../test/certs/root-clientAuth.pem | 0 .../test/certs/root-cross-cert.pem | 0 .../test/certs/root-ed25519.pem | 0 .../test/certs/root-ed448-cert.pem | 0 .../test/certs/root-ed448-key.pem | 0 .../test/certs/root-expired.pem | 0 .../test/certs/root-key-768.pem | 0 .../test/certs/root-key.pem | 0 .../test/certs/root-key2.pem | 0 .../test/certs/root-name2.pem | 0 .../test/certs/root-nonca.pem | 0 .../test/certs/root-noserver.pem | 0 .../test/certs/root-serverAuth.pem | 0 .../test/certs/root2+clientAuth.pem | 0 .../test/certs/root2+serverAuth.pem | 0 .../test/certs/root2-serverAuth.pem | 0 .../test/certs/rootCA.key | 0 .../test/certs/rootCA.pem | 0 .../test/certs/rootcert.pem | 0 .../test/certs/rootkey.pem | 0 .../test/certs/roots.pem | 0 .../test/certs/sca+anyEKU.pem | 0 .../test/certs/sca+clientAuth.pem | 0 .../test/certs/sca+serverAuth.pem | 0 .../test/certs/sca-anyEKU.pem | 0 .../test/certs/sca-cert.pem | 0 .../test/certs/sca-clientAuth.pem | 0 .../test/certs/sca-serverAuth.pem | 0 .../test/certs/server-cecdsa-cert.pem | 0 .../test/certs/server-cecdsa-key.pem | 0 .../test/certs/server-dsa-cert.pem | 0 .../test/certs/server-dsa-key.pem | 0 .../server-ecdsa-brainpoolP256r1-cert.pem | 0 .../server-ecdsa-brainpoolP256r1-key.pem | 0 .../test/certs/server-ecdsa-cert.pem | 0 .../test/certs/server-ecdsa-key.pem | 0 .../test/certs/server-ed25519-cert.pem | 0 .../test/certs/server-ed25519-key.pem | 0 .../test/certs/server-ed448-cert.pem | 0 .../test/certs/server-ed448-key.pem | 0 .../test/certs/server-pss-cert.pem | 0 .../test/certs/server-pss-key.pem | 0 .../test/certs/server-pss-restrict-cert.pem | 0 .../test/certs/server-pss-restrict-key.pem | 0 .../test/certs/server-trusted.pem | 0 .../test/certs/servercert.pem | 0 .../test/certs/serverkey.pem | 0 .../test/certs/setup.sh | 0 .../test/certs/some-names1.pem | 0 .../test/certs/some-names2.pem | 0 .../test/certs/some-names3.pem | 0 .../test/certs/sroot+anyEKU.pem | 0 .../test/certs/sroot+clientAuth.pem | 0 .../test/certs/sroot+serverAuth.pem | 0 .../test/certs/sroot-anyEKU.pem | 0 .../test/certs/sroot-cert.pem | 0 .../test/certs/sroot-clientAuth.pem | 0 .../test/certs/sroot-serverAuth.pem | 0 .../test/certs/subinterCA-ss.pem | 0 .../test/certs/subinterCA.key | 0 .../test/certs/subinterCA.pem | 0 .../test/certs/untrusted.pem | 0 .../test/certs/wrongcert.pem | 0 .../test/certs/wrongkey.pem | 0 .../test/certs/x509-check-key.pem | 0 .../test/certs/x509-check.csr | 0 .../test/chacha_internal_test.c | 0 .../test/cipher_overhead_test.c | 0 .../test/cipherbytes_test.c | 0 .../test/cipherlist_test.c | 0 .../test/ciphername_test.c | 0 .../test/clienthellotest.c | 0 .../test/cmactest.c | 0 .../test/cms-examples.pl | 0 .../test/cmsapitest.c | 0 .../test/conf_include_test.c | 0 .../test/constant_time_test.c | 0 .../test/crltest.c | 0 .../test/ct/log_list.conf | 0 .../test/ct/tls1.sct | 0 .../test/ct_test.c | 0 .../test/ctype_internal_test.c | 0 .../test/curve448_internal_test.c | 0 .../test/d2i-tests/bad-cms.der | 0 .../test/d2i-tests/bad-int-pad0.der | Bin .../test/d2i-tests/bad-int-padminus1.der | 0 .../test/d2i-tests/bad_bio.der | Bin .../test/d2i-tests/bad_cert.der | Bin .../test/d2i-tests/bad_generalname.der | 0 .../test/d2i-tests/high_tag.der | Bin .../test/d2i-tests/int0.der | Bin .../test/d2i-tests/int1.der | 0 .../test/d2i-tests/intminus1.der | 0 .../test/d2i_test.c | 0 .../test/dane-cross.in | 0 .../test/danetest.c | 0 .../test/danetest.in | 0 .../test/danetest.pem | 0 .../test/data.bin | 0 .../test/destest.c | 0 .../test/dhtest.c | 0 .../test/drbg_cavs_data.c | 0 .../test/drbg_cavs_data.h | 0 .../test/drbg_cavs_test.c | 0 .../test/drbgtest.c | 0 .../test/drbgtest.h | 0 .../test/dsa_no_digest_size_test.c | 0 .../test/dsatest.c | 0 .../test/dtls_mtu_test.c | 0 .../test/dtlstest.c | 0 .../test/dtlsv1listentest.c | 0 .../test/ec_internal_test.c | 0 .../test/ecdsatest.c | 0 .../test/ecdsatest.h | 0 .../test/ecstresstest.c | 0 .../test/ectest.c | 0 .../test/enginetest.c | 0 .../test/errtest.c | 0 .../test/evp_extra_test.c | 0 .../test/evp_test.c | 0 .../test/evp_test.h | 0 .../test/exdatatest.c | 0 .../test/exptest.c | 0 .../test/fatalerrtest.c | 0 .../test/generate_buildtest.pl | 0 .../test/generate_ssl_tests.pl | 0 .../test/gmdifftest.c | 0 .../test/gosttest.c | 0 .../test/handshake_helper.c | 0 .../test/handshake_helper.h | 0 .../test/hmactest.c | 0 .../test/ideatest.c | 0 .../test/igetest.c | 0 .../test/lhash_test.c | 0 .../test/md2test.c | 0 .../test/mdc2_internal_test.c | 0 .../test/mdc2test.c | 0 .../test/memleaktest.c | 0 .../test/modes_internal_test.c | 0 .../test/ocsp-tests/D1.ors | 0 .../test/ocsp-tests/D1_Cert_EE.pem | 0 .../test/ocsp-tests/D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/D2.ors | 0 .../test/ocsp-tests/D2_Cert_ICA.pem | 0 .../test/ocsp-tests/D2_Issuer_Root.pem | 0 .../test/ocsp-tests/D3.ors | 0 .../test/ocsp-tests/D3_Cert_EE.pem | 0 .../test/ocsp-tests/D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISDOSC_D1.ors | 0 .../test/ocsp-tests/ISDOSC_D2.ors | 0 .../test/ocsp-tests/ISDOSC_D3.ors | 0 .../test/ocsp-tests/ISIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISOP_D1.ors | 0 .../test/ocsp-tests/ISOP_D2.ors | 0 .../test/ocsp-tests/ISOP_D3.ors | 0 .../test/ocsp-tests/ISOP_ND1.ors | 0 .../test/ocsp-tests/ISOP_ND2.ors | 0 .../test/ocsp-tests/ISOP_ND3.ors | 0 .../test/ocsp-tests/ND1.ors | 0 .../test/ocsp-tests/ND1_Cert_EE.pem | 0 .../test/ocsp-tests/ND1_Cross_Root.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA-Cross.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ND2.ors | 0 .../test/ocsp-tests/ND2_Cert_ICA.pem | 0 .../test/ocsp-tests/ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ND3.ors | 0 .../test/ocsp-tests/ND3_Cert_EE.pem | 0 .../test/ocsp-tests/ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WIKH_D1.ors | 0 .../test/ocsp-tests/WIKH_D2.ors | 0 .../test/ocsp-tests/WIKH_D3.ors | 0 .../test/ocsp-tests/WIKH_ND1.ors | 0 .../test/ocsp-tests/WIKH_ND2.ors | 0 .../test/ocsp-tests/WIKH_ND3.ors | 0 .../test/ocsp-tests/WINH_D1.ors | 0 .../test/ocsp-tests/WINH_D2.ors | 0 .../test/ocsp-tests/WINH_D3.ors | 0 .../test/ocsp-tests/WINH_ND1.ors | 0 .../test/ocsp-tests/WINH_ND2.ors | 0 .../test/ocsp-tests/WINH_ND3.ors | 0 .../test/ocsp-tests/WKDOSC_D1.ors | 0 .../test/ocsp-tests/WKDOSC_D2.ors | 0 .../test/ocsp-tests/WKDOSC_D3.ors | 0 .../test/ocsp-tests/WKIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WRID_D1.ors | 0 .../test/ocsp-tests/WRID_D2.ors | 0 .../test/ocsp-tests/WRID_D3.ors | 0 .../test/ocsp-tests/WRID_ND1.ors | 0 .../test/ocsp-tests/WRID_ND2.ors | 0 .../test/ocsp-tests/WRID_ND3.ors | 0 .../test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem | 0 .../test/ocspapitest.c | 0 .../test/ossl_shim/async_bio.cc | 0 .../test/ossl_shim/async_bio.h | 0 .../test/ossl_shim/build.info | 0 .../test/ossl_shim/include/openssl/base.h | 0 .../test/ossl_shim/ossl_config.json | 0 .../test/ossl_shim/ossl_shim.cc | 0 .../test/ossl_shim/packeted_bio.cc | 0 .../test/ossl_shim/packeted_bio.h | 0 .../test/ossl_shim/test_config.cc | 0 .../test/ossl_shim/test_config.h | 0 .../test/packettest.c | 0 .../test/pbelutest.c | 0 .../test/pemtest.c | 0 .../test/pkcs7-1.pem | 0 .../test/pkcs7.pem | 0 .../test/pkey_meth_kdf_test.c | 0 .../test/pkey_meth_test.c | 0 .../test/pkits-test.pl | 0 .../test/poly1305_internal_test.c | 0 .../test/rc2test.c | 0 .../test/rc4test.c | 0 .../test/rc5test.c | 0 .../test/rdrand_sanitytest.c | 0 .../test/recipes/01-test_abort.t | 0 .../test/recipes/01-test_sanity.t | 0 .../test/recipes/01-test_symbol_presence.t | 0 .../test/recipes/01-test_test.t | 0 .../test/recipes/02-test_errstr.t | 0 .../test/recipes/02-test_internal_ctype.t | 0 .../test/recipes/02-test_lhash.t | 0 .../test/recipes/02-test_ordinals.t | 0 .../test/recipes/02-test_stack.t | 0 .../test/recipes/03-test_exdata.t | 0 .../test/recipes/03-test_internal_asn1.t | 0 .../test/recipes/03-test_internal_chacha.t | 0 .../test/recipes/03-test_internal_curve448.t | 0 .../test/recipes/03-test_internal_ec.t | 0 .../test/recipes/03-test_internal_mdc2.t | 0 .../test/recipes/03-test_internal_modes.t | 0 .../test/recipes/03-test_internal_poly1305.t | 0 .../test/recipes/03-test_internal_siphash.t | 0 .../test/recipes/03-test_internal_sm2.t | 0 .../test/recipes/03-test_internal_sm4.t | 0 .../recipes/03-test_internal_ssl_cert_table.t | 0 .../test/recipes/03-test_internal_x509.t | 0 .../test/recipes/03-test_ui.t | 0 .../test/recipes/04-test_asn1_decode.t | 0 .../test/recipes/04-test_asn1_encode.t | 0 .../test/recipes/04-test_asn1_string_table.t | 0 .../test/recipes/04-test_bio_callback.t | 0 .../test/recipes/04-test_bioprint.t | 0 .../test/recipes/04-test_err.t | 0 .../test/recipes/04-test_pem.t | 0 .../test/recipes/04-test_pem_data/NOTES | 0 .../test/recipes/04-test_pem_data/beermug.pem | 0 .../04-test_pem_data/cert-1023line.pem | 0 .../04-test_pem_data/cert-1024line.pem | 0 .../04-test_pem_data/cert-1025line.pem | 0 .../cert-254-chars-at-the-end.pem | 0 .../cert-254-chars-in-the-middle.pem | 0 .../recipes/04-test_pem_data/cert-255line.pem | 0 .../recipes/04-test_pem_data/cert-256line.pem | 0 .../recipes/04-test_pem_data/cert-257line.pem | 0 .../04-test_pem_data/cert-blankline.pem | 0 .../recipes/04-test_pem_data/cert-comment.pem | 0 .../04-test_pem_data/cert-earlypad.pem | 0 .../04-test_pem_data/cert-extrapad.pem | 0 .../04-test_pem_data/cert-infixwhitespace.pem | 0 .../recipes/04-test_pem_data/cert-junk.pem | 0 .../cert-leadingwhitespace.pem | 0 .../04-test_pem_data/cert-longline.pem | 0 .../04-test_pem_data/cert-misalignedpad.pem | 0 .../04-test_pem_data/cert-onecolumn.pem | 0 .../cert-oneline-multiple-of-254.pem | 0 .../recipes/04-test_pem_data/cert-oneline.pem | 0 .../cert-shortandlongline.pem | 0 .../04-test_pem_data/cert-shortline.pem | 0 .../04-test_pem_data/cert-threecolumn.pem | 0 .../cert-trailingwhitespace.pem | 0 .../test/recipes/04-test_pem_data/cert.pem | 0 .../test/recipes/04-test_pem_data/csr.pem | 0 .../recipes/04-test_pem_data/dsa-1023line.pem | 0 .../recipes/04-test_pem_data/dsa-1024line.pem | 0 .../recipes/04-test_pem_data/dsa-1025line.pem | 0 .../recipes/04-test_pem_data/dsa-255line.pem | 0 .../recipes/04-test_pem_data/dsa-256line.pem | 0 .../recipes/04-test_pem_data/dsa-257line.pem | 0 .../04-test_pem_data/dsa-blankline.pem | 0 .../recipes/04-test_pem_data/dsa-comment.pem | 0 .../04-test_pem_data/dsa-corruptedheader.pem | 0 .../04-test_pem_data/dsa-corruptiv.pem | 0 .../recipes/04-test_pem_data/dsa-earlypad.pem | 0 .../recipes/04-test_pem_data/dsa-extrapad.pem | 0 .../04-test_pem_data/dsa-infixwhitespace.pem | 0 .../recipes/04-test_pem_data/dsa-junk.pem | 0 .../dsa-leadingwhitespace.pem | 0 .../recipes/04-test_pem_data/dsa-longline.pem | 0 .../04-test_pem_data/dsa-misalignedpad.pem | 0 .../04-test_pem_data/dsa-onecolumn.pem | 0 .../recipes/04-test_pem_data/dsa-oneline.pem | 0 .../04-test_pem_data/dsa-onelineheader.pem | 0 .../04-test_pem_data/dsa-shortandlongline.pem | 0 .../04-test_pem_data/dsa-shortline.pem | 0 .../04-test_pem_data/dsa-threecolumn.pem | 0 .../dsa-trailingwhitespace.pem | 0 .../test/recipes/04-test_pem_data/dsa.pem | 0 .../recipes/04-test_pem_data/dsaparam.pem | 0 .../test/recipes/04-test_pem_data/key.pem | 0 .../test/recipes/04-test_pem_data/wellknown | 0 .../test/recipes/05-test_bf.t | 0 .../test/recipes/05-test_cast.t | 0 .../test/recipes/05-test_cmac.t | 0 .../test/recipes/05-test_des.t | 0 .../test/recipes/05-test_hmac.t | 0 .../test/recipes/05-test_idea.t | 0 .../test/recipes/05-test_md2.t | 0 .../test/recipes/05-test_mdc2.t | 0 .../test/recipes/05-test_rand.t | 0 .../test/recipes/05-test_rc2.t | 0 .../test/recipes/05-test_rc4.t | 0 .../test/recipes/05-test_rc5.t | 0 .../test/recipes/06-test-rdrand.t | 0 .../test/recipes/10-test_bn.t | 0 .../test/recipes/10-test_bn_data/bnexp.txt | 0 .../test/recipes/10-test_bn_data/bngcd.txt | 0 .../test/recipes/10-test_bn_data/bnmod.txt | 0 .../test/recipes/10-test_bn_data/bnmul.txt | 0 .../test/recipes/10-test_bn_data/bnshift.txt | 0 .../test/recipes/10-test_bn_data/bnsum.txt | 0 .../test/recipes/10-test_exp.t | 0 .../test/recipes/15-test_dh.t | 0 .../test/recipes/15-test_dsa.t | 0 .../test/recipes/15-test_ec.t | 0 .../test/recipes/15-test_ecdsa.t | 0 .../test/recipes/15-test_ecparam.t | 0 .../invalid/c2pnb208w1-reducible.pem | 0 .../invalid/nistp256-nonprime.pem | 0 .../invalid/nistp256-offcurve.pem | 0 .../invalid/nistp256-wrongorder.pem | 0 .../valid/c2pnb163v1-explicit.pem | 0 .../valid/c2pnb163v1-named.pem | 0 .../valid/c2pnb163v2-explicit.pem | 0 .../valid/c2pnb163v2-named.pem | 0 .../valid/c2pnb163v3-explicit.pem | 0 .../valid/c2pnb163v3-named.pem | 0 .../valid/c2pnb176v1-explicit.pem | 0 .../valid/c2pnb176v1-named.pem | 0 .../valid/c2pnb208w1-explicit.pem | 0 .../valid/c2pnb208w1-named.pem | 0 .../valid/c2pnb272w1-explicit.pem | 0 .../valid/c2pnb272w1-named.pem | 0 .../valid/c2pnb304w1-explicit.pem | 0 .../valid/c2pnb304w1-named.pem | 0 .../valid/c2pnb368w1-explicit.pem | 0 .../valid/c2pnb368w1-named.pem | 0 .../valid/c2tnb191v1-explicit.pem | 0 .../valid/c2tnb191v1-named.pem | 0 .../valid/c2tnb191v2-explicit.pem | 0 .../valid/c2tnb191v2-named.pem | 0 .../valid/c2tnb191v3-explicit.pem | 0 .../valid/c2tnb191v3-named.pem | 0 .../valid/c2tnb239v1-explicit.pem | 0 .../valid/c2tnb239v1-named.pem | 0 .../valid/c2tnb239v2-explicit.pem | 0 .../valid/c2tnb239v2-named.pem | 0 .../valid/c2tnb239v3-explicit.pem | 0 .../valid/c2tnb239v3-named.pem | 0 .../valid/c2tnb359v1-explicit.pem | 0 .../valid/c2tnb359v1-named.pem | 0 .../valid/c2tnb431r1-explicit.pem | 0 .../valid/c2tnb431r1-named.pem | 0 .../valid/prime192v1-explicit.pem | 0 .../valid/prime192v1-named.pem | 0 .../valid/prime192v2-explicit.pem | 0 .../valid/prime192v2-named.pem | 0 .../valid/prime192v3-explicit.pem | 0 .../valid/prime192v3-named.pem | 0 .../valid/prime239v1-explicit.pem | 0 .../valid/prime239v1-named.pem | 0 .../valid/prime239v2-explicit.pem | 0 .../valid/prime239v2-named.pem | 0 .../valid/prime239v3-explicit.pem | 0 .../valid/prime239v3-named.pem | 0 .../valid/prime256v1-explicit.pem | 0 .../valid/prime256v1-named.pem | 0 .../valid/secp112r1-explicit.pem | 0 .../valid/secp112r1-named.pem | 0 .../valid/secp112r2-explicit.pem | 0 .../valid/secp112r2-named.pem | 0 .../valid/secp128r1-explicit.pem | 0 .../valid/secp128r1-named.pem | 0 .../valid/secp128r2-explicit.pem | 0 .../valid/secp128r2-named.pem | 0 .../valid/secp160k1-explicit.pem | 0 .../valid/secp160k1-named.pem | 0 .../valid/secp160r1-explicit.pem | 0 .../valid/secp160r1-named.pem | 0 .../valid/secp160r2-explicit.pem | 0 .../valid/secp160r2-named.pem | 0 .../valid/secp192k1-explicit.pem | 0 .../valid/secp192k1-named.pem | 0 .../valid/secp224k1-explicit.pem | 0 .../valid/secp224k1-named.pem | 0 .../valid/secp224r1-explicit.pem | 0 .../valid/secp224r1-named.pem | 0 .../valid/secp256k1-explicit.pem | 0 .../valid/secp256k1-named.pem | 0 .../valid/secp384r1-explicit.pem | 0 .../valid/secp384r1-named.pem | 0 .../valid/secp521r1-explicit.pem | 0 .../valid/secp521r1-named.pem | 0 .../valid/sect113r1-explicit.pem | 0 .../valid/sect113r1-named.pem | 0 .../valid/sect113r2-explicit.pem | 0 .../valid/sect113r2-named.pem | 0 .../valid/sect131r1-explicit.pem | 0 .../valid/sect131r1-named.pem | 0 .../valid/sect131r2-explicit.pem | 0 .../valid/sect131r2-named.pem | 0 .../valid/sect163k1-explicit.pem | 0 .../valid/sect163k1-named.pem | 0 .../valid/sect163r1-explicit.pem | 0 .../valid/sect163r1-named.pem | 0 .../valid/sect163r2-explicit.pem | 0 .../valid/sect163r2-named.pem | 0 .../valid/sect193r1-explicit.pem | 0 .../valid/sect193r1-named.pem | 0 .../valid/sect193r2-explicit.pem | 0 .../valid/sect193r2-named.pem | 0 .../valid/sect233k1-explicit.pem | 0 .../valid/sect233k1-named.pem | 0 .../valid/sect233r1-explicit.pem | 0 .../valid/sect233r1-named.pem | 0 .../valid/sect239k1-explicit.pem | 0 .../valid/sect239k1-named.pem | 0 .../valid/sect283k1-explicit.pem | 0 .../valid/sect283k1-named.pem | 0 .../valid/sect283r1-explicit.pem | 0 .../valid/sect283r1-named.pem | 0 .../valid/sect409k1-explicit.pem | 0 .../valid/sect409k1-named.pem | 0 .../valid/sect409r1-explicit.pem | 0 .../valid/sect409r1-named.pem | 0 .../valid/sect571k1-explicit.pem | 0 .../valid/sect571k1-named.pem | 0 .../valid/sect571r1-explicit.pem | 0 .../valid/sect571r1-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls1-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls1-named.pem | 0 .../wap-wsg-idm-ecid-wtls10-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls10-named.pem | 0 .../wap-wsg-idm-ecid-wtls11-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls11-named.pem | 0 .../wap-wsg-idm-ecid-wtls12-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls12-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls3-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls3-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls4-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls4-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls5-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls5-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls6-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls6-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls7-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls7-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls8-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls8-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls9-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls9-named.pem | 0 .../test/recipes/15-test_genec.t | 0 .../test/recipes/15-test_genrsa.t | 0 .../test/recipes/15-test_mp_rsa.t | 0 .../recipes/15-test_mp_rsa_data/plain_text | 0 .../test/recipes/15-test_out_option.t | 0 .../test/recipes/15-test_rsa.t | 0 .../test/recipes/15-test_rsapss.t | 0 .../test/recipes/20-test_dgst.t | 0 .../test/recipes/20-test_enc.t | 0 .../test/recipes/20-test_enc_more.t | 0 .../test/recipes/20-test_passwd.t | 0 .../test/recipes/25-test_crl.t | 0 .../test/recipes/25-test_d2i.t | 0 .../test/recipes/25-test_pkcs7.t | 0 .../test/recipes/25-test_req.t | 0 .../test/recipes/25-test_sid.t | 0 .../test/recipes/25-test_verify.t | 0 .../test/recipes/25-test_x509.t | 0 .../test/recipes/30-test_afalg.t | 0 .../test/recipes/30-test_engine.t | 0 .../test/recipes/30-test_evp.t | 0 .../test/recipes/30-test_evp_data/evpcase.txt | 0 .../recipes/30-test_evp_data/evpccmcavs.txt | 0 .../test/recipes/30-test_evp_data/evpciph.txt | 0 .../recipes/30-test_evp_data/evpdigest.txt | 0 .../recipes/30-test_evp_data/evpencod.txt | 0 .../test/recipes/30-test_evp_data/evpkdf.txt | 0 .../test/recipes/30-test_evp_data/evpmac.txt | 0 .../test/recipes/30-test_evp_data/evppbe.txt | 0 .../test/recipes/30-test_evp_data/evppkey.txt | 0 .../recipes/30-test_evp_data/evppkey_ecc.txt | 0 .../test/recipes/30-test_evp_extra.t | 0 .../test/recipes/30-test_pbelu.t | 0 .../test/recipes/30-test_pkey_meth.t | 0 .../test/recipes/30-test_pkey_meth_kdf.t | 0 .../test/recipes/40-test_rehash.t | 0 .../recipes/60-test_x509_check_cert_pkey.t | 0 .../test/recipes/60-test_x509_dup_cert.t | 0 .../test/recipes/60-test_x509_store.t | 0 .../test/recipes/60-test_x509_time.t | 0 .../test/recipes/70-test_asyncio.t | 0 .../test/recipes/70-test_bad_dtls.t | 0 .../test/recipes/70-test_clienthello.t | 0 .../test/recipes/70-test_comp.t | 0 .../test/recipes/70-test_key_share.t | 0 .../test/recipes/70-test_packet.t | 0 .../test/recipes/70-test_recordlen.t | 0 .../test/recipes/70-test_renegotiation.t | 0 .../test/recipes/70-test_servername.t | 0 .../test/recipes/70-test_sslcbcpadding.t | 0 .../test/recipes/70-test_sslcertstatus.t | 0 .../test/recipes/70-test_sslextension.t | 0 .../test/recipes/70-test_sslmessages.t | 0 .../test/recipes/70-test_sslrecords.t | 0 .../test/recipes/70-test_sslsessiontick.t | 0 .../test/recipes/70-test_sslsigalgs.t | 0 .../test/recipes/70-test_sslsignature.t | 0 .../test/recipes/70-test_sslskewith0p.t | 0 .../test/recipes/70-test_sslversions.t | 0 .../test/recipes/70-test_sslvertol.t | 0 .../test/recipes/70-test_tls13alerts.t | 0 .../test/recipes/70-test_tls13cookie.t | 0 .../test/recipes/70-test_tls13downgrade.t | 0 .../test/recipes/70-test_tls13hrr.t | 0 .../test/recipes/70-test_tls13kexmodes.t | 0 .../test/recipes/70-test_tls13messages.t | 0 .../test/recipes/70-test_tls13psk.t | 0 .../test/recipes/70-test_tlsextms.t | 0 .../test/recipes/70-test_verify_extra.t | 0 .../test/recipes/70-test_wpacket.t | 0 .../test/recipes/80-test_ca.t | 0 .../test/recipes/80-test_cipherbytes.t | 0 .../test/recipes/80-test_cipherlist.t | 0 .../test/recipes/80-test_ciphername.t | 0 .../test/recipes/80-test_cms.t | 0 .../80-test_cms_data/bad_signtime_attr.cms | Bin .../80-test_cms_data/ct_multiple_attr.cms | Bin .../recipes/80-test_cms_data/no_ct_attr.cms | Bin .../recipes/80-test_cms_data/no_md_attr.cms | Bin .../test/recipes/80-test_cmsapi.t | 0 .../test/recipes/80-test_ct.t | 0 .../test/recipes/80-test_dane.t | 0 .../test/recipes/80-test_dtls.t | 0 .../test/recipes/80-test_dtls_mtu.t | 0 .../test/recipes/80-test_dtlsv1listen.t | 0 .../test/recipes/80-test_ocsp.t | 0 .../test/recipes/80-test_ocsp_data/cert.pem | 0 .../test/recipes/80-test_ocsp_data/key.pem | 0 .../test/recipes/80-test_pkcs12.t | 0 .../test/recipes/80-test_policy_tree.t | 0 .../80-test_policy_tree_data/large_leaf.pem | 0 .../large_policy_tree.pem | 0 .../80-test_policy_tree_data/small_leaf.pem | 0 .../small_policy_tree.pem | 0 .../test/recipes/80-test_ssl_new.t | 0 .../test/recipes/80-test_ssl_old.t | 0 .../test/recipes/80-test_ssl_test_ctx.t | 0 .../test/recipes/80-test_sslcorrupt.t | 0 .../test/recipes/80-test_tsa.t | 0 .../test/recipes/80-test_x509aux.t | 0 .../test/recipes/90-test_asn1_time.t | 0 .../test/recipes/90-test_async.t | 0 .../test/recipes/90-test_bio_enc.t | 0 .../test/recipes/90-test_bio_memleak.t | 0 .../test/recipes/90-test_constant_time.t | 0 .../test/recipes/90-test_fatalerr.t | 0 .../test/recipes/90-test_gmdiff.t | 0 .../test/recipes/90-test_gost.t | 0 .../test/recipes/90-test_gost_data/gost.conf | 0 .../90-test_gost_data/server-cert2001.pem | 0 .../90-test_gost_data/server-cert2012.pem | 0 .../90-test_gost_data/server-key2001.pem | 0 .../90-test_gost_data/server-key2012.pem | 0 .../test/recipes/90-test_ige.t | 0 .../test/recipes/90-test_includes.t | 0 .../conf-includes/includes1.cnf | 0 .../conf-includes/includes2.cnf | 0 .../90-test_includes_data/includes-broken.cnf | 0 .../90-test_includes_data/includes-eq-ws.cnf | 0 .../90-test_includes_data/includes-eq.cnf | 0 .../90-test_includes_data/includes-file.cnf | 0 .../90-test_includes_data/includes.cnf | 0 .../vms-includes-file.cnf | 0 .../90-test_includes_data/vms-includes.cnf | 0 .../test/recipes/90-test_memleak.t | 0 .../test/recipes/90-test_overhead.t | 0 .../test/recipes/90-test_secmem.t | 0 .../test/recipes/90-test_shlibload.t | 0 .../test/recipes/90-test_srp.t | 0 .../test/recipes/90-test_sslapi.t | 0 .../recipes/90-test_sslapi_data/passwd.txt | 0 .../test/recipes/90-test_sslbuffers.t | 0 .../test/recipes/90-test_store.t | 0 .../test/recipes/90-test_store_data/ca.cnf | 0 .../test/recipes/90-test_store_data/user.cnf | 0 .../test/recipes/90-test_sysdefault.t | 0 .../test/recipes/90-test_threads.t | 0 .../test/recipes/90-test_time_offset.t | 0 .../test/recipes/90-test_tls13ccs.t | 0 .../test/recipes/90-test_tls13encryption.t | 0 .../test/recipes/90-test_tls13secrets.t | 0 .../test/recipes/90-test_v3name.t | 0 .../test/recipes/95-test_external_boringssl.t | 0 .../test/recipes/95-test_external_krb5.t | 0 .../95-test_external_krb5_data/krb5.sh | 0 .../test/recipes/95-test_external_pyca.t | 0 .../cryptography.sh | 0 .../test/recipes/99-test_ecstress.t | 0 .../test/recipes/99-test_fuzz.t | 0 .../test/recipes/ocsp-response.der | Bin .../test/recipes/tconversion.pl | 0 .../test/recordlentest.c | 0 .../test/rsa_complex.c | 0 .../test/rsa_mp_test.c | 0 .../test/rsa_test.c | 0 .../test/run_tests.pl | 0 .../test/sanitytest.c | 0 .../test/secmemtest.c | 0 .../test/serverinfo.pem | 0 .../test/serverinfo2.pem | 0 .../test/servername_test.c | 0 .../test/session.pem | 0 .../test/shibboleth.pfx | Bin .../test/shlibloadtest.c | 0 .../test/siphash_internal_test.c | 0 .../test/sm2_internal_test.c | 0 .../test/sm4_internal_test.c | 0 .../test/smcont.txt | 0 .../test/smime-certs/badrsa.pem | 0 .../test/smime-certs/ca.cnf | 0 .../test/smime-certs/mksmime-certs.sh | 0 .../test/smime-certs/smdh.pem | 0 .../test/smime-certs/smdsa1.pem | 0 .../test/smime-certs/smdsa2.pem | 0 .../test/smime-certs/smdsa3.pem | 0 .../test/smime-certs/smdsap.pem | 0 .../test/smime-certs/smec1.pem | 0 .../test/smime-certs/smec2.pem | 0 .../test/smime-certs/smec3.pem | 0 .../test/smime-certs/smroot.pem | 0 .../test/smime-certs/smrsa1.pem | 0 .../test/smime-certs/smrsa2.pem | 0 .../test/smime-certs/smrsa3.pem | 0 .../test/srptest.c | 0 .../test/ssl-tests/01-simple.conf | 0 .../test/ssl-tests/01-simple.conf.in | 0 .../test/ssl-tests/02-protocol-version.conf | 0 .../ssl-tests/02-protocol-version.conf.in | 0 .../test/ssl-tests/03-custom_verify.conf | 0 .../test/ssl-tests/03-custom_verify.conf.in | 0 .../test/ssl-tests/04-client_auth.conf | 0 .../test/ssl-tests/04-client_auth.conf.in | 0 .../test/ssl-tests/05-sni.conf | 0 .../test/ssl-tests/05-sni.conf.in | 0 .../test/ssl-tests/06-sni-ticket.conf | 0 .../test/ssl-tests/06-sni-ticket.conf.in | 0 .../ssl-tests/07-dtls-protocol-version.conf | 0 .../07-dtls-protocol-version.conf.in | 0 .../test/ssl-tests/08-npn.conf | 0 .../test/ssl-tests/08-npn.conf.in | 0 .../test/ssl-tests/09-alpn.conf | 0 .../test/ssl-tests/09-alpn.conf.in | 0 .../test/ssl-tests/10-resumption.conf | 0 .../test/ssl-tests/10-resumption.conf.in | 0 .../test/ssl-tests/11-dtls_resumption.conf | 0 .../test/ssl-tests/11-dtls_resumption.conf.in | 0 .../test/ssl-tests/12-ct.conf | 0 .../test/ssl-tests/12-ct.conf.in | 0 .../test/ssl-tests/13-fragmentation.conf | 0 .../test/ssl-tests/13-fragmentation.conf.in | 0 .../test/ssl-tests/14-curves.conf | 0 .../test/ssl-tests/14-curves.conf.in | 0 .../test/ssl-tests/15-certstatus.conf | 0 .../test/ssl-tests/15-certstatus.conf.in | 0 .../test/ssl-tests/16-dtls-certstatus.conf | 0 .../test/ssl-tests/16-dtls-certstatus.conf.in | 0 .../test/ssl-tests/17-renegotiate.conf | 0 .../test/ssl-tests/17-renegotiate.conf.in | 0 .../test/ssl-tests/18-dtls-renegotiate.conf | 0 .../ssl-tests/18-dtls-renegotiate.conf.in | 0 .../test/ssl-tests/19-mac-then-encrypt.conf | 0 .../ssl-tests/19-mac-then-encrypt.conf.in | 0 .../test/ssl-tests/20-cert-select.conf | 0 .../test/ssl-tests/20-cert-select.conf.in | 0 .../test/ssl-tests/21-key-update.conf | 0 .../test/ssl-tests/21-key-update.conf.in | 0 .../test/ssl-tests/22-compression.conf | 0 .../test/ssl-tests/22-compression.conf.in | 0 .../test/ssl-tests/23-srp.conf | 0 .../test/ssl-tests/23-srp.conf.in | 0 .../test/ssl-tests/24-padding.conf | 0 .../test/ssl-tests/24-padding.conf.in | 0 .../test/ssl-tests/25-cipher.conf | 0 .../test/ssl-tests/25-cipher.conf.in | 0 .../test/ssl-tests/26-tls13_client_auth.conf | 0 .../ssl-tests/26-tls13_client_auth.conf.in | 0 .../test/ssl-tests/27-ticket-appdata.conf | 0 .../test/ssl-tests/27-ticket-appdata.conf.in | 0 .../test/ssl-tests/28-seclevel.conf | 0 .../test/ssl-tests/28-seclevel.conf.in | 0 .../ssl-tests/29-dtls-sctp-label-bug.conf | 0 .../ssl-tests/29-dtls-sctp-label-bug.conf.in | 0 .../test/ssl-tests/30-supported-groups.conf | 0 .../ssl-tests/30-supported-groups.conf.in | 0 .../test/ssl-tests/protocol_version.pm | 0 .../test/ssl-tests/ssltests_base.pm | 0 .../test/ssl_cert_table_internal_test.c | 0 .../test/ssl_ctx_test.c | 0 .../test/ssl_test.c | 0 .../test/ssl_test.tmpl | 0 .../test/ssl_test_ctx.c | 0 .../test/ssl_test_ctx.h | 0 .../test/ssl_test_ctx_test.c | 0 .../test/ssl_test_ctx_test.conf | 0 .../test/sslapitest.c | 0 .../test/sslbuffertest.c | 0 .../test/sslcorrupttest.c | 0 .../test/ssltest_old.c | 0 .../test/ssltestlib.c | 0 .../test/ssltestlib.h | 0 .../test/stack_test.c | 0 .../test/sysdefault.cnf | 0 .../test/sysdefaulttest.c | 0 .../test/test.cnf | 0 .../test/test_test.c | 0 .../test/testcrl.pem | 0 .../test/testdsa.pem | 0 .../test/testdsapub.pem | 0 .../test/testec-p256.pem | 0 .../test/testecpub-p256.pem | 0 .../test/tested25519.pem | 0 .../test/tested25519pub.pem | 0 .../test/tested448.pem | 0 .../test/tested448pub.pem | 0 .../test/testp7.pem | 0 .../test/testreq2.pem | 0 .../test/testrsa.pem | 0 .../test/testrsa_withattrs.der | Bin .../test/testrsa_withattrs.pem | 0 .../test/testrsapub.pem | 0 .../test/testsid.pem | 0 .../test/testutil.h | 0 .../test/testutil/basic_output.c | 0 .../test/testutil/cb.c | 0 .../test/testutil/driver.c | 0 .../test/testutil/format_output.c | 0 .../test/testutil/main.c | 0 .../test/testutil/output.h | 0 .../test/testutil/output_helpers.c | 0 .../test/testutil/random.c | 0 .../test/testutil/stanza.c | 0 .../test/testutil/tap_bio.c | 0 .../test/testutil/test_cleanup.c | 0 .../test/testutil/tests.c | 0 .../test/testutil/testutil_init.c | 0 .../test/testutil/tu_local.h | 0 .../test/testx509.pem | 0 .../test/threadstest.c | 0 .../test/time_offset_test.c | 0 .../test/tls13ccstest.c | 0 .../test/tls13encryptiontest.c | 0 .../test/tls13secretstest.c | 0 .../test/uitest.c | 0 .../test/v3-cert1.pem | 0 .../test/v3-cert2.pem | 0 .../test/v3ext.c | 0 .../test/v3nametest.c | 0 .../test/verify_extra_test.c | 0 .../test/versions.c | 0 .../test/wpackettest.c | 0 .../test/x509_check_cert_pkey_test.c | 0 .../test/x509_dup_cert_test.c | 0 .../test/x509_internal_test.c | 0 .../test/x509_time_test.c | 0 .../test/x509aux.c | 0 .../tools/build.info | 0 .../tools/c_rehash.in | 0 .../util/add-depends.pl | 0 .../util/build.info | 0 .../util/cavs-to-evptest.pl | 0 .../util/check-malloc-errs | 0 .../util/ck_errf.pl | 0 .../util/copy.pl | 0 .../util/dofile.pl | 0 .../util/echo.pl | 0 .../util/find-doc-nits | 0 .../util/find-unused-errs | 0 .../util/fix-includes | 0 .../util/fix-includes.sed | 0 .../util/indent.pro | 0 .../util/libcrypto.num | 0 .../util/libssl.num | 0 .../util/local_shlib.com.in | 0 .../util/mkbuildinf.pl | 0 .../util/mkdef.pl | 0 .../util/mkdir-p.pl | 0 .../util/mkerr.pl | 0 .../util/mkrc.pl | 0 .../util/openssl-format-source | 0 .../util/openssl-update-copyright | 0 .../util/opensslwrap.sh | 0 .../util/perl/OpenSSL/Glob.pm | 0 .../util/perl/OpenSSL/Test.pm | 0 .../util/perl/OpenSSL/Test/Simple.pm | 0 .../util/perl/OpenSSL/Test/Utils.pm | 0 .../util/perl/OpenSSL/Util/Pod.pm | 0 .../util/perl/OpenSSL/copyright.pm | 0 .../util/perl/TLSProxy/Alert.pm | 0 .../util/perl/TLSProxy/Certificate.pm | 0 .../util/perl/TLSProxy/CertificateRequest.pm | 0 .../util/perl/TLSProxy/CertificateVerify.pm | 0 .../util/perl/TLSProxy/ClientHello.pm | 0 .../util/perl/TLSProxy/EncryptedExtensions.pm | 0 .../util/perl/TLSProxy/Message.pm | 0 .../util/perl/TLSProxy/NewSessionTicket.pm | 0 .../util/perl/TLSProxy/Proxy.pm | 0 .../util/perl/TLSProxy/Record.pm | 0 .../util/perl/TLSProxy/ServerHello.pm | 0 .../util/perl/TLSProxy/ServerKeyExchange.pm | 0 .../util/perl/checkhandshake.pm | 0 .../util/perl/with_fallback.pm | 0 .../util/private.num | 0 .../util/process_docs.pl | 0 .../util/shlib_wrap.sh.in | 0 .../util/su-filter.pl | 0 .../util/unlocal_shlib.com.in | 0 3106 files changed, 112 insertions(+), 39 deletions(-) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ACKNOWLEDGEMENTS (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/AUTHORS (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/CHANGES (99%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/CONTRIBUTING (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/00-base-templates.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/10-main.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/15-android.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/15-ios.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/50-djgpp.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/50-haiku.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/50-masm.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/50-win-onecore.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/INTERNALS.Configure (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/README.design (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/common.tmpl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/common0.tmpl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/descrip.mms.tmpl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/shared-info.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/unix-Makefile.tmpl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/unix-checker.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/windows-checker.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configurations/windows-makefile.tmpl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/Configure (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/FAQ (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/INSTALL (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/LICENSE (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NEWS (99%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NOTES.ANDROID (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NOTES.DJGPP (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NOTES.PERL (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NOTES.UNIX (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NOTES.VMS (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/NOTES.WIN (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/README (98%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/README.ENGINE (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/README.FIPS (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/VMSify-conf.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/engine.opt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/msg_install.com (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/msg_staging.com (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/openssl_ivp.com.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/openssl_shutdown.com.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/openssl_startup.com.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/openssl_utils.com.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/test-includes.com (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/VMS/translatesyms.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/CA.pl.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/app_rand.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/apps.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/apps.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/asn1pars.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/bf_prefix.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ca-cert.srl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ca-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ca-req.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ca.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ciphers.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/client.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/cms.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/crl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/crl2p7.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ct_log_list.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/demoSRP/srp_verifier.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/demoSRP/srp_verifier.txt.attr (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dh1024.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dh2048.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dh4096.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dhparam.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsa-ca.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsa-pca.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsa1024.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsa512.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsap.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/dsaparam.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ecparam.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/engine.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/errstr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/gendsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/genpkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/genrsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/nseq.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ocsp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/openssl-vms.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/openssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/openssl.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/opt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/passwd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pca-cert.srl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pca-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pca-req.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pkcs12.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pkcs7.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pkcs8.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pkeyparam.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/pkeyutl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/prime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/privkey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/progs.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/rand.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/rehash.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/req.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/req.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/rsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/rsa8192.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/rsautl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s1024key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s1024req.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s512-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s512-req.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s_apps.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s_cb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s_client.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s_server.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s_socket.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/s_time.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/server.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/server.srl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/server2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/sess_id.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/smime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/speed.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/spkac.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/srp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/storeutl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/testCA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/testdsa.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/testrsa.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/timeouts.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/ts.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/tsget.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/verify.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/version.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/vms_decc_argv.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/vms_decc_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/vms_term_sock.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/vms_term_sock.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/win32_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/apps/x509.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/config (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/config.com (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/LPdir_nyi.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/LPdir_unix.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/LPdir_vms.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/LPdir_win.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/LPdir_win32.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/LPdir_wince.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_cbc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_cfb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_core.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_ige.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_misc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_ofb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_wrap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/aes_x86core.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-ia64.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-mips.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aes-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesfx-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesni-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesni-sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesni-sha256-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesni-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesni-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesp8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/aesv8-armx.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/bsaes-armv7.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/vpaes-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/vpaes-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/vpaes-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/asm/vpaes-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aes/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/alphacpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aria/aria.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/aria/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/arm64cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/arm_arch.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/armcap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/armv4cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_bitstr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_d2i_fp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_digest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_dup.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_gentm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_i2d_fp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_int.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_mbstr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_object.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_octet.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_print.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_strex.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_strnid.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_time.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_type.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_utctm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_utf8.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/a_verify.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/ameth_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_gen.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_item_list.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_item_list.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn1_par.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn_mime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn_moid.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn_mstbl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/asn_pack.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/bio_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/bio_ndef.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/charmap.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/charmap.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/d2i_pr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/d2i_pu.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/evp_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/f_int.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/f_string.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/i2d_pr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/i2d_pu.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/n_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/nsseq.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/p5_pbe.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/p5_pbev2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/p5_scrypt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/p8_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/standard_methods.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/t_bitst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/t_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/t_spki.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_dec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_fre.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_new.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_scn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_typ.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tasn_utl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/tbl_standard.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_algor.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_bignum.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_info.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_int64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_long.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_sig.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_spki.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/asn1/x_val.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/arch/async_null.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/arch/async_null.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/arch/async_posix.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/arch/async_posix.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/arch/async_win.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/arch/async_win.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/async.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/async_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/async_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/async_wait.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/async/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/asm/bf-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_cfb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_ofb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_pi.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/bf_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bf/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/b_addr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/b_dump.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/b_print.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/b_sock.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/b_sock2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bf_buff.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bf_lbuf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bf_nbio.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bf_null.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bio_cb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bio_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bio_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bio_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bio_meth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_acpt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_bio.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_conn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_dgram.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_fd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_file.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_log.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_mem.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_null.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/bss_sock.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bio/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/blake2_impl.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/blake2_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/blake2b.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/blake2s.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/m_blake2b.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/blake2/m_blake2s.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/README.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/alpha-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/armv4-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/armv4-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/armv8-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/bn-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/bn-c64xplus.asm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/c64xplus-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/co-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/ia64-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/ia64.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/mips-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/mips.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/parisc-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/ppc-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/ppc64-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/rsaz-avx2.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/rsaz-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/s390x-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/s390x-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/s390x.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/sparct4-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/sparcv8.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/sparcv8plus.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/sparcv9-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/sparcv9-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/sparcv9a-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/via-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/vis3-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/x86-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/x86-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/x86_64-gcc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/x86_64-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/x86_64-mont.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/asm/x86_64-mont5.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_add.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_asm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_blind.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_const.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_ctx.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_depr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_dh.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_div.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_exp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_exp2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_gcd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_gf2m.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_intern.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_kron.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_mod.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_mont.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_mpi.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_mul.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_nist.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_prime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_prime.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_prime.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_print.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_rand.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_recp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_shift.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_sqr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_sqrt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_srp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_word.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/bn_x931p.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/rsaz_exp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/bn/rsaz_exp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/buffer/buf_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/buffer/buffer.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/buffer/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/c64xpluscpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/asm/cmll-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/asm/cmll-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/asm/cmllt4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/camellia.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_cbc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_cfb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_ctr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_misc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/camellia/cmll_ofb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/asm/cast-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/c_cfb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/c_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/c_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/c_ofb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/c_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/cast_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cast/cast_s.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/asm/chacha-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/chacha/chacha_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cmac/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cmac/cm_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cmac/cm_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cmac/cmac.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_att.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_cd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_dd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_env.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_ess.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_io.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_kari.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_pwri.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_sd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cms/cms_smime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/comp/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/comp/c_zlib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/comp/comp_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/comp/comp_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/comp/comp_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_api.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_def.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_def.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_mall.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_mod.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_sap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/conf_ssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/conf/keysets.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cpt_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cryptlib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_b64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_log.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_oct.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_policy.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_sct.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_sct_ctx.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_vfy.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ct/ct_x509v3.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ctype.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/cversion.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/asm/crypt586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/asm/des-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/asm/des_enc.m4 (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/asm/desboth.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/asm/dest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/cbc_cksm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/cbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/cfb64ede.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/cfb64enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/cfb_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/des_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/des_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/ecb3_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/ecb_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/fcrypt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/fcrypt_b.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/ncbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/ofb64ede.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/ofb64enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/ofb_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/pcbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/qud_cksm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/rand_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/set_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/spr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/str2key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/des/xcbc_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh1024.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh192.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh2048.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh4096.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh512.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_check.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_depr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_gen.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_kdf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_meth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_rfc5114.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dh/dh_rfc7919.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dllmain.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_depr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_gen.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_meth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dsa/dsa_vrf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_dl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_dlfcn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_openssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_vms.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/dso/dso_win32.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ebcdic.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/ecp_nistz256-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/ecp_nistz256-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/ecp_nistz256-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/ecp_nistz256-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/ecp_nistz256-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/ecp_nistz256-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/x25519-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/asm/x25519-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve25519.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/arch_32/arch_intrinsics.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/arch_32/f_impl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/arch_32/f_impl.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/curve448.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/curve448_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/curve448_tables.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/curve448utils.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/ed448.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/eddsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/f_generic.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/field.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/point_448.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/scalar.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/curve448/word.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec2_oct.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec2_smpl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_check.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_curve.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_cvt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_kmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_mult.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_oct.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ec_print.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecdh_kdf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecdh_ossl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecdsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecdsa_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecdsa_vrf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/eck_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_mont.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nist.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nistp224.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nistp256.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nistp521.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nistputil.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nistz256.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_nistz256_table.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_oct.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecp_smpl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ec/ecx_meth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_all.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_cnf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_ctrl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_devcrypto.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_dyn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_fat.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_list.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_openssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_rdrand.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/eng_table.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_asnmth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_cipher.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_dh.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_digest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_dsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_eckey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_pkmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_rand.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/engine/tb_rsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/err_all.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/err_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/openssl.ec (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/err/openssl.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/bio_b64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/bio_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/bio_md.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/bio_ok.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/c_allc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/c_alld.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/cmeth_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/digest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_aes.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_aes_cbc_hmac_sha1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_aes_cbc_hmac_sha256.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_aria.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_bf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_camellia.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_cast.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_chacha20_poly1305.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_des.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_des3.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_idea.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_null.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_old.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_rc2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_rc4.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_rc4_hmac_md5.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_rc5.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_seed.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_sm4.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/e_xcbc_d.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/encode.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_cnf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_pbe.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/evp_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_md2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_md4.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_md5.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_md5_sha1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_mdc2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_null.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_ripemd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_sha1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_sha3.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_sigver.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/m_wp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/names.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p5_crpt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p5_crpt2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_dec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_open.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_seal.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/p_verify.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/pbe_scrypt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/pmeth_fn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/pmeth_gn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/evp/pmeth_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ex_data.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/getenv.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/hmac/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/hmac/hm_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/hmac/hm_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/hmac/hmac.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/hmac/hmac_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ia64cpuid.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/i_cbc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/i_cfb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/i_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/i_ofb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/i_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/idea/idea_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/kdf/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/kdf/hkdf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/kdf/kdf_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/kdf/scrypt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/kdf/tls1_prf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/lhash/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/lhash/lh_stats.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/lhash/lhash.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/lhash/lhash_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md2/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md2/md2_dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md2/md2_one.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md4/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md4/md4_dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md4/md4_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md4/md4_one.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/asm/md5-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/asm/md5-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/asm/md5-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/md5_dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/md5_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/md5/md5_one.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mdc2/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mdc2/mdc2_one.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mdc2/mdc2dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mem.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mem_clr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mem_dbg.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mem_sec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/mips_arch.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/aesni-gcm-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-alpha.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghash-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghashp8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/asm/ghashv8-armx.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/cbc128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/ccm128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/cfb128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/ctr128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/cts128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/gcm128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/modes_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/ocb128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/ofb128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/wrap128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/modes/xts128.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/o_dir.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/o_fips.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/o_fopen.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/o_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/o_str.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/o_time.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/o_names.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_dat.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_dat.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_dat.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_mac.num (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_xref.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_xref.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/obj_xref.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/objects.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/objects.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/objects/objxref.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_asn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_cl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_ext.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_ht.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_srv.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/ocsp_vfy.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ocsp/v3_ocsp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pariscid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_all.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_info.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_oth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_pk8.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_pkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_x509.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pem_xaux.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pem/pvkfmt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/arm-xlate.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/cbc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/ppc-xlate.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/sparcv9_modes.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/x86_64-xlate.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/x86asm.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/x86gas.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/x86masm.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/perlasm/x86nasm.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_add.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_asn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_attr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_crpt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_crt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_decr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_key.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_kiss.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_mutl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_npas.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_p8d.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_p8e.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_sbag.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/p12_utl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs12/pk12err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/bio_pk7.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pk7_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pk7_attr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pk7_doit.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pk7_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pk7_mime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pk7_smime.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/pkcs7/pkcs7err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-mips.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-ppcfp.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/asm/poly1305-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/poly1305.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/poly1305_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/poly1305_base2_44.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/poly1305_ieee754.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/poly1305_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/poly1305/poly1305_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ppc_arch.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ppccap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ppccpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/drbg_ctr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/drbg_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_egd.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_unix.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_vms.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/rand_win.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rand/randfile.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/rc2_cbc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/rc2_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/rc2_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/rc2_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/rc2cfb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc2/rc2ofb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/asm/rc4-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/asm/rc4-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/asm/rc4-md5-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/asm/rc4-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/asm/rc4-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/asm/rc4-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/rc4_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/rc4_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc4/rc4_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/asm/rc5-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/rc5_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/rc5_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/rc5_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/rc5_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/rc5cfb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rc5/rc5ofb64.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ripemd/asm/rmd-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ripemd/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ripemd/rmd_dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ripemd/rmd_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ripemd/rmd_one.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ripemd/rmdconst.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_chk.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_crpt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_depr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_gen.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_meth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_mp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_none.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_oaep.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_pk1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_pss.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_saos.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_ssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_x931.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/rsa/rsa_x931g.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/s390x_arch.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/s390xcap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/s390xcpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/seed.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/seed_cbc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/seed_cfb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/seed_ecb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/seed_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/seed/seed_ofb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-avx2.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-avx512.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-avx512vl.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-c64x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-mmx.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/keccak1600p8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-alpha.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-armv4-large.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-mips.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-sparcv9a.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-thumb.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha256-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha256-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha256-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha256-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-586.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-armv4.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-armv8.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-mips.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-parisc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-s390x.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/asm/sha512p8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/keccak1600.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/sha1_one.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/sha1dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/sha256.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/sha512.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sha/sha_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/siphash/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/siphash/siphash.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/siphash/siphash_ameth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/siphash/siphash_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/siphash/siphash_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm2/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm2/sm2_crypt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm2/sm2_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm2/sm2_pmeth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm2/sm2_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm3/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm3/m_sm3.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm3/sm3.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm3/sm3_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm4/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sm4/sm4.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sparc_arch.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sparccpuid.S (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/sparcv9cap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/srp/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/srp/srp_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/srp/srp_vfy.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/stack/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/stack/stack.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/loader_file.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/store_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/store_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/store_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/store_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/store_register.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/store/store_strings.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/threads_none.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/threads_pthread.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/threads_win.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_conf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_req_print.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_req_utils.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_rsp_print.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_rsp_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_rsp_utils.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_rsp_verify.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ts/ts_verify_ctx.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/txt_db/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/txt_db/txt_db.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/ui_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/ui_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/ui_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/ui_null.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/ui_openssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/ui/ui_util.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/uid.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/vms_rms.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/whrlpool/asm/wp-mmx.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/whrlpool/asm/wp-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/whrlpool/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/whrlpool/wp_block.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/whrlpool/wp_dgst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/whrlpool/wp_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/by_dir.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/by_file.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/t_crl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/t_req.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/t_x509.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_att.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_cmp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_d2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_def.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_ext.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_lu.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_meth.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_obj.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_r2x.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_req.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_set.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_trs.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_txt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_v3.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_vfy.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509_vpm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509cset.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509name.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509rset.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509spki.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x509type.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_all.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_attrib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_crl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_exten.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_name.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_pubkey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_req.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_x509.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509/x_x509a.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/ext_dat.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_cache.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_data.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_map.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_node.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/pcy_tree.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/standard_exts.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_addr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_admis.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_admis.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_akey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_akeya.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_alt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_asid.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_bcons.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_bitst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_conf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_cpols.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_crld.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_enum.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_extku.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_genn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_ia5.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_info.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_int.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_ncons.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_pci.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_pcia.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_pcons.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_pku.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_pmaps.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_prn.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_purp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_skey.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_sxnet.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_tlsf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3_utl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x509v3/v3err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x86_64cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/crypto/x86cpuid.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/Makefile (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/accept.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/client-arg.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/client-conf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/cmod.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/connect.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/descrip.mms (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/intca.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/saccept.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/sconnect.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/server-arg.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/server-cmod.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/server-conf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/server-ec.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/server.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/shared.opt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/bio/static.opt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/apps.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/ckey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/intkey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/mkacerts.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/mkxcerts.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/rootkey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/skey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/apps/skey2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/ca.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/mkcerts.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/ocspquery.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/certs/ocsprun.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cacert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cakey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_comp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_ddec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_dec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_denc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_sign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_sign2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_uncomp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/cms_ver.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/comp.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/encr.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/sign.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/signer.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/cms/signer2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/engines/e_chil.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/evp/Makefile (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/evp/aesccm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/evp/aesgcm.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/pkcs12/pkread.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/pkcs12/pkwrite.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/cacert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/cakey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/encr.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/sign.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/signer.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/signer2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/smdec.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/smenc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/smsign.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/smsign2.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/demos/smime/smver.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/HOWTO/certificates.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/HOWTO/keys.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/dir-locals.example.el (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/fingerprints.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/CA.pl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/asn1parse.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/ca.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/ciphers.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/cms.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/crl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/crl2pkcs7.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/dgst.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/dhparam.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/dsa.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/dsaparam.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/ec.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/ecparam.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/enc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/engine.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/errstr.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/gendsa.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/genpkey.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/genrsa.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/list.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/nseq.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/ocsp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/openssl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/passwd.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/pkcs12.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/pkcs7.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/pkcs8.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/pkey.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/pkeyparam.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/pkeyutl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/prime.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/rand.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/rehash.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/req.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/rsa.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/rsautl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/s_client.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/s_server.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/s_time.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/sess_id.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/smime.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/speed.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/spkac.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/srp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/storeutl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/ts.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/tsget.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/verify.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/version.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man1/x509.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ADMISSIONS.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_INTEGER_get_int64.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_ITEM_lookup.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_OBJECT_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_STRING_TABLE_add.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_STRING_length.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_STRING_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_STRING_print_ex.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_TIME_set.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_TYPE_get.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASN1_generate_nconf.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASYNC_WAIT_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ASYNC_start_job.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BF_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_ADDR.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_ADDRINFO.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_connect.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_f_base64.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_f_buffer.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_f_cipher.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_f_md.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_f_null.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_f_ssl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_find_type.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_get_data.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_new_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_parse_hostserv.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_printf.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_push.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_read.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_accept.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_bio.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_connect.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_fd.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_file.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_mem.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_null.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_s_socket.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_set_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BIO_should_retry.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_BLINDING_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_CTX_start.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_add.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_add_word.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_bn2bin.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_cmp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_copy.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_generate_prime.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_mod_inverse.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_mod_mul_montgomery.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_mod_mul_reciprocal.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_num_bytes.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_rand.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_security_bits.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_set_bit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_swap.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BN_zero.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/BUF_MEM_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_add0_cert.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_add1_recipient_cert.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_add1_signer.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_compress.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_final.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_get0_RecipientInfos.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_get0_SignerInfos.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_get0_type.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_get1_ReceiptRequest.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_sign_receipt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_uncompress.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_verify.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CMS_verify_receipt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CONF_modules_free.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CONF_modules_load_file.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CRYPTO_THREAD_run_once.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CRYPTO_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CRYPTO_memcmp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CTLOG_STORE_get0_log_by_id.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CTLOG_STORE_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CTLOG_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/CT_POLICY_EVAL_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DEFINE_STACK_OF.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DES_random_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_generate_parameters.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_get0_pqg.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_get_1024_160.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_new_by_nid.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_set_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DH_size.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_do_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_dup_DH.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_generate_parameters.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_get0_pqg.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_set_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DSA_size.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DTLS_get_data_mtu.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DTLS_set_timer_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/DTLSv1_listen.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ECDSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ECPKParameters_print.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_GFp_simple_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_GROUP_copy.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_GROUP_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_KEY_get_enc_flags.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_KEY_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_POINT_add.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EC_POINT_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ENGINE_add.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_GET_LIB.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_clear_error.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_error_string.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_get_error.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_load_crypto_strings.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_load_strings.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_print_errors.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_put_error.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_remove_state.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/ERR_set_mark.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_BytesToKey.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_CIPHER_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_DigestInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_DigestSignInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_DigestVerifyInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_EncodeInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_EncryptInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_MD_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_OpenInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_ASN1_METHOD.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_asn1_get_count.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_cmp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_derive.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_get_default_digest_nid.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_keygen.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_meth_get_count.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_print_private.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_set1_RSA.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_size.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_verify.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_PKEY_verify_recover.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_SealInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_SignInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_VerifyInit.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_aes.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_aria.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_bf_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_blake2b512.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_camellia.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_cast5_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_chacha20.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_des.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_desx_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_idea_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_md2.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_md4.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_md5.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_mdc2.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_rc2_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_rc4.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_rc5_32_12_16_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_ripemd160.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_seed_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_sha1.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_sha224.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_sha3_224.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_sm3.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_sm4_cbc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/EVP_whirlpool.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/HMAC.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/MD5.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/MDC2_Init.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OBJ_nid2obj.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OCSP_REQUEST_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OCSP_cert_to_id.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OCSP_request_add1_nonce.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OCSP_resp_find_status.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OCSP_response_status.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OCSP_sendreq_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_Applink.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_LH_COMPFUNC.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_LH_stats.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_VERSION_NUMBER.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_config.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_fork_prepare.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_ia32cap.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_init_crypto.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_init_ssl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_instrument_bus.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_load_builtin_modules.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_malloc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OPENSSL_secure_malloc.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OSSL_STORE_INFO.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OSSL_STORE_LOADER.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OSSL_STORE_SEARCH.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OSSL_STORE_expect.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OSSL_STORE_open.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/OpenSSL_add_all_algorithms.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_bytes_read_bio.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_read.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_read_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_read_bio_PrivateKey.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_read_bio_ex.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_write_bio_CMS_stream.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PEM_write_bio_PKCS7_stream.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS12_create.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS12_newpass.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS12_parse.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS5_PBKDF2_HMAC.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS7_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS7_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS7_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS7_sign_add_signer.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/PKCS7_verify.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_DRBG_generate.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_DRBG_get0_master.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_DRBG_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_DRBG_reseed.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_DRBG_set_callbacks.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_DRBG_set_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_add.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_bytes.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_cleanup.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_egd.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_load_file.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RAND_set_rand_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RC4_set_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RIPEMD160_Init.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_blinding_on.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_check_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_get0_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_padding_add_PKCS1_type_1.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_print.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_private_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_public_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_set_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/RSA_size.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SCT_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SCT_print.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SCT_validate.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SHA256_Init.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SMIME_read_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SMIME_read_PKCS7.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SMIME_write_CMS.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SMIME_write_PKCS7.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CIPHER_get_name.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_COMP_add_compression_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CONF_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CONF_CTX_set1_prefix.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CONF_CTX_set_flags.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CONF_cmd.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CONF_cmd_argv.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_add1_chain_cert.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_add_extra_chain_cert.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_add_session.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_config.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_dane_enable.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_flush_sessions.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_free.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_get0_param.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_get_verify_mode.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_has_client_custom_ext.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_load_verify_locations.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_sess_number.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_sess_set_cache_size.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_sess_set_get_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_sessions.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set0_CA_list.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set1_curves.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set1_sigalgs.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set1_verify_cert_store.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_alpn_select_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_cert_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_cert_store.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_cert_verify_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_cipher_list.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_client_cert_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_client_hello_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_ct_validation_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_ctlog_list_file.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_default_passwd_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_generate_session_id.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_info_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_keylog_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_max_cert_list.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_min_proto_version.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_mode.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_msg_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_num_tickets.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_options.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_psk_client_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_quiet_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_read_ahead.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_record_padding_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_security_level.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_session_cache_mode.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_session_id_context.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_session_ticket_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_split_send_fragment.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_ssl_version.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_timeout.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_tlsext_status_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_tmp_dh_callback.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_set_verify.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_use_certificate.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_use_psk_identity_hint.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_CTX_use_serverinfo.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_free.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get0_cipher.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get0_hostname.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get0_id_context.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get0_peer.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get_compress_id.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get_protocol_version.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_get_time.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_has_ticket.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_is_resumable.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_print.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_SESSION_set1_id.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_accept.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_alert_type_string.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_alloc_buffers.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_check_chain.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_clear.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_connect.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_do_handshake.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_export_keying_material.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_extension_supported.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_free.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get0_peer_scts.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_SSL_CTX.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_all_async_fds.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_ciphers.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_client_random.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_current_cipher.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_default_timeout.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_error.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_extms_support.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_fd.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_peer_cert_chain.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_peer_certificate.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_peer_signature_nid.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_peer_tmp_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_psk_identity.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_rbio.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_session.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_shared_sigalgs.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_verify_result.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_get_version.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_in_init.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_key_update.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_library_init.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_load_client_CA_file.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_pending.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_read.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_read_early_data.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_rstate_string.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_session_reused.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set1_host.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set_bio.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set_connect_state.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set_fd.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set_session.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_set_verify_result.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_state_string.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_want.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/SSL_write.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/UI_STRING.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/UI_UTIL_read_pw.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/UI_create_method.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/UI_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509V3_get_d2i.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_ALGOR_dup.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_CRL_get0_by_serial.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_EXTENSION_set_object.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_LOOKUP.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_LOOKUP_hash_dir.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_LOOKUP_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_NAME_ENTRY_get_object.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_NAME_add_entry_by_txt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_NAME_get0_der.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_NAME_get_index_by_NID.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_NAME_print_ex.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_PUBKEY_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_SIG_get0.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_CTX_get_error.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_CTX_set_verify_cb.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_add_cert.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_get0_param.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_STORE_set_verify_cb_func.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_VERIFY_PARAM_set_flags.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_check_ca.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_check_host.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_check_issued.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_check_private_key.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_check_purpose.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_cmp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_cmp_time.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_digest.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_dup.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get0_notBefore.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get0_signature.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get0_uids.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get_extension_flags.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get_pubkey.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get_serialNumber.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get_subject_name.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_get_version.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_new.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_sign.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509_verify_cert.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/X509v3_get_ext_by_NID.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/d2i_DHparams.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/d2i_PKCS8PrivateKey_bio.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/d2i_PrivateKey.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/d2i_SSL_SESSION.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/d2i_X509.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/i2d_CMS_bio_stream.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/i2d_PKCS7_bio_stream.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/i2d_re_X509_tbs.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man3/o2i_SCT_LIST.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man5/config.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man5/x509v3_config.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/Ed25519.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/RAND.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/RAND_DRBG.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/RSA-PSS.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/SM2.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/X25519.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/bio.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/crypto.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/ct.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/des_modes.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/evp.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/ossl_store-file.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/ossl_store.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/passphrase-encoding.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/proxy-certificates.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/scrypt.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/ssl.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/man7/x509.pod (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/doc/openssl-c-indent.el (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/e_os.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/asm/e_padlock-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/asm/e_padlock-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_afalg.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_afalg.ec (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_afalg.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_afalg.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_afalg_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_afalg_err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_capi.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_capi.ec (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_capi.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_capi_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_capi_err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_dasync.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_dasync.ec (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_dasync.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_dasync_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_dasync_err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_ossltest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_ossltest.ec (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_ossltest.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_ossltest_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_ossltest_err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/engines/e_padlock.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Downloaded.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/Artistic (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/COPYING (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/INSTALL (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/MANIFEST (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/META.json (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/META.yml (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/Makefile.PL (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/lib/Text/Template.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/00-version.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/01-basic.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/02-hash.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/03-out.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/04-safe.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/05-safe2.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/06-ofh.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/07-safe3.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/08-exported.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/09-error.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/10-delimiters.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/11-prepend.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/12-preprocess.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/13-taint.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/Text-Template-1.46/t/14-broken.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/external/perl/transfer/Text/Template.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/README.md (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/asn1parse.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/bignum.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/bndiv.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/client.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/cms.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/conf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/crl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/ct.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/driver.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/fuzzer.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/helper.py (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/mkfuzzoids.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/oids.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/rand.inc (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/server.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/test-corpus.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/fuzz/x509.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/aria.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/asn1.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/async.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/bn.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/bn_conf.h.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/bn_dh.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/bn_srp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/chacha.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/cryptlib.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/ctype.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/dso_conf.h.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/ec.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/engine.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/evp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/lhash.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/md32_common.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/objects.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/poly1305.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/rand.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/sha.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/siphash.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/sm2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/sm2err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/sm3.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/sm4.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/store.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/crypto/x509.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/bio.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/comp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/conf.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/constant_time.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/cryptlib.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/dane.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/dso.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/dsoerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/nelem.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/numbers.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/o_dir.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/o_str.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/refcount.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/sockets.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/sslconf.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/thread_once.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/internal/tsan_assist.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/aes.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/asn1.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/asn1_mac.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/asn1err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/asn1t.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/async.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/asyncerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/bio.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/bioerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/blowfish.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/bn.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/bnerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/buffer.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/buffererr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/camellia.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/cast.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/cmac.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/cms.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/cmserr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/comp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/comperr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/conf.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/conf_api.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/conferr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/crypto.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/cryptoerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ct.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/cterr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/des.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/dh.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/dherr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/dsa.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/dsaerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/dtls1.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/e_os2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ebcdic.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ec.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ecdh.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ecdsa.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ecerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/engine.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/engineerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/evp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/evperr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/hmac.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/idea.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/kdf.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/kdferr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/lhash.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/md2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/md4.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/md5.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/mdc2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/modes.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/obj_mac.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/objects.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/objectserr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ocsp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ocsperr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/opensslconf.h.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/opensslv.h (98%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ossl_typ.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pem.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pem2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pemerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pkcs12.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pkcs12err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pkcs7.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/pkcs7err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rand.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rand_drbg.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/randerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rc2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rc4.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rc5.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ripemd.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rsa.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/rsaerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/safestack.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/seed.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/sha.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/srp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/srtp.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ssl.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ssl2.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ssl3.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/sslerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/stack.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/store.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/storeerr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/symhacks.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/tls1.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ts.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/tserr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/txt_db.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/ui.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/uierr.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/whrlpool.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/x509.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/x509_vfy.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/x509err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/x509v3.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/include/openssl/x509v3err.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/applink.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/cmp.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/uplink-common.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/uplink-ia64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/uplink-x86.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/uplink-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/uplink.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ms/uplink.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/os-dep/haiku.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/bio_ssl.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/d1_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/d1_msg.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/d1_srtp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/methods.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/packet.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/packet_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/pqueue.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/dtls1_bitmap.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/rec_layer_d1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/rec_layer_s3.c (99%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/record.h (99%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/record_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/ssl3_buffer.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/ssl3_record.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/record/ssl3_record_tls13.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/s3_cbc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/s3_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/s3_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/s3_msg.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_asn1.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_cert.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_cert_table.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_ciph.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_conf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_err.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_lib.c (98%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_mcnf.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_rsa.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_sess.c (98%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_stat.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_txt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/ssl_utst.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/extensions.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/extensions_clnt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/extensions_cust.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/extensions_srvr.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem_clnt.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem_dtls.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/statem/statem_srvr.c (99%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/t1_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/t1_lib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/t1_trce.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/tls13_enc.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/ssl/tls_srp.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/CAss.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/CAssdh.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/CAssdsa.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/CAssrsa.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/CAtsa.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/P1ss.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/P2ss.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/README (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/README.external (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/README.ssltest.md (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/Sssdsa.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/Sssrsa.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/Uss.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/aborttest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/afalgtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asn1_decode_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asn1_encode_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asn1_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asn1_string_table_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asn1_time_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asynciotest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/asynctest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bad_dtls_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bftest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bio_callback_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bio_enc_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bio_memleak_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bioprinttest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bntest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/bntests.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/casttest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/alt1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/alt1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/alt2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/alt2-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/alt3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/alt3-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad-pc3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad-pc3-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad-pc4-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad-pc4-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad-pc6-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad-pc6-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad.key (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/bad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt10-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt10-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt2-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt3-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt4-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt4-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt5-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt5-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt6-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt6-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt7-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt7-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt8-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt8-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt9-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badalt9-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badcn1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/badcn1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert-768i.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert-ec-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert-md5-any.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-expired.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-key-768.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-key-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-key-ec-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-key2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-name2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-nonbc.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-nonca.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-pol-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-pss-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-root2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/client-ed25519-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/client-ed25519-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/client-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/client-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/croot-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cross-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cross-root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cyrillic.msb (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cyrillic.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cyrillic.utf8 (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cyrillic_crl.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/cyrillic_crl.utf8 (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/dhp2048.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-768i.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-ec-named-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-ec-named-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-policies-bad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert-policies.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-client-chain.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-client.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-ecdsa-client-chain.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-ecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-ed25519.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-expired.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-key-768.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-key-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-key-ec-named-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-key-ec-named-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-name2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-pathlen.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-pss-sha1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-pss-sha256-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-self-signed.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ee-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs1.sct (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs1_issuer-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs1_issuer.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs3.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs3.sct (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/embeddedSCTs3_issuer.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/goodcn1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/goodcn1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/interCA.key (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/interCA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/invalid-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/leaf.key (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/leaf.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/many-constraints.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/many-names1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/many-names2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/many-names3.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/mkcert.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/nca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/nca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca2-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca3-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/ncca3-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/nroot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/nroot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/p256-server-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/p256-server-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/p384-root-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/p384-root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/p384-server-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/p384-server-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pathlen.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pc1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pc1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pc2-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pc2-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pc5-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/pc5-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-cert-rsa2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-cross-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-ed25519.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-expired.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-key-768.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-key2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-name2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-nonca.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-noserver.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root2+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root2+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/root2-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/rootCA.key (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/rootCA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/rootcert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/rootkey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/roots.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-cecdsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-cecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-dsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-dsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ecdsa-brainpoolP256r1-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ecdsa-brainpoolP256r1-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ecdsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ed25519-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ed25519-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-pss-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-pss-restrict-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-pss-restrict-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/server-trusted.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/servercert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/serverkey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/setup.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/some-names1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/some-names2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/some-names3.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot-cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/sroot-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/subinterCA-ss.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/subinterCA.key (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/subinterCA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/untrusted.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/wrongcert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/wrongkey.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/x509-check-key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/certs/x509-check.csr (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/chacha_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/cipher_overhead_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/cipherbytes_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/cipherlist_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ciphername_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/clienthellotest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/cmactest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/cms-examples.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/cmsapitest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/conf_include_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/constant_time_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/crltest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ct/log_list.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ct/tls1.sct (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ct_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ctype_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/curve448_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/bad-cms.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/bad-int-pad0.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/bad-int-padminus1.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/bad_bio.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/bad_cert.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/bad_generalname.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/high_tag.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/int0.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/int1.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i-tests/intminus1.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/d2i_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dane-cross.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/danetest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/danetest.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/danetest.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/data.bin (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/destest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dhtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/drbg_cavs_data.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/drbg_cavs_data.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/drbg_cavs_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/drbgtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/drbgtest.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dsa_no_digest_size_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dsatest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dtls_mtu_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dtlstest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/dtlsv1listentest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ec_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ecdsatest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ecdsatest.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ecstresstest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ectest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/enginetest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/errtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/evp_extra_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/evp_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/evp_test.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/exdatatest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/exptest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/fatalerrtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/generate_buildtest.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/generate_ssl_tests.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/gmdifftest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/gosttest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/handshake_helper.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/handshake_helper.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/hmactest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ideatest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/igetest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/lhash_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/md2test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/mdc2_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/mdc2test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/memleaktest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/modes_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISDOSC_D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISDOSC_D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISDOSC_D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISOP_D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISOP_D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISOP_D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISOP_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISOP_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ISOP_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND1_Cross_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WIKH_D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WIKH_D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WIKH_D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WIKH_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WIKH_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WIKH_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WINH_D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WINH_D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WINH_D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WINH_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WINH_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WINH_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKDOSC_D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKDOSC_D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKDOSC_D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WRID_D1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WRID_D2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WRID_D3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WRID_ND1.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WRID_ND2.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WRID_ND3.ors (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ocspapitest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/async_bio.cc (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/async_bio.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/include/openssl/base.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/ossl_config.json (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/ossl_shim.cc (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/packeted_bio.cc (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/packeted_bio.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/test_config.cc (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ossl_shim/test_config.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/packettest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pbelutest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pemtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pkcs7-1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pkcs7.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pkey_meth_kdf_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pkey_meth_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/pkits-test.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/poly1305_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rc2test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rc4test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rc5test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rdrand_sanitytest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/01-test_abort.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/01-test_sanity.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/01-test_symbol_presence.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/01-test_test.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/02-test_errstr.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/02-test_internal_ctype.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/02-test_lhash.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/02-test_ordinals.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/02-test_stack.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_exdata.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_asn1.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_chacha.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_curve448.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_ec.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_mdc2.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_modes.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_poly1305.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_siphash.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_sm2.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_sm4.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_ssl_cert_table.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_internal_x509.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/03-test_ui.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_asn1_decode.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_asn1_encode.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_asn1_string_table.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_bio_callback.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_bioprint.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_err.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/NOTES (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/beermug.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-1023line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-1024line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-1025line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-255line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-256line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-257line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-blankline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-comment.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-earlypad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-extrapad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-infixwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-junk.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-longline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-misalignedpad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-onecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-oneline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-shortandlongline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-shortline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-threecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/csr.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-1023line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-1024line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-1025line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-255line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-256line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-257line.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-blankline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-comment.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-corruptedheader.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-corruptiv.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-earlypad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-extrapad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-junk.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-longline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-misalignedpad.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-onecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-oneline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-onelineheader.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-shortandlongline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-shortline.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-threecolumn.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsa.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/dsaparam.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/04-test_pem_data/wellknown (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_bf.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_cast.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_cmac.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_des.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_hmac.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_idea.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_md2.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_mdc2.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_rand.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_rc2.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_rc4.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/05-test_rc5.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/06-test-rdrand.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn_data/bnexp.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn_data/bngcd.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn_data/bnmod.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn_data/bnmul.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn_data/bnshift.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_bn_data/bnsum.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/10-test_exp.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_dh.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_dsa.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ec.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecdsa.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_genec.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_genrsa.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_mp_rsa.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_mp_rsa_data/plain_text (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_out_option.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_rsa.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/15-test_rsapss.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/20-test_dgst.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/20-test_enc.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/20-test_enc_more.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/20-test_passwd.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_crl.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_d2i.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_pkcs7.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_req.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_sid.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_verify.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/25-test_x509.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_afalg.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_engine.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpcase.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpccmcavs.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpciph.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpdigest.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpencod.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpkdf.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evpmac.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evppbe.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evppkey.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_data/evppkey_ecc.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_evp_extra.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_pbelu.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_pkey_meth.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/30-test_pkey_meth_kdf.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/40-test_rehash.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/60-test_x509_check_cert_pkey.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/60-test_x509_dup_cert.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/60-test_x509_store.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/60-test_x509_time.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_asyncio.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_bad_dtls.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_clienthello.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_comp.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_key_share.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_packet.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_recordlen.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_renegotiation.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_servername.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslcbcpadding.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslcertstatus.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslextension.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslmessages.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslrecords.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslsessiontick.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslsigalgs.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslsignature.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslskewith0p.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslversions.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_sslvertol.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13alerts.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13cookie.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13downgrade.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13hrr.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13kexmodes.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13messages.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tls13psk.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_tlsextms.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_verify_extra.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/70-test_wpacket.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ca.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cipherbytes.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cipherlist.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ciphername.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cms.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cms_data/bad_signtime_attr.cms (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cms_data/ct_multiple_attr.cms (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cms_data/no_ct_attr.cms (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cms_data/no_md_attr.cms (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_cmsapi.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ct.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_dane.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_dtls.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_dtls_mtu.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_dtlsv1listen.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ocsp.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ocsp_data/cert.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ocsp_data/key.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_pkcs12.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_policy_tree.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_policy_tree_data/large_leaf.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_policy_tree_data/large_policy_tree.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_policy_tree_data/small_leaf.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_policy_tree_data/small_policy_tree.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ssl_new.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ssl_old.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_ssl_test_ctx.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_sslcorrupt.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_tsa.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/80-test_x509aux.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_asn1_time.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_async.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_bio_enc.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_bio_memleak.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_constant_time.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_fatalerr.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gmdiff.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gost.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gost_data/gost.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gost_data/server-cert2001.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gost_data/server-cert2012.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gost_data/server-key2001.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_gost_data/server-key2012.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_ige.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/conf-includes/includes1.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/conf-includes/includes2.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/includes-broken.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/includes-eq-ws.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/includes-eq.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/includes-file.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/includes.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/vms-includes-file.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_includes_data/vms-includes.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_memleak.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_overhead.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_secmem.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_shlibload.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_srp.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_sslapi.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_sslapi_data/passwd.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_sslbuffers.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_store.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_store_data/ca.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_store_data/user.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_sysdefault.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_threads.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_time_offset.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_tls13ccs.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_tls13encryption.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_tls13secrets.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/90-test_v3name.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/95-test_external_boringssl.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/95-test_external_krb5.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/95-test_external_krb5_data/krb5.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/95-test_external_pyca.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/95-test_external_pyca_data/cryptography.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/99-test_ecstress.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/99-test_fuzz.t (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/ocsp-response.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recipes/tconversion.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/recordlentest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rsa_complex.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rsa_mp_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/rsa_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/run_tests.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sanitytest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/secmemtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/serverinfo.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/serverinfo2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/servername_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/session.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/shibboleth.pfx (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/shlibloadtest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/siphash_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sm2_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sm4_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smcont.txt (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/badrsa.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/ca.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/mksmime-certs.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smdh.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smdsa1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smdsa2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smdsa3.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smdsap.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smec1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smec2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smec3.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smroot.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smrsa1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smrsa2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/smime-certs/smrsa3.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/srptest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/01-simple.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/01-simple.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/02-protocol-version.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/02-protocol-version.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/03-custom_verify.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/03-custom_verify.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/04-client_auth.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/04-client_auth.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/05-sni.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/05-sni.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/06-sni-ticket.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/06-sni-ticket.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/07-dtls-protocol-version.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/07-dtls-protocol-version.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/08-npn.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/08-npn.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/09-alpn.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/09-alpn.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/10-resumption.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/10-resumption.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/11-dtls_resumption.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/11-dtls_resumption.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/12-ct.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/12-ct.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/13-fragmentation.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/13-fragmentation.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/14-curves.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/14-curves.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/15-certstatus.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/15-certstatus.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/16-dtls-certstatus.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/16-dtls-certstatus.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/17-renegotiate.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/17-renegotiate.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/18-dtls-renegotiate.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/18-dtls-renegotiate.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/19-mac-then-encrypt.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/19-mac-then-encrypt.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/20-cert-select.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/20-cert-select.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/21-key-update.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/21-key-update.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/22-compression.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/22-compression.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/23-srp.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/23-srp.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/24-padding.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/24-padding.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/25-cipher.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/25-cipher.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/26-tls13_client_auth.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/26-tls13_client_auth.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/27-ticket-appdata.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/27-ticket-appdata.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/28-seclevel.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/28-seclevel.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/29-dtls-sctp-label-bug.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/29-dtls-sctp-label-bug.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/30-supported-groups.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/30-supported-groups.conf.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/protocol_version.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl-tests/ssltests_base.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_cert_table_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_ctx_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_test.tmpl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_test_ctx.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_test_ctx.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_test_ctx_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssl_test_ctx_test.conf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sslapitest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sslbuffertest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sslcorrupttest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssltest_old.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssltestlib.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/ssltestlib.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/stack_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sysdefault.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/sysdefaulttest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/test.cnf (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/test_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testcrl.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testdsa.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testdsapub.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testec-p256.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testecpub-p256.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tested25519.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tested25519pub.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tested448.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tested448pub.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testp7.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testreq2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testrsa.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testrsa_withattrs.der (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testrsa_withattrs.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testrsapub.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testsid.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/basic_output.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/cb.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/driver.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/format_output.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/main.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/output.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/output_helpers.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/random.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/stanza.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/tap_bio.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/test_cleanup.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/tests.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/testutil_init.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testutil/tu_local.h (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/testx509.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/threadstest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/time_offset_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tls13ccstest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tls13encryptiontest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/tls13secretstest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/uitest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/v3-cert1.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/v3-cert2.pem (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/v3ext.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/v3nametest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/verify_extra_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/versions.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/wpackettest.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/x509_check_cert_pkey_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/x509_dup_cert_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/x509_internal_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/x509_time_test.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/test/x509aux.c (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/tools/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/tools/c_rehash.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/add-depends.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/build.info (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/cavs-to-evptest.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/check-malloc-errs (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/ck_errf.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/copy.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/dofile.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/echo.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/find-doc-nits (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/find-unused-errs (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/fix-includes (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/fix-includes.sed (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/indent.pro (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/libcrypto.num (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/libssl.num (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/local_shlib.com.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/mkbuildinf.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/mkdef.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/mkdir-p.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/mkerr.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/mkrc.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/openssl-format-source (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/openssl-update-copyright (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/opensslwrap.sh (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/OpenSSL/Glob.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/OpenSSL/Test.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/OpenSSL/Test/Simple.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/OpenSSL/Test/Utils.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/OpenSSL/Util/Pod.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/OpenSSL/copyright.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/Alert.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/Certificate.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/CertificateRequest.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/CertificateVerify.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/ClientHello.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/EncryptedExtensions.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/Message.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/NewSessionTicket.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/Proxy.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/Record.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/ServerHello.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/TLSProxy/ServerKeyExchange.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/checkhandshake.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/perl/with_fallback.pm (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/private.num (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/process_docs.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/shlib_wrap.sh.in (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/su-filter.pl (100%) rename src/openssl/{openssl-1.1.1w-chevah1 => openssl-1.1.1w-chevah2}/util/unlocal_shlib.com.in (100%) diff --git a/python-modules/chevah-python-test/test_python_binary_dist.py b/python-modules/chevah-python-test/test_python_binary_dist.py index 5fae1075f..a01fd7c46 100644 --- a/python-modules/chevah-python-test/test_python_binary_dist.py +++ b/python-modules/chevah-python-test/test_python_binary_dist.py @@ -433,7 +433,7 @@ def main(): openssl_version = backend.openssl_version_text() if CHEVAH_OS.startswith(("win", "lnx", "macos", "aix")): # On some OS'es we build against our own OpenSSL. - expecting = u'OpenSSL 1.1.1w-chevah1 26 Jul 2024' + expecting = u'OpenSSL 1.1.1w-chevah2 15 Aug 2024' if CHEVAH_OS.startswith("aix"): # On AIX we are stuck with a patched 1.0.2. expecting = u'OpenSSL 1.0.2v-chevah5 21 Sep 2023' diff --git a/src/openssl/README b/src/openssl/README index 8be4a82de..581259c5d 100644 --- a/src/openssl/README +++ b/src/openssl/README @@ -1,6 +1,9 @@ # OpenSSL 1.0.2 sources are patched with latest security fixes from the # CentOS 7 sources at https://git.centos.org/rpms/openssl/blob/c7/f/SOURCES. # Latest patches are at https://git.centos.org/rpms/openssl/commits/c7. -# Until 2023, Ubuntu Server 16.04 source packages were available for download at -# http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. E.g. +# If not found above, latest patches for OpenSSL 1.1.1 are in 1.1.1f sources for +# Ubuntu 20.04 at http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. E.g. +# http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.1.1f-1ubuntu2.23.debian.tar.xz +# Until 2023, Ubuntu Server 16.04 source updates for OpenSSL 1.0.2 were +# available at http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. E.g. # http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.0.2g-1ubuntu4.19.debian.tar.xz diff --git a/src/openssl/openssl-1.1.1w-chevah1/ACKNOWLEDGEMENTS b/src/openssl/openssl-1.1.1w-chevah2/ACKNOWLEDGEMENTS similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ACKNOWLEDGEMENTS rename to src/openssl/openssl-1.1.1w-chevah2/ACKNOWLEDGEMENTS diff --git a/src/openssl/openssl-1.1.1w-chevah1/AUTHORS b/src/openssl/openssl-1.1.1w-chevah2/AUTHORS similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/AUTHORS rename to src/openssl/openssl-1.1.1w-chevah2/AUTHORS diff --git a/src/openssl/openssl-1.1.1w-chevah1/CHANGES b/src/openssl/openssl-1.1.1w-chevah2/CHANGES similarity index 99% rename from src/openssl/openssl-1.1.1w-chevah1/CHANGES rename to src/openssl/openssl-1.1.1w-chevah2/CHANGES index 5efd7d53d..c63a5ea23 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/CHANGES +++ b/src/openssl/openssl-1.1.1w-chevah2/CHANGES @@ -7,6 +7,22 @@ https://github.com/openssl/openssl/commits/ and pick the appropriate release branch. + + Changes between 1.1.1w-chevah1 and 1.1.1w-chevah2 [15 Aug 2024] + + *) Fix SSL_select_next_proto buffer overread. + + (CVE-2024-5535) + + *) Fix Use After Free with SSL_free_buffers. + + (CVE-2024-4741) + + *) Fix unbounded memory growth with session handling in TLSv1.3. + + (CVE-2024-2511) + + Changes between 1.1.1w and 1.1.1w-chevah1 [26 Jul 2024] *) Fix PKCS12 decoding crashes. @@ -17,6 +33,7 @@ (CVE-2023-5678) + Changes between 1.1.1v and 1.1.1w [11 Sep 2023] *) Fix POLY1305 MAC implementation corrupting XMM registers on Windows. diff --git a/src/openssl/openssl-1.1.1w-chevah1/CONTRIBUTING b/src/openssl/openssl-1.1.1w-chevah2/CONTRIBUTING similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/CONTRIBUTING rename to src/openssl/openssl-1.1.1w-chevah2/CONTRIBUTING diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/00-base-templates.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/00-base-templates.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/00-base-templates.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/00-base-templates.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/10-main.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/10-main.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/10-main.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/10-main.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/15-android.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/15-android.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/15-android.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/15-android.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/15-ios.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/15-ios.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/15-ios.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/15-ios.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-djgpp.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/50-djgpp.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/50-djgpp.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/50-djgpp.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-haiku.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/50-haiku.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/50-haiku.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/50-haiku.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-masm.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/50-masm.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/50-masm.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/50-masm.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/50-win-onecore.conf b/src/openssl/openssl-1.1.1w-chevah2/Configurations/50-win-onecore.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/50-win-onecore.conf rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/50-win-onecore.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/INTERNALS.Configure b/src/openssl/openssl-1.1.1w-chevah2/Configurations/INTERNALS.Configure similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/INTERNALS.Configure rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/INTERNALS.Configure diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/README b/src/openssl/openssl-1.1.1w-chevah2/Configurations/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/README rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/README.design b/src/openssl/openssl-1.1.1w-chevah2/Configurations/README.design similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/README.design rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/README.design diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/common.tmpl b/src/openssl/openssl-1.1.1w-chevah2/Configurations/common.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/common.tmpl rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/common.tmpl diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/common0.tmpl b/src/openssl/openssl-1.1.1w-chevah2/Configurations/common0.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/common0.tmpl rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/common0.tmpl diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/descrip.mms.tmpl b/src/openssl/openssl-1.1.1w-chevah2/Configurations/descrip.mms.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/descrip.mms.tmpl rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/descrip.mms.tmpl diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/shared-info.pl b/src/openssl/openssl-1.1.1w-chevah2/Configurations/shared-info.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/shared-info.pl rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/shared-info.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-Makefile.tmpl b/src/openssl/openssl-1.1.1w-chevah2/Configurations/unix-Makefile.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-Makefile.tmpl rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/unix-Makefile.tmpl diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-checker.pm b/src/openssl/openssl-1.1.1w-chevah2/Configurations/unix-checker.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/unix-checker.pm rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/unix-checker.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-checker.pm b/src/openssl/openssl-1.1.1w-chevah2/Configurations/windows-checker.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-checker.pm rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/windows-checker.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-makefile.tmpl b/src/openssl/openssl-1.1.1w-chevah2/Configurations/windows-makefile.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configurations/windows-makefile.tmpl rename to src/openssl/openssl-1.1.1w-chevah2/Configurations/windows-makefile.tmpl diff --git a/src/openssl/openssl-1.1.1w-chevah1/Configure b/src/openssl/openssl-1.1.1w-chevah2/Configure similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/Configure rename to src/openssl/openssl-1.1.1w-chevah2/Configure diff --git a/src/openssl/openssl-1.1.1w-chevah1/FAQ b/src/openssl/openssl-1.1.1w-chevah2/FAQ similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/FAQ rename to src/openssl/openssl-1.1.1w-chevah2/FAQ diff --git a/src/openssl/openssl-1.1.1w-chevah1/INSTALL b/src/openssl/openssl-1.1.1w-chevah2/INSTALL similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/INSTALL rename to src/openssl/openssl-1.1.1w-chevah2/INSTALL diff --git a/src/openssl/openssl-1.1.1w-chevah1/LICENSE b/src/openssl/openssl-1.1.1w-chevah2/LICENSE similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/LICENSE rename to src/openssl/openssl-1.1.1w-chevah2/LICENSE diff --git a/src/openssl/openssl-1.1.1w-chevah1/NEWS b/src/openssl/openssl-1.1.1w-chevah2/NEWS similarity index 99% rename from src/openssl/openssl-1.1.1w-chevah1/NEWS rename to src/openssl/openssl-1.1.1w-chevah2/NEWS index ee9dce40f..6f8c72917 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/NEWS +++ b/src/openssl/openssl-1.1.1w-chevah2/NEWS @@ -5,6 +5,13 @@ This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file. + Major changes between OpenSSL 1.1.1w-chevah1 and 1.1.1w-chevah2 [15 Aug 2024] + + o Fix SSL_select_next_proto buffer overread (CVE-2024-5535) + o Fix Use After Free with SSL_free_buffers (CVE-2024-4741) + o Fix unbounded memory growth with session handling in TLSv1.3 + (CVE-2024-2511) + Major changes between OpenSSL 1.1.1w and OpenSSL 1.1.1w-chevah1 [26 Jul 2024] o Fix PKCS12 decoding crashes (CVE-2024-0727) diff --git a/src/openssl/openssl-1.1.1w-chevah1/NOTES.ANDROID b/src/openssl/openssl-1.1.1w-chevah2/NOTES.ANDROID similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/NOTES.ANDROID rename to src/openssl/openssl-1.1.1w-chevah2/NOTES.ANDROID diff --git a/src/openssl/openssl-1.1.1w-chevah1/NOTES.DJGPP b/src/openssl/openssl-1.1.1w-chevah2/NOTES.DJGPP similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/NOTES.DJGPP rename to src/openssl/openssl-1.1.1w-chevah2/NOTES.DJGPP diff --git a/src/openssl/openssl-1.1.1w-chevah1/NOTES.PERL b/src/openssl/openssl-1.1.1w-chevah2/NOTES.PERL similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/NOTES.PERL rename to src/openssl/openssl-1.1.1w-chevah2/NOTES.PERL diff --git a/src/openssl/openssl-1.1.1w-chevah1/NOTES.UNIX b/src/openssl/openssl-1.1.1w-chevah2/NOTES.UNIX similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/NOTES.UNIX rename to src/openssl/openssl-1.1.1w-chevah2/NOTES.UNIX diff --git a/src/openssl/openssl-1.1.1w-chevah1/NOTES.VMS b/src/openssl/openssl-1.1.1w-chevah2/NOTES.VMS similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/NOTES.VMS rename to src/openssl/openssl-1.1.1w-chevah2/NOTES.VMS diff --git a/src/openssl/openssl-1.1.1w-chevah1/NOTES.WIN b/src/openssl/openssl-1.1.1w-chevah2/NOTES.WIN similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/NOTES.WIN rename to src/openssl/openssl-1.1.1w-chevah2/NOTES.WIN diff --git a/src/openssl/openssl-1.1.1w-chevah1/README b/src/openssl/openssl-1.1.1w-chevah2/README similarity index 98% rename from src/openssl/openssl-1.1.1w-chevah1/README rename to src/openssl/openssl-1.1.1w-chevah2/README index ea84a8c78..6777947da 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/README +++ b/src/openssl/openssl-1.1.1w-chevah2/README @@ -1,5 +1,5 @@ - OpenSSL 1.1.1w-chevah1 26 Jul 2024 + OpenSSL 1.1.1w-chevah2 15 Aug 2024 Copyright (c) 1998-2023 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson diff --git a/src/openssl/openssl-1.1.1w-chevah1/README.ENGINE b/src/openssl/openssl-1.1.1w-chevah2/README.ENGINE similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/README.ENGINE rename to src/openssl/openssl-1.1.1w-chevah2/README.ENGINE diff --git a/src/openssl/openssl-1.1.1w-chevah1/README.FIPS b/src/openssl/openssl-1.1.1w-chevah2/README.FIPS similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/README.FIPS rename to src/openssl/openssl-1.1.1w-chevah2/README.FIPS diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/VMSify-conf.pl b/src/openssl/openssl-1.1.1w-chevah2/VMS/VMSify-conf.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/VMSify-conf.pl rename to src/openssl/openssl-1.1.1w-chevah2/VMS/VMSify-conf.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/engine.opt b/src/openssl/openssl-1.1.1w-chevah2/VMS/engine.opt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/engine.opt rename to src/openssl/openssl-1.1.1w-chevah2/VMS/engine.opt diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/msg_install.com b/src/openssl/openssl-1.1.1w-chevah2/VMS/msg_install.com similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/msg_install.com rename to src/openssl/openssl-1.1.1w-chevah2/VMS/msg_install.com diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/msg_staging.com b/src/openssl/openssl-1.1.1w-chevah2/VMS/msg_staging.com similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/msg_staging.com rename to src/openssl/openssl-1.1.1w-chevah2/VMS/msg_staging.com diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_ivp.com.in b/src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_ivp.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_ivp.com.in rename to src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_ivp.com.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_shutdown.com.in b/src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_shutdown.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_shutdown.com.in rename to src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_shutdown.com.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_startup.com.in b/src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_startup.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_startup.com.in rename to src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_startup.com.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_utils.com.in b/src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_utils.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/openssl_utils.com.in rename to src/openssl/openssl-1.1.1w-chevah2/VMS/openssl_utils.com.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/test-includes.com b/src/openssl/openssl-1.1.1w-chevah2/VMS/test-includes.com similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/test-includes.com rename to src/openssl/openssl-1.1.1w-chevah2/VMS/test-includes.com diff --git a/src/openssl/openssl-1.1.1w-chevah1/VMS/translatesyms.pl b/src/openssl/openssl-1.1.1w-chevah2/VMS/translatesyms.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/VMS/translatesyms.pl rename to src/openssl/openssl-1.1.1w-chevah2/VMS/translatesyms.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/CA.pl.in b/src/openssl/openssl-1.1.1w-chevah2/apps/CA.pl.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/CA.pl.in rename to src/openssl/openssl-1.1.1w-chevah2/apps/CA.pl.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/app_rand.c b/src/openssl/openssl-1.1.1w-chevah2/apps/app_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/app_rand.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/app_rand.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/apps.c b/src/openssl/openssl-1.1.1w-chevah2/apps/apps.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/apps.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/apps.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/apps.h b/src/openssl/openssl-1.1.1w-chevah2/apps/apps.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/apps.h rename to src/openssl/openssl-1.1.1w-chevah2/apps/apps.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/asn1pars.c b/src/openssl/openssl-1.1.1w-chevah2/apps/asn1pars.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/asn1pars.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/asn1pars.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/bf_prefix.c b/src/openssl/openssl-1.1.1w-chevah2/apps/bf_prefix.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/bf_prefix.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/bf_prefix.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/build.info b/src/openssl/openssl-1.1.1w-chevah2/apps/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/build.info rename to src/openssl/openssl-1.1.1w-chevah2/apps/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ca-cert.srl b/src/openssl/openssl-1.1.1w-chevah2/apps/ca-cert.srl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ca-cert.srl rename to src/openssl/openssl-1.1.1w-chevah2/apps/ca-cert.srl diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ca-key.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ca-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/ca-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ca-req.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/ca-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ca-req.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/ca-req.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ca.c b/src/openssl/openssl-1.1.1w-chevah2/apps/ca.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ca.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/ca.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/cert.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ciphers.c b/src/openssl/openssl-1.1.1w-chevah2/apps/ciphers.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ciphers.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/ciphers.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/client.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/client.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/client.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/client.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/cms.c b/src/openssl/openssl-1.1.1w-chevah2/apps/cms.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/cms.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/cms.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/crl.c b/src/openssl/openssl-1.1.1w-chevah2/apps/crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/crl.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/crl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/crl2p7.c b/src/openssl/openssl-1.1.1w-chevah2/apps/crl2p7.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/crl2p7.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/crl2p7.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ct_log_list.cnf b/src/openssl/openssl-1.1.1w-chevah2/apps/ct_log_list.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ct_log_list.cnf rename to src/openssl/openssl-1.1.1w-chevah2/apps/ct_log_list.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt b/src/openssl/openssl-1.1.1w-chevah2/apps/demoSRP/srp_verifier.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt rename to src/openssl/openssl-1.1.1w-chevah2/apps/demoSRP/srp_verifier.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt.attr b/src/openssl/openssl-1.1.1w-chevah2/apps/demoSRP/srp_verifier.txt.attr similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/demoSRP/srp_verifier.txt.attr rename to src/openssl/openssl-1.1.1w-chevah2/apps/demoSRP/srp_verifier.txt.attr diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dgst.c b/src/openssl/openssl-1.1.1w-chevah2/apps/dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dh1024.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dh1024.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dh1024.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dh2048.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dh2048.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dh2048.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dh4096.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dh4096.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dh4096.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dhparam.c b/src/openssl/openssl-1.1.1w-chevah2/apps/dhparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dhparam.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/dhparam.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsa-ca.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dsa-ca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsa-ca.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsa-ca.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsa-pca.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dsa-pca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsa-pca.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsa-pca.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsa.c b/src/openssl/openssl-1.1.1w-chevah2/apps/dsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsa.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsa1024.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dsa1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsa1024.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsa1024.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsa512.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dsa512.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsa512.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsa512.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsap.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/dsap.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsap.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsap.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/dsaparam.c b/src/openssl/openssl-1.1.1w-chevah2/apps/dsaparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/dsaparam.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/dsaparam.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ec.c b/src/openssl/openssl-1.1.1w-chevah2/apps/ec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ec.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/ec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ecparam.c b/src/openssl/openssl-1.1.1w-chevah2/apps/ecparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ecparam.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/ecparam.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/enc.c b/src/openssl/openssl-1.1.1w-chevah2/apps/enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/enc.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/engine.c b/src/openssl/openssl-1.1.1w-chevah2/apps/engine.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/engine.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/engine.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/errstr.c b/src/openssl/openssl-1.1.1w-chevah2/apps/errstr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/errstr.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/errstr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/gendsa.c b/src/openssl/openssl-1.1.1w-chevah2/apps/gendsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/gendsa.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/gendsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/genpkey.c b/src/openssl/openssl-1.1.1w-chevah2/apps/genpkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/genpkey.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/genpkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/genrsa.c b/src/openssl/openssl-1.1.1w-chevah2/apps/genrsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/genrsa.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/genrsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/nseq.c b/src/openssl/openssl-1.1.1w-chevah2/apps/nseq.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/nseq.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/nseq.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ocsp.c b/src/openssl/openssl-1.1.1w-chevah2/apps/ocsp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ocsp.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/ocsp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/openssl-vms.cnf b/src/openssl/openssl-1.1.1w-chevah2/apps/openssl-vms.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/openssl-vms.cnf rename to src/openssl/openssl-1.1.1w-chevah2/apps/openssl-vms.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/openssl.c b/src/openssl/openssl-1.1.1w-chevah2/apps/openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/openssl.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/openssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/openssl.cnf b/src/openssl/openssl-1.1.1w-chevah2/apps/openssl.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/openssl.cnf rename to src/openssl/openssl-1.1.1w-chevah2/apps/openssl.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/opt.c b/src/openssl/openssl-1.1.1w-chevah2/apps/opt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/opt.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/opt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/passwd.c b/src/openssl/openssl-1.1.1w-chevah2/apps/passwd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/passwd.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/passwd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pca-cert.srl b/src/openssl/openssl-1.1.1w-chevah2/apps/pca-cert.srl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pca-cert.srl rename to src/openssl/openssl-1.1.1w-chevah2/apps/pca-cert.srl diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pca-key.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/pca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pca-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/pca-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pca-req.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/pca-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pca-req.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/pca-req.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pkcs12.c b/src/openssl/openssl-1.1.1w-chevah2/apps/pkcs12.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pkcs12.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/pkcs12.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pkcs7.c b/src/openssl/openssl-1.1.1w-chevah2/apps/pkcs7.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pkcs7.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/pkcs7.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pkcs8.c b/src/openssl/openssl-1.1.1w-chevah2/apps/pkcs8.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pkcs8.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/pkcs8.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pkey.c b/src/openssl/openssl-1.1.1w-chevah2/apps/pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pkeyparam.c b/src/openssl/openssl-1.1.1w-chevah2/apps/pkeyparam.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pkeyparam.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/pkeyparam.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/pkeyutl.c b/src/openssl/openssl-1.1.1w-chevah2/apps/pkeyutl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/pkeyutl.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/pkeyutl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/prime.c b/src/openssl/openssl-1.1.1w-chevah2/apps/prime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/prime.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/prime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/privkey.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/privkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/privkey.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/privkey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/progs.pl b/src/openssl/openssl-1.1.1w-chevah2/apps/progs.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/progs.pl rename to src/openssl/openssl-1.1.1w-chevah2/apps/progs.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/rand.c b/src/openssl/openssl-1.1.1w-chevah2/apps/rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/rand.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/rand.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/rehash.c b/src/openssl/openssl-1.1.1w-chevah2/apps/rehash.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/rehash.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/rehash.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/req.c b/src/openssl/openssl-1.1.1w-chevah2/apps/req.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/req.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/req.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/req.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/req.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/req.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/rsa.c b/src/openssl/openssl-1.1.1w-chevah2/apps/rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/rsa.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/rsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/rsa8192.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/rsa8192.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/rsa8192.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/rsa8192.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/rsautl.c b/src/openssl/openssl-1.1.1w-chevah2/apps/rsautl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/rsautl.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/rsautl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s1024key.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/s1024key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s1024key.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/s1024key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s1024req.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/s1024req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s1024req.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/s1024req.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s512-key.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/s512-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s512-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/s512-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s512-req.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/s512-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s512-req.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/s512-req.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s_apps.h b/src/openssl/openssl-1.1.1w-chevah2/apps/s_apps.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s_apps.h rename to src/openssl/openssl-1.1.1w-chevah2/apps/s_apps.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s_cb.c b/src/openssl/openssl-1.1.1w-chevah2/apps/s_cb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s_cb.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/s_cb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s_client.c b/src/openssl/openssl-1.1.1w-chevah2/apps/s_client.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s_client.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/s_client.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s_server.c b/src/openssl/openssl-1.1.1w-chevah2/apps/s_server.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s_server.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/s_server.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s_socket.c b/src/openssl/openssl-1.1.1w-chevah2/apps/s_socket.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s_socket.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/s_socket.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/s_time.c b/src/openssl/openssl-1.1.1w-chevah2/apps/s_time.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/s_time.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/s_time.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/server.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/server.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/server.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/server.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/server.srl b/src/openssl/openssl-1.1.1w-chevah2/apps/server.srl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/server.srl rename to src/openssl/openssl-1.1.1w-chevah2/apps/server.srl diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/server2.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/server2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/server2.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/server2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/sess_id.c b/src/openssl/openssl-1.1.1w-chevah2/apps/sess_id.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/sess_id.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/sess_id.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/smime.c b/src/openssl/openssl-1.1.1w-chevah2/apps/smime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/smime.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/smime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/speed.c b/src/openssl/openssl-1.1.1w-chevah2/apps/speed.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/speed.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/speed.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/spkac.c b/src/openssl/openssl-1.1.1w-chevah2/apps/spkac.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/spkac.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/spkac.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/srp.c b/src/openssl/openssl-1.1.1w-chevah2/apps/srp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/srp.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/srp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/storeutl.c b/src/openssl/openssl-1.1.1w-chevah2/apps/storeutl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/storeutl.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/storeutl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/testCA.pem b/src/openssl/openssl-1.1.1w-chevah2/apps/testCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/testCA.pem rename to src/openssl/openssl-1.1.1w-chevah2/apps/testCA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/testdsa.h b/src/openssl/openssl-1.1.1w-chevah2/apps/testdsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/testdsa.h rename to src/openssl/openssl-1.1.1w-chevah2/apps/testdsa.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/testrsa.h b/src/openssl/openssl-1.1.1w-chevah2/apps/testrsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/testrsa.h rename to src/openssl/openssl-1.1.1w-chevah2/apps/testrsa.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/timeouts.h b/src/openssl/openssl-1.1.1w-chevah2/apps/timeouts.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/timeouts.h rename to src/openssl/openssl-1.1.1w-chevah2/apps/timeouts.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/ts.c b/src/openssl/openssl-1.1.1w-chevah2/apps/ts.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/ts.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/ts.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/tsget.in b/src/openssl/openssl-1.1.1w-chevah2/apps/tsget.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/tsget.in rename to src/openssl/openssl-1.1.1w-chevah2/apps/tsget.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/verify.c b/src/openssl/openssl-1.1.1w-chevah2/apps/verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/verify.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/verify.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/version.c b/src/openssl/openssl-1.1.1w-chevah2/apps/version.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/version.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/version.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_argv.c b/src/openssl/openssl-1.1.1w-chevah2/apps/vms_decc_argv.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_argv.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/vms_decc_argv.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_init.c b/src/openssl/openssl-1.1.1w-chevah2/apps/vms_decc_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/vms_decc_init.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/vms_decc_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.c b/src/openssl/openssl-1.1.1w-chevah2/apps/vms_term_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/vms_term_sock.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.h b/src/openssl/openssl-1.1.1w-chevah2/apps/vms_term_sock.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/vms_term_sock.h rename to src/openssl/openssl-1.1.1w-chevah2/apps/vms_term_sock.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/win32_init.c b/src/openssl/openssl-1.1.1w-chevah2/apps/win32_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/win32_init.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/win32_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/apps/x509.c b/src/openssl/openssl-1.1.1w-chevah2/apps/x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/apps/x509.c rename to src/openssl/openssl-1.1.1w-chevah2/apps/x509.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/build.info b/src/openssl/openssl-1.1.1w-chevah2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/build.info rename to src/openssl/openssl-1.1.1w-chevah2/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/config b/src/openssl/openssl-1.1.1w-chevah2/config similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/config rename to src/openssl/openssl-1.1.1w-chevah2/config diff --git a/src/openssl/openssl-1.1.1w-chevah1/config.com b/src/openssl/openssl-1.1.1w-chevah2/config.com similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/config.com rename to src/openssl/openssl-1.1.1w-chevah2/config.com diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_nyi.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_nyi.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_nyi.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_nyi.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_unix.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_unix.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_unix.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_unix.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_vms.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_vms.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_vms.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_win.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win32.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_win32.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_win32.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_win32.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_wince.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_wince.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/LPdir_wince.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/LPdir_wince.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cbc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cbc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_cbc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cfb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_cfb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_cfb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_core.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_core.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_core.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_core.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ige.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_ige.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ige.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_ige.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_misc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_misc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_misc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_misc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ofb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_ofb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_ofb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_wrap.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_wrap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_wrap.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_wrap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_x86core.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_x86core.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/aes_x86core.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/aes_x86core.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ia64.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-ia64.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ia64.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-ia64.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-mips.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-mips.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-mips.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-parisc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-parisc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aes-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aes-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesfx-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesfx-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesfx-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesfx-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-mb-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha1-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha1-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-sha1-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha256-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-sha256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-sha256-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-sha256-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesni-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesni-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesp8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesp8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesp8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aest4-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aest4-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aest4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesv8-armx.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/aesv8-armx.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/aesv8-armx.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/bsaes-armv7.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/bsaes-armv7.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/bsaes-armv7.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/bsaes-armv7.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/asm/vpaes-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/asm/vpaes-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aes/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/aes/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aes/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aes/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/alphacpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/alphacpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/alphacpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/alphacpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aria/aria.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/aria/aria.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aria/aria.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aria/aria.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/aria/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/aria/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/aria/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/aria/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/arm64cpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/arm64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/arm64cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/arm64cpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/arm_arch.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/arm_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/arm_arch.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/arm_arch.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/armcap.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/armcap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/armcap.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/armcap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/armv4cpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/armv4cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/armv4cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/armv4cpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_bitstr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_bitstr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_bitstr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_bitstr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_d2i_fp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_d2i_fp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_d2i_fp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_d2i_fp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_digest.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_digest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_digest.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_digest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_dup.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_dup.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_dup.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_dup.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_gentm.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_gentm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_gentm.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_gentm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_i2d_fp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_i2d_fp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_i2d_fp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_i2d_fp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_int.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_int.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_int.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_int.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_mbstr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_mbstr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_mbstr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_mbstr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_object.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_object.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_object.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_object.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_octet.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_octet.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_octet.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_octet.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_print.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_print.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_print.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strex.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_strex.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strex.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_strex.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strnid.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_strnid.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_strnid.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_strnid.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_time.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_time.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_time.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_time.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_type.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_type.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_type.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_type.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utctm.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_utctm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utctm.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_utctm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utf8.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_utf8.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_utf8.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_utf8.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_verify.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/a_verify.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/a_verify.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/ameth_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/ameth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/ameth_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/ameth_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_gen.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_gen.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_gen.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_item_list.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_item_list.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_item_list.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_item_list.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_item_list.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_par.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_par.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn1_par.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn1_par.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mime.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_mime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mime.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_mime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_moid.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_moid.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_moid.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_moid.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mstbl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_mstbl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_mstbl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_mstbl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_pack.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_pack.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/asn_pack.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/asn_pack.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/bio_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/bio_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_ndef.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/bio_ndef.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/bio_ndef.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/bio_ndef.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/charmap.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/charmap.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/charmap.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/charmap.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/charmap.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/d2i_pr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/d2i_pr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pu.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/d2i_pu.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/d2i_pu.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/d2i_pu.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/evp_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/evp_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/evp_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/evp_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_int.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/f_int.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_int.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/f_int.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_string.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/f_string.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/f_string.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/f_string.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/i2d_pr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/i2d_pr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pu.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/i2d_pu.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/i2d_pu.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/i2d_pu.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/n_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/n_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/n_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/n_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/nsseq.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/nsseq.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/nsseq.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/nsseq.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbe.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p5_pbe.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbe.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p5_pbe.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbev2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p5_pbev2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_pbev2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p5_pbev2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_scrypt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p5_scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p5_scrypt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p5_scrypt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p8_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p8_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/p8_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/p8_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/standard_methods.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/standard_methods.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/standard_methods.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/standard_methods.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_bitst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/t_bitst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_bitst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/t_bitst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/t_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/t_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_spki.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/t_spki.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/t_spki.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/t_spki.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_dec.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_dec.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_dec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_fre.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_fre.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_fre.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_fre.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_new.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_new.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_new.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_new.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_scn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_scn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_scn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_scn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_typ.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_typ.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_typ.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_typ.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_utl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tasn_utl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tasn_utl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tbl_standard.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tbl_standard.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/tbl_standard.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/tbl_standard.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_algor.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_algor.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_algor.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_algor.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_bignum.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_bignum.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_bignum.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_bignum.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_info.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_info.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_info.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_info.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_int64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_int64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_int64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_int64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_long.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_long.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_long.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_long.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_sig.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_sig.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_sig.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_sig.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_spki.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_spki.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_spki.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_spki.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_val.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_val.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/asn1/x_val.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/asn1/x_val.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_null.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_null.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_null.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_null.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_posix.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_posix.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_posix.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_posix.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_posix.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_win.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_win.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/arch/async_win.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/arch/async_win.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/async.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/async.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/async.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/async_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/async_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/async_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/async_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_wait.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/async_wait.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/async_wait.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/async_wait.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/async/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/async/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/async/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/async/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/asm/bf-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/asm/bf-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/asm/bf-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/asm/bf-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_cfb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_cfb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_cfb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ofb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_ofb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_ofb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_pi.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_pi.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_pi.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_pi.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/bf_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/bf_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bf/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/bf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bf/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bf/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_addr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_addr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_addr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_addr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_dump.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_dump.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_dump.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_dump.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_print.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_print.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_print.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_sock.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_sock2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/b_sock2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/b_sock2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_buff.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_buff.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_buff.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_buff.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_lbuf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_lbuf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_lbuf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_lbuf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_nbio.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_nbio.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_nbio.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_nbio.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_null.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bf_null.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bf_null.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_cb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_cb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_cb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_cb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_meth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bio_meth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bio_meth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_acpt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_acpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_acpt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_acpt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_bio.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_bio.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_bio.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_bio.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_conn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_conn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_conn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_conn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_dgram.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_dgram.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_dgram.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_dgram.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_fd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_fd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_fd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_fd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_file.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_file.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_file.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_file.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_log.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_log.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_log.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_log.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_mem.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_mem.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_mem.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_mem.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_null.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_null.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_null.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_sock.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/bss_sock.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/bss_sock.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bio/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/bio/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bio/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bio/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_impl.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2_impl.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_impl.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2_impl.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2b.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2b.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2b.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2b.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2s.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2s.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/blake2s.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/blake2s.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2b.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/m_blake2b.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2b.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/m_blake2b.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2s.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/m_blake2s.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/blake2/m_blake2s.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/blake2/m_blake2s.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/README.pod b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/README.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/README.pod rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/README.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/alpha-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/alpha-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/alpha-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/alpha-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/armv4-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/armv4-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/armv4-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv4-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/armv4-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv8-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/armv8-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/armv8-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/armv8-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/bn-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/bn-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-c64xplus.asm b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/bn-c64xplus.asm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/bn-c64xplus.asm rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/bn-c64xplus.asm diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/c64xplus-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/c64xplus-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/c64xplus-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/c64xplus-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/co-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/co-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/co-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/co-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ia64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ia64-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ia64.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ia64.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ia64.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/mips-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/mips-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/mips.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/mips.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/parisc-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/parisc-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/parisc-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/parisc-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ppc-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ppc-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc64-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ppc64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/ppc64-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/ppc64-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-avx2.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/rsaz-avx2.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-avx2.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/rsaz-avx2.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/rsaz-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/rsaz-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/rsaz-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/s390x-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/s390x-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/s390x-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/s390x-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/s390x.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/s390x.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/s390x.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparct4-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparct4-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparct4-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparct4-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv8.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv8.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8plus.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv8plus.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv8plus.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv8plus.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv9-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv9-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv9-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv9-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9a-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv9a-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/sparcv9a-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/sparcv9a-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/via-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/via-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/via-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/via-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/vis3-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/vis3-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/vis3-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/vis3-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gcc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-gcc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gcc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-gcc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gf2m.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-gf2m.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-gf2m.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-mont.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont5.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-mont5.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/asm/x86_64-mont5.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/asm/x86_64-mont5.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_add.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_add.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_add.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_add.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_asm.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_asm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_asm.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_asm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_blind.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_blind.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_blind.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_blind.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_const.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_const.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_const.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_const.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_ctx.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_ctx.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_ctx.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_depr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_depr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_depr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_dh.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_dh.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_dh.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_dh.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_div.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_div.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_div.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_div.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_exp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_exp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_exp2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_exp2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_exp2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gcd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_gcd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gcd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_gcd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gf2m.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_gf2m.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_gf2m.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_gf2m.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_intern.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_intern.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_intern.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_intern.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_kron.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_kron.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_kron.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_kron.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mod.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mod.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mod.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mod.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mont.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mont.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mont.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mont.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mpi.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mpi.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mpi.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mpi.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mul.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mul.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_mul.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_mul.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_nist.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_nist.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_nist.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_nist.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_prime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_prime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_prime.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_prime.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_prime.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_prime.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_prime.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_print.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_print.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_print.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_rand.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_rand.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_rand.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_recp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_recp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_recp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_recp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_shift.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_shift.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_shift.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_shift.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_sqr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_sqr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqrt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_sqrt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_sqrt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_sqrt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_srp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_srp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_srp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_srp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_word.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_word.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_word.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_word.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_x931p.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_x931p.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/bn_x931p.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/bn_x931p.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/rsaz_exp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/rsaz_exp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/bn/rsaz_exp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/bn/rsaz_exp.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/bn/rsaz_exp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buf_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/buffer/buf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buf_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/buffer/buf_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buffer.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/buffer/buffer.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/buffer.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/buffer/buffer.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/buffer/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/buffer/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/buffer/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/c64xpluscpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/c64xpluscpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/c64xpluscpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/c64xpluscpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/asm/cmll-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/asm/cmll-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/asm/cmll-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmll-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/asm/cmll-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmllt4-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/asm/cmllt4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/asm/cmllt4-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/asm/cmllt4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/camellia.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/camellia.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/camellia.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/camellia.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cbc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cbc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_cbc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cfb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_cfb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_cfb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ctr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_ctr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ctr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_ctr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_misc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_misc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_misc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_misc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ofb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/camellia/cmll_ofb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/camellia/cmll_ofb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/asm/cast-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/asm/cast-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/asm/cast-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/asm/cast-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_cfb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_cfb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_cfb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ofb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_ofb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_ofb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/c_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/c_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/cast_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/cast_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_s.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/cast/cast_s.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cast/cast_s.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cast/cast_s.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/asm/chacha-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/asm/chacha-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/chacha_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/chacha_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/chacha/chacha_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/chacha/chacha_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/cm_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/cm_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/cm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cm_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/cm_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cmac.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/cmac.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cmac/cmac.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cmac/cmac.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_att.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_att.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_att.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_att.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_cd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_cd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_cd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_cd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_dd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_dd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_dd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_dd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_env.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_env.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_env.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_env.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_ess.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_ess.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_ess.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_ess.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_io.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_io.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_io.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_io.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_kari.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_kari.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_kari.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_kari.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_pwri.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_pwri.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_pwri.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_pwri.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_sd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_sd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_sd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_sd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_smime.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_smime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cms/cms_smime.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cms/cms_smime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/comp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/comp/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/comp/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/c_zlib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/comp/c_zlib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/comp/c_zlib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/comp/c_zlib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/comp/comp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/comp/comp_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/comp/comp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/comp/comp_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/comp/comp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/comp/comp_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/comp/comp_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_api.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_api.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_api.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_api.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_def.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_def.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_def.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_def.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_def.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mall.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_mall.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mall.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_mall.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mod.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_mod.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_mod.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_mod.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_sap.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_sap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_sap.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_sap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_ssl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/conf_ssl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/conf_ssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/conf/keysets.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/conf/keysets.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/conf/keysets.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/conf/keysets.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cpt_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cpt_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cpt_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cpt_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cryptlib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cryptlib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cryptlib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cryptlib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_b64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_b64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_b64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_b64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_log.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_log.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_log.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_log.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_oct.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_oct.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_oct.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_policy.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_policy.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_policy.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_policy.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_sct.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_sct.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct_ctx.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_sct_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_sct_ctx.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_sct_ctx.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_vfy.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_vfy.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_vfy.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_x509v3.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_x509v3.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ct/ct_x509v3.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ct/ct_x509v3.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ctype.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ctype.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ctype.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ctype.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/cversion.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/cversion.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/cversion.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/cversion.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/crypt586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/crypt586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/crypt586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/crypt586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/des-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/des-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des_enc.m4 b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/des_enc.m4 similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/des_enc.m4 rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/des_enc.m4 diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/desboth.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/desboth.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/desboth.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/desboth.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/dest4-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/dest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/asm/dest4-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/asm/dest4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_cksm.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/cbc_cksm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_cksm.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/cbc_cksm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/cbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/cbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/cbc_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64ede.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/cfb64ede.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64ede.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/cfb64ede.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/cfb64enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb64enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/cfb64enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/cfb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/cfb_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/cfb_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/des_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/des_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/des_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/des_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/des_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb3_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/ecb3_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb3_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/ecb3_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/ecb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/ecb_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/ecb_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/fcrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/fcrypt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt_b.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/fcrypt_b.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/fcrypt_b.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/fcrypt_b.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ncbc_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/ncbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/ncbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/ncbc_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64ede.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/ofb64ede.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64ede.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/ofb64ede.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/ofb64enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb64enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/ofb64enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/ofb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/ofb_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/ofb_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/pcbc_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/pcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/pcbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/pcbc_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/qud_cksm.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/qud_cksm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/qud_cksm.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/qud_cksm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/rand_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/rand_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/rand_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/rand_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/set_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/set_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/set_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/set_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/spr.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/spr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/spr.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/spr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/str2key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/str2key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/str2key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/str2key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/des/xcbc_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/des/xcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/des/xcbc_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/des/xcbc_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh1024.pem b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh1024.pem rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh1024.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh192.pem b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh192.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh192.pem rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh192.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh2048.pem b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh2048.pem rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh2048.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh4096.pem b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh4096.pem rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh4096.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh512.pem b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh512.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh512.pem rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh512.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_check.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_check.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_check.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_check.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_depr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_depr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_depr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_gen.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_gen.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_gen.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_kdf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_kdf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_kdf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_kdf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_meth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_meth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_meth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc5114.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_rfc5114.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc5114.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_rfc5114.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc7919.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_rfc7919.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dh/dh_rfc7919.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dh/dh_rfc7919.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dllmain.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dllmain.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dllmain.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dllmain.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_depr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_depr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_depr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_gen.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_gen.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_gen.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_meth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_meth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_meth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ossl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_ossl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_ossl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_vrf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dsa/dsa_vrf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dsa/dsa_vrf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_dl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_dl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dlfcn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_dlfcn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_dlfcn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_dlfcn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_openssl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_openssl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_openssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_vms.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_vms.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_vms.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_win32.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_win32.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/dso/dso_win32.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/dso/dso_win32.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ebcdic.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ebcdic.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ebcdic.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ebcdic.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-ppc64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-ppc64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-ppc64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/ecp_nistz256-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/ecp_nistz256-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-ppc64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/x25519-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-ppc64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/x25519-ppc64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/x25519-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/asm/x25519-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/asm/x25519-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve25519.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve25519.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve25519.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve25519.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/arch_intrinsics.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/arch_32/arch_intrinsics.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/arch_intrinsics.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/arch_32/arch_intrinsics.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/arch_32/f_impl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/arch_32/f_impl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/arch_32/f_impl.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/arch_32/f_impl.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/arch_32/f_impl.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_tables.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448_tables.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448_tables.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448_tables.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448utils.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448utils.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/curve448utils.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/curve448utils.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/ed448.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/ed448.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/ed448.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/ed448.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/eddsa.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/eddsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/eddsa.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/eddsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/f_generic.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/f_generic.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/f_generic.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/f_generic.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/field.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/field.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/field.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/field.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/point_448.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/point_448.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/point_448.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/point_448.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/scalar.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/scalar.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/scalar.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/scalar.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/word.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/word.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/curve448/word.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/curve448/word.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_oct.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec2_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_oct.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec2_oct.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_smpl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec2_smpl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec2_smpl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec2_smpl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_check.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_check.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_check.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_check.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_curve.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_curve.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_curve.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_curve.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_cvt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_cvt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_cvt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_cvt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_kmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_kmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_kmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_kmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_mult.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_mult.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_mult.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_mult.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_oct.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_oct.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_oct.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_print.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ec_print.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ec_print.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_kdf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdh_kdf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_kdf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdh_kdf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_ossl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdh_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdh_ossl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdh_ossl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_ossl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_ossl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdsa_ossl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdsa_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_vrf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecdsa_vrf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecdsa_vrf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/eck_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/eck_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/eck_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/eck_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_mont.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_mont.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_mont.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_mont.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nist.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nist.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nist.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nist.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp224.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistp224.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp224.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistp224.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp256.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistp256.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp256.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistp256.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp521.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistp521.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistp521.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistp521.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistputil.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistputil.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistputil.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistputil.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistz256.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistz256.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256_table.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistz256_table.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_nistz256_table.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_nistz256_table.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_oct.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_oct.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_oct.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_smpl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_smpl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecp_smpl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecp_smpl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecx_meth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecx_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ec/ecx_meth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ec/ecx_meth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/README b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/README rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_all.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_all.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_all.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_cnf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_cnf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_cnf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_cnf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_ctrl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_ctrl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_ctrl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_ctrl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_devcrypto.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_devcrypto.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_devcrypto.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_devcrypto.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_dyn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_dyn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_dyn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_dyn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_fat.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_fat.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_fat.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_fat.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_init.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_init.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_list.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_list.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_list.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_list.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_openssl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_openssl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_openssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_rdrand.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_rdrand.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_rdrand.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_rdrand.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_table.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_table.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/eng_table.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/eng_table.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_asnmth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_asnmth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_asnmth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_asnmth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_cipher.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_cipher.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_cipher.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_cipher.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dh.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_dh.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dh.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_dh.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_digest.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_digest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_digest.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_digest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dsa.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_dsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_dsa.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_dsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_eckey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_eckey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_eckey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_eckey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_pkmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_pkmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_pkmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_pkmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rand.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rand.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_rand.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rsa.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/engine/tb_rsa.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/engine/tb_rsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/README b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/README rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_all.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/err_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_all.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/err_all.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/err_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/err_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/err_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.ec b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/openssl.ec similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.ec rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/openssl.ec diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.txt b/src/openssl/openssl-1.1.1w-chevah2/crypto/err/openssl.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/err/openssl.txt rename to src/openssl/openssl-1.1.1w-chevah2/crypto/err/openssl.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_b64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_b64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_b64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_b64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_md.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_md.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_md.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_md.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_ok.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_ok.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/bio_ok.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/bio_ok.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_allc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/c_allc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_allc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/c_allc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_alld.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/c_alld.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/c_alld.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/c_alld.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/cmeth_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/cmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/cmeth_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/cmeth_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/digest.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/digest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/digest.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/digest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aes.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aes.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aes_cbc_hmac_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aes_cbc_hmac_sha1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha256.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aes_cbc_hmac_sha256.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aes_cbc_hmac_sha256.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aes_cbc_hmac_sha256.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aria.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aria.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_aria.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_aria.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_bf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_bf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_bf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_bf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_camellia.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_camellia.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_camellia.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_camellia.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_cast.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_cast.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_cast.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_cast.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_chacha20_poly1305.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_chacha20_poly1305.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_chacha20_poly1305.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_chacha20_poly1305.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_des.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_des.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des3.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_des3.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_des3.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_des3.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_idea.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_idea.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_idea.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_idea.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_null.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_null.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_null.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_old.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_old.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_old.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_old.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc4.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc4.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4_hmac_md5.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc4_hmac_md5.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc4_hmac_md5.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc4_hmac_md5.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc5.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc5.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_rc5.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_rc5.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_seed.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_seed.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_seed.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_seed.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_sm4.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_sm4.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_sm4.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_sm4.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_xcbc_d.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_xcbc_d.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/e_xcbc_d.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/e_xcbc_d.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/encode.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/encode.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/encode.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/encode.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_cnf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_cnf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_cnf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_cnf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pbe.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_pbe.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pbe.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_pbe.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/evp_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/evp_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md4.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md4.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md4.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md4.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md5.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md5.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5_sha1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md5_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_md5_sha1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_md5_sha1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_mdc2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_mdc2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_mdc2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_mdc2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_null.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_null.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_null.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_ripemd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_ripemd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_ripemd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_ripemd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_sha1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha3.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_sha3.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sha3.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_sha3.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sigver.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_sigver.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_sigver.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_sigver.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_wp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_wp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/m_wp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/m_wp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/names.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/names.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/names.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/names.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p5_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p5_crpt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p5_crpt2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p5_crpt2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p5_crpt2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_dec.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_dec.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_dec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_open.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_open.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_open.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_open.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_seal.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_seal.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_seal.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_seal.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_verify.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/p_verify.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/p_verify.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pbe_scrypt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pbe_scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pbe_scrypt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pbe_scrypt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_fn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pmeth_fn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_fn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pmeth_fn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_gn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pmeth_gn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_gn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pmeth_gn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/evp/pmeth_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/evp/pmeth_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ex_data.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ex_data.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ex_data.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ex_data.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/getenv.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/getenv.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/getenv.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/getenv.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hm_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hm_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hm_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hm_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hmac.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hmac.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hmac_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/hmac/hmac_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/hmac/hmac_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ia64cpuid.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/ia64cpuid.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ia64cpuid.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ia64cpuid.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cbc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cbc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_cbc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cfb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_cfb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_cfb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ofb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_ofb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_ofb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/i_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/i_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/idea/idea_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/idea/idea_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/idea/idea_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/idea/idea_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/init.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/init.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/hkdf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/hkdf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/hkdf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/hkdf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/kdf_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/kdf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/kdf_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/kdf_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/scrypt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/scrypt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/scrypt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/tls1_prf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/tls1_prf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/kdf/tls1_prf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/kdf/tls1_prf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lh_stats.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/lh_stats.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lh_stats.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/lh_stats.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/lhash.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/lhash.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/lhash_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/lhash/lhash_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/lhash/lhash_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md2/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/md2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md2/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md2/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/md2/md2_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md2/md2_dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_one.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/md2/md2_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md2/md2_one.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md2/md2_one.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/md4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md4/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md4/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/md4/md4_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md4/md4_dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/md4/md4_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md4/md4_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_one.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/md4/md4_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md4/md4_one.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md4/md4_one.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/asm/md5-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/asm/md5-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/asm/md5-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/asm/md5-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/asm/md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/asm/md5-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/asm/md5-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/md5_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/md5_dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/md5_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/md5_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_one.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/md5/md5_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/md5/md5_one.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/md5/md5_one.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/mdc2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mdc2/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2_one.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/mdc2/mdc2_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2_one.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mdc2/mdc2_one.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/mdc2/mdc2dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mdc2/mdc2dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mdc2/mdc2dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mem.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/mem.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mem.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mem.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mem_clr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/mem_clr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mem_clr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mem_clr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mem_dbg.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/mem_dbg.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mem_dbg.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mem_dbg.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mem_sec.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/mem_sec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mem_sec.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mem_sec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/mips_arch.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/mips_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/mips_arch.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/mips_arch.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/aesni-gcm-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/aesni-gcm-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/aesni-gcm-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/aesni-gcm-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-alpha.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-alpha.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-alpha.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-alpha.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-ia64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-ia64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-parisc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-parisc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghash-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghash-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashp8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghashp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashp8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghashp8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashv8-armx.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghashv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/asm/ghashv8-armx.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/asm/ghashv8-armx.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cbc128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/cbc128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cbc128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/cbc128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ccm128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ccm128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ccm128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ccm128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cfb128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/cfb128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cfb128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/cfb128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ctr128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ctr128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ctr128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ctr128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cts128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/cts128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/cts128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/cts128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/gcm128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/gcm128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/gcm128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/gcm128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/modes_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/modes_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/modes_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/modes_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ocb128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ocb128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ocb128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ocb128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ofb128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ofb128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/ofb128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/ofb128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/wrap128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/wrap128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/wrap128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/wrap128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/modes/xts128.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/modes/xts128.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/modes/xts128.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/modes/xts128.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/o_dir.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/o_dir.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/o_dir.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/o_dir.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/o_fips.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/o_fips.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/o_fips.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/o_fips.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/o_fopen.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/o_fopen.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/o_fopen.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/o_fopen.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/o_init.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/o_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/o_init.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/o_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/o_str.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/o_str.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/o_str.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/o_str.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/o_time.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/o_time.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/o_time.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/o_time.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/README b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/README rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/o_names.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/o_names.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/o_names.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/o_names.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_dat.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_dat.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_dat.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_dat.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_dat.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_dat.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_dat.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_mac.num b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_mac.num similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_mac.num rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_mac.num diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_xref.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_xref.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_xref.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_xref.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.txt b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_xref.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/obj_xref.txt rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/obj_xref.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/objects.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/objects.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.txt b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/objects.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objects.txt rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/objects.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objxref.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/objects/objxref.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/objects/objxref.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/objects/objxref.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_asn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_asn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_asn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_asn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_cl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_cl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_cl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_cl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ext.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_ext.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ext.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_ext.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ht.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_ht.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_ht.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_ht.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_srv.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_srv.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_srv.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_srv.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_vfy.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/ocsp_vfy.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/ocsp_vfy.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/v3_ocsp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/v3_ocsp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ocsp/v3_ocsp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ocsp/v3_ocsp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pariscid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/pariscid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pariscid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pariscid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_all.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_all.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_all.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_info.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_info.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_info.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_info.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_oth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_oth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_oth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_oth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pk8.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_pk8.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pk8.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_pk8.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_pkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_pkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_x509.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_x509.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_x509.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_xaux.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_xaux.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pem_xaux.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pem_xaux.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pvkfmt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pvkfmt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pem/pvkfmt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pem/pvkfmt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/README b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/README rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/arm-xlate.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/arm-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/arm-xlate.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/arm-xlate.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/cbc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/cbc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/cbc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/cbc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/ppc-xlate.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/ppc-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/ppc-xlate.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/ppc-xlate.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/sparcv9_modes.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/sparcv9_modes.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/sparcv9_modes.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/sparcv9_modes.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86_64-xlate.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86_64-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86_64-xlate.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86_64-xlate.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86asm.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86asm.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86asm.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86asm.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86gas.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86gas.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86gas.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86gas.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86masm.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86masm.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86masm.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86masm.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86nasm.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86nasm.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/perlasm/x86nasm.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/perlasm/x86nasm.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_add.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_add.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_add.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_add.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_asn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_asn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_asn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_asn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_attr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_attr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_attr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_attr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crpt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crpt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_crpt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_crt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_crt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_crt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_decr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_decr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_decr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_decr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_init.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_init.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_key.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_key.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_key.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_key.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_kiss.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_kiss.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_kiss.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_kiss.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_mutl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_mutl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_mutl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_mutl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_npas.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_npas.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_npas.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_npas.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8d.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_p8d.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8d.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_p8d.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8e.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_p8e.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_p8e.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_p8e.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_sbag.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_sbag.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_sbag.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_sbag.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_utl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/p12_utl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/p12_utl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/pk12err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/pk12err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs12/pk12err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs12/pk12err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/bio_pk7.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/bio_pk7.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/bio_pk7.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/bio_pk7.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_attr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_attr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_attr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_attr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_doit.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_doit.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_doit.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_doit.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_mime.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_mime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_mime.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_mime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_smime.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_smime.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pk7_smime.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pk7_smime.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pkcs7err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pkcs7err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/pkcs7/pkcs7err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/pkcs7/pkcs7err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-mips.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-mips.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-mips.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppcfp.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-ppcfp.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-ppcfp.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-ppcfp.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/asm/poly1305-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/asm/poly1305-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_base2_44.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_base2_44.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_base2_44.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_base2_44.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ieee754.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_ieee754.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_ieee754.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_ieee754.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/poly1305/poly1305_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/poly1305/poly1305_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ppc_arch.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ppc_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ppc_arch.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ppc_arch.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ppccap.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ppccap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ppccap.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ppccap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ppccpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ppccpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ppccpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ppccpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_ctr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/drbg_ctr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_ctr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/drbg_ctr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/drbg_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/drbg_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/drbg_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_egd.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_egd.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_egd.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_egd.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_unix.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_unix.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_unix.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_unix.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_vms.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_vms.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_vms.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_win.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/rand_win.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/rand_win.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rand/randfile.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rand/randfile.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rand/randfile.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rand/randfile.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_cbc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_cbc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_cbc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2cfb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2cfb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2cfb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2ofb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc2/rc2ofb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc2/rc2ofb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-md5-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-md5-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-md5-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-parisc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-parisc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/asm/rc4-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/asm/rc4-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/rc4_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/rc4_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/rc4_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/rc4_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/rc4_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc4/rc4_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc4/rc4_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/asm/rc5-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/asm/rc5-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/asm/rc5-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/asm/rc5-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_enc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5cfb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5cfb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5cfb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5ofb64.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rc5/rc5ofb64.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rc5/rc5ofb64.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/asm/rmd-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/asm/rmd-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/asm/rmd-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/asm/rmd-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmd_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmd_dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmd_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmd_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_one.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmd_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmd_one.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmd_one.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmdconst.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmdconst.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ripemd/rmdconst.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ripemd/rmdconst.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_chk.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_chk.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_chk.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_chk.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_crpt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_crpt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_crpt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_depr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_depr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_depr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_gen.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_gen.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_gen.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_meth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_meth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_meth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_mp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_mp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_mp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_mp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_none.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_none.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_none.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_none.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_oaep.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_oaep.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_oaep.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_oaep.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ossl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ossl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_ossl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pk1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_pk1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pk1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_pk1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pss.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_pss.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_pss.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_pss.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_saos.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_saos.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_saos.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_saos.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ssl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_ssl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_ssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_x931.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_x931.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931g.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_x931g.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/rsa/rsa_x931g.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/rsa/rsa_x931g.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/s390x_arch.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/s390x_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/s390x_arch.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/s390x_arch.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcap.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/s390xcap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcap.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/s390xcap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/s390xcpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/s390xcpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/s390xcpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cbc.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cbc.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_cbc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cfb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_cfb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_cfb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ecb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ecb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_ecb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ofb.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/seed/seed_ofb.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/seed/seed_ofb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx2.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-avx2.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx2.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-avx2.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-avx512.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-avx512.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512vl.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-avx512vl.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-avx512vl.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-avx512vl.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-c64x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-c64x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-c64x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-c64x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-mmx.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-mmx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-mmx.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-mmx.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-ppc64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-ppc64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-ppc64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600p8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/keccak1600p8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/keccak1600p8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-alpha.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-alpha.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-alpha.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-alpha.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv4-large.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-armv4-large.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv4-large.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-armv4-large.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ia64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-ia64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mb-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mips.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-mips.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-mips.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-parisc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-parisc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9a.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-sparcv9a.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-sparcv9a.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-sparcv9a.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-thumb.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-thumb.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-thumb.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-thumb.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha1-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha1-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-mb-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha256-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha256-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-586.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-586.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-586.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv4.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv4.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-armv4.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv8.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-armv8.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-armv8.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-c64xplus.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-c64xplus.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ia64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-ia64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-mips.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-mips.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-mips.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-parisc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-parisc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-parisc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-s390x.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-s390x.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-s390x.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-sparcv9.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-sparcv9.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512p8-ppc.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/asm/sha512p8-ppc.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/asm/sha512p8-ppc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/keccak1600.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/keccak1600.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/keccak1600.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/keccak1600.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1_one.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha1_one.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1_one.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha1_one.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha1dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha1dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha1dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha256.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha256.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha256.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha256.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha512.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha512.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha512.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha512.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sha/sha_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sha/sha_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_ameth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_ameth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash_ameth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/siphash/siphash_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/siphash/siphash_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_crypt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_crypt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_crypt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_crypt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_pmeth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_pmeth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_pmeth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm2/sm2_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm2/sm2_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/m_sm3.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/m_sm3.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/m_sm3.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/m_sm3.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/sm3.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/sm3.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/sm3_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm3/sm3_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm3/sm3_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm4/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/sm4.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sm4/sm4.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sm4/sm4.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sm4/sm4.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sparc_arch.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/sparc_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sparc_arch.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sparc_arch.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sparccpuid.S b/src/openssl/openssl-1.1.1w-chevah2/crypto/sparccpuid.S similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sparccpuid.S rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sparccpuid.S diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/sparcv9cap.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/sparcv9cap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/sparcv9cap.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/sparcv9cap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/srp/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/srp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/srp/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/srp/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/srp/srp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/srp/srp_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_vfy.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/srp/srp_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/srp/srp_vfy.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/srp/srp_vfy.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/stack/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/stack/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/stack/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/stack/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/stack/stack.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/stack/stack.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/stack/stack.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/stack/stack.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/loader_file.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/loader_file.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/loader_file.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/loader_file.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_init.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_init.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_register.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_register.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_register.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_register.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_strings.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_strings.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/store/store_strings.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/store/store_strings.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/threads_none.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/threads_none.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/threads_none.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/threads_none.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/threads_pthread.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/threads_pthread.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/threads_pthread.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/threads_pthread.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/threads_win.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/threads_win.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/threads_win.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/threads_win.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_conf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_conf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_conf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_print.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_req_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_print.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_req_print.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_utils.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_req_utils.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_req_utils.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_req_utils.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_print.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_print.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_print.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_print.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_sign.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_utils.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_utils.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_utils.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_utils.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_verify.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_rsp_verify.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_rsp_verify.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_verify_ctx.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_verify_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ts/ts_verify_ctx.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ts/ts_verify_ctx.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/txt_db/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/txt_db/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/txt_db.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/txt_db/txt_db.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/txt_db/txt_db.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/txt_db/txt_db.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_null.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_null.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_null.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_null.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_openssl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_openssl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_openssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_util.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_util.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/ui/ui_util.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/ui/ui_util.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/uid.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/uid.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/uid.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/uid.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/vms_rms.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/vms_rms.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/vms_rms.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/vms_rms.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-mmx.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/asm/wp-mmx.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-mmx.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/asm/wp-mmx.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/asm/wp-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/asm/wp-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/asm/wp-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_block.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/wp_block.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_block.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/wp_block.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_dgst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/wp_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_dgst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/wp_dgst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/wp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/whrlpool/wp_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/whrlpool/wp_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_dir.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/by_dir.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_dir.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/by_dir.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_file.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/by_file.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/by_file.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/by_file.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_crl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/t_crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_crl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/t_crl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_req.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/t_req.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_req.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/t_req.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_x509.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/t_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/t_x509.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/t_x509.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_att.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_att.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_att.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_att.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_cmp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_cmp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_cmp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_cmp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_d2.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_d2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_d2.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_d2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_def.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_def.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_def.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_def.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_ext.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_ext.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_ext.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_ext.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_lu.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_lu.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_lu.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_lu.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_meth.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_meth.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_meth.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_obj.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_obj.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_obj.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_obj.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_r2x.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_r2x.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_r2x.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_r2x.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_req.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_req.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_req.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_req.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_set.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_set.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_set.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_set.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_trs.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_trs.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_trs.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_trs.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_txt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_txt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_txt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_txt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_v3.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_v3.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_v3.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_v3.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vfy.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vfy.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_vfy.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vpm.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_vpm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509_vpm.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509_vpm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509cset.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509cset.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509cset.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509cset.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509name.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509name.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509name.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509name.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509rset.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509rset.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509rset.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509rset.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509spki.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509spki.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509spki.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509spki.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509type.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509type.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x509type.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x509type.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_all.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_all.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_all.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_all.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_attrib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_attrib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_attrib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_attrib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_crl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_crl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_crl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_exten.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_exten.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_exten.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_exten.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_name.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_name.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_name.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_name.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_pubkey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_pubkey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_pubkey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_pubkey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_req.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_req.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_req.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_req.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_x509.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509a.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_x509a.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509/x_x509a.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509/x_x509a.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/build.info b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/build.info rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/ext_dat.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/ext_dat.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/ext_dat.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/ext_dat.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_cache.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_cache.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_cache.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_cache.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_data.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_data.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_data.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_data.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_local.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_local.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_map.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_map.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_map.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_map.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_node.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_node.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_node.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_node.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_tree.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_tree.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/pcy_tree.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/pcy_tree.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/standard_exts.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/standard_exts.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/standard_exts.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/standard_exts.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_addr.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_addr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_addr.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_addr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_admis.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_admis.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.h b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_admis.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_admis.h rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_admis.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_akey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_akey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akeya.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_akeya.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_akeya.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_akeya.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_alt.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_alt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_alt.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_alt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_asid.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_asid.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_asid.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_asid.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bcons.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_bcons.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bcons.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_bcons.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bitst.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_bitst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_bitst.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_bitst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_conf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_conf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_conf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_cpols.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_cpols.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_cpols.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_cpols.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_crld.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_crld.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_crld.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_crld.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_enum.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_enum.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_enum.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_enum.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_extku.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_extku.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_extku.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_extku.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_genn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_genn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_genn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_genn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ia5.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_ia5.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ia5.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_ia5.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_info.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_info.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_info.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_info.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_int.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_int.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_int.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_int.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_lib.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ncons.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_ncons.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_ncons.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_ncons.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pci.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pci.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pci.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pci.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcia.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pcia.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcia.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pcia.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcons.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pcons.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pcons.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pcons.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pku.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pku.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pku.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pku.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pmaps.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pmaps.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_pmaps.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_pmaps.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_prn.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_prn.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_prn.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_purp.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_purp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_purp.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_purp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_skey.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_skey.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_skey.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_sxnet.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_sxnet.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_sxnet.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_sxnet.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_tlsf.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_tlsf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_tlsf.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_tlsf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_utl.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3_utl.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3_utl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3err.c b/src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x509v3/v3err.c rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x509v3/v3err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x86_64cpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/x86_64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x86_64cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x86_64cpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/crypto/x86cpuid.pl b/src/openssl/openssl-1.1.1w-chevah2/crypto/x86cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/crypto/x86cpuid.pl rename to src/openssl/openssl-1.1.1w-chevah2/crypto/x86cpuid.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/README b/src/openssl/openssl-1.1.1w-chevah2/demos/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/README rename to src/openssl/openssl-1.1.1w-chevah2/demos/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/Makefile b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/Makefile similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/Makefile rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/Makefile diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/README b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/README rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/accept.cnf b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/accept.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/accept.cnf rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/accept.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-arg.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/client-arg.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-arg.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/client-arg.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-conf.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/client-conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/client-conf.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/client-conf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/cmod.cnf b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/cmod.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/cmod.cnf rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/cmod.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/connect.cnf b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/connect.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/connect.cnf rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/connect.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/descrip.mms b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/descrip.mms similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/descrip.mms rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/descrip.mms diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/intca.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/intca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/intca.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/intca.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/root.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/root.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/saccept.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/saccept.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/saccept.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/saccept.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/sconnect.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/sconnect.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/sconnect.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/sconnect.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-arg.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-arg.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-arg.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-arg.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-cmod.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-cmod.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-cmod.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-cmod.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-conf.c b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-conf.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-conf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-ec.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-ec.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/server-ec.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/server-ec.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/server.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/server.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/server.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/server.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/shared.opt b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/shared.opt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/shared.opt rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/shared.opt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/bio/static.opt b/src/openssl/openssl-1.1.1w-chevah2/demos/bio/static.opt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/bio/static.opt rename to src/openssl/openssl-1.1.1w-chevah2/demos/bio/static.opt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/README b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/README rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/apps.cnf b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/apps.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/apps.cnf rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/apps.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/ckey.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/ckey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/ckey.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/ckey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/intkey.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/intkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/intkey.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/intkey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkacerts.sh b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/mkacerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkacerts.sh rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/mkacerts.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkxcerts.sh b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/mkxcerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/mkxcerts.sh rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/mkxcerts.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/rootkey.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/rootkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/rootkey.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/rootkey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/skey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/skey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey2.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/skey2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/apps/skey2.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/apps/skey2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/ca.cnf b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/ca.cnf rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/ca.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/mkcerts.sh b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/mkcerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/mkcerts.sh rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/mkcerts.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocspquery.sh b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/ocspquery.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocspquery.sh rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/ocspquery.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocsprun.sh b/src/openssl/openssl-1.1.1w-chevah2/demos/certs/ocsprun.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/certs/ocsprun.sh rename to src/openssl/openssl-1.1.1w-chevah2/demos/certs/ocsprun.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cacert.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cacert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cacert.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cacert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cakey.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cakey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cakey.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cakey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_comp.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_comp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_comp.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_comp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ddec.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_ddec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ddec.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_ddec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_dec.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_dec.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_dec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_denc.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_denc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_denc.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_denc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_enc.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_sign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign2.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_sign2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_sign2.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_sign2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_uncomp.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_uncomp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_uncomp.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_uncomp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ver.c b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_ver.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/cms_ver.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/cms_ver.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/comp.txt b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/comp.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/comp.txt rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/comp.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/encr.txt b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/encr.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/encr.txt rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/encr.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/sign.txt b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/sign.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/sign.txt rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/sign.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/signer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/signer.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer2.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/cms/signer2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/cms/signer2.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/cms/signer2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/engines/e_chil.txt b/src/openssl/openssl-1.1.1w-chevah2/demos/engines/e_chil.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/engines/e_chil.txt rename to src/openssl/openssl-1.1.1w-chevah2/demos/engines/e_chil.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/evp/Makefile b/src/openssl/openssl-1.1.1w-chevah2/demos/evp/Makefile similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/evp/Makefile rename to src/openssl/openssl-1.1.1w-chevah2/demos/evp/Makefile diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesccm.c b/src/openssl/openssl-1.1.1w-chevah2/demos/evp/aesccm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesccm.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/evp/aesccm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesgcm.c b/src/openssl/openssl-1.1.1w-chevah2/demos/evp/aesgcm.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/evp/aesgcm.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/evp/aesgcm.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkread.c b/src/openssl/openssl-1.1.1w-chevah2/demos/pkcs12/pkread.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkread.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/pkcs12/pkread.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkwrite.c b/src/openssl/openssl-1.1.1w-chevah2/demos/pkcs12/pkwrite.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/pkcs12/pkwrite.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/pkcs12/pkwrite.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/cacert.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/cacert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/cacert.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/cacert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/cakey.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/cakey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/cakey.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/cakey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/encr.txt b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/encr.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/encr.txt rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/encr.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/sign.txt b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/sign.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/sign.txt rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/sign.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/signer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/signer.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer2.pem b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/signer2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/signer2.pem rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/signer2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smdec.c b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/smdec.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/smdec.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/smdec.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smenc.c b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/smenc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/smenc.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/smenc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign.c b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/smsign.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/smsign.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign2.c b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/smsign2.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/smsign2.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/smsign2.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/demos/smime/smver.c b/src/openssl/openssl-1.1.1w-chevah2/demos/smime/smver.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/demos/smime/smver.c rename to src/openssl/openssl-1.1.1w-chevah2/demos/smime/smver.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/certificates.txt b/src/openssl/openssl-1.1.1w-chevah2/doc/HOWTO/certificates.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/certificates.txt rename to src/openssl/openssl-1.1.1w-chevah2/doc/HOWTO/certificates.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/keys.txt b/src/openssl/openssl-1.1.1w-chevah2/doc/HOWTO/keys.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/HOWTO/keys.txt rename to src/openssl/openssl-1.1.1w-chevah2/doc/HOWTO/keys.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/README b/src/openssl/openssl-1.1.1w-chevah2/doc/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/README rename to src/openssl/openssl-1.1.1w-chevah2/doc/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/dir-locals.example.el b/src/openssl/openssl-1.1.1w-chevah2/doc/dir-locals.example.el similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/dir-locals.example.el rename to src/openssl/openssl-1.1.1w-chevah2/doc/dir-locals.example.el diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/fingerprints.txt b/src/openssl/openssl-1.1.1w-chevah2/doc/fingerprints.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/fingerprints.txt rename to src/openssl/openssl-1.1.1w-chevah2/doc/fingerprints.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/CA.pl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/CA.pl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/CA.pl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/CA.pl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/asn1parse.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/asn1parse.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/asn1parse.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/asn1parse.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ca.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/ca.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/ca.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/ca.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ciphers.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/ciphers.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/ciphers.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/ciphers.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/cms.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/cms.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/cms.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/cms.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/crl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/crl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl2pkcs7.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/crl2pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/crl2pkcs7.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/crl2pkcs7.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dgst.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/dgst.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/dgst.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/dgst.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dhparam.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/dhparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/dhparam.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/dhparam.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsa.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/dsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsa.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/dsa.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsaparam.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/dsaparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/dsaparam.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/dsaparam.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ec.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/ec.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/ec.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/ec.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ecparam.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/ecparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/ecparam.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/ecparam.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/enc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/enc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/enc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/enc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/engine.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/engine.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/engine.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/engine.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/errstr.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/errstr.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/errstr.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/errstr.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/gendsa.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/gendsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/gendsa.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/gendsa.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/genpkey.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/genpkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/genpkey.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/genpkey.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/genrsa.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/genrsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/genrsa.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/genrsa.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/list.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/list.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/list.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/nseq.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/nseq.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/nseq.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/nseq.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ocsp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/ocsp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/ocsp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/ocsp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/openssl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/openssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/openssl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/openssl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/passwd.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/passwd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/passwd.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/passwd.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs12.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkcs12.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs12.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkcs12.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs7.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs7.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkcs7.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs8.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkcs8.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkcs8.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkcs8.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkey.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkey.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkey.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyparam.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkeyparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyparam.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkeyparam.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyutl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkeyutl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/pkeyutl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/pkeyutl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/prime.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/prime.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/prime.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/prime.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rand.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/rand.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/rand.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/rand.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rehash.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/rehash.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/rehash.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/rehash.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/req.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/req.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/req.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/req.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsa.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/rsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsa.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/rsa.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsautl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/rsautl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/rsautl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/rsautl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_client.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/s_client.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_client.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/s_client.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_server.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/s_server.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_server.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/s_server.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_time.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/s_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/s_time.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/s_time.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/sess_id.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/sess_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/sess_id.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/sess_id.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/smime.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/smime.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/smime.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/smime.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/speed.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/speed.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/speed.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/speed.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/spkac.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/spkac.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/spkac.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/spkac.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/srp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/srp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/srp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/srp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/storeutl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/storeutl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/storeutl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/storeutl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/ts.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/ts.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/ts.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/ts.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/tsget.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/tsget.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/tsget.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/tsget.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/verify.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/verify.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/verify.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/version.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/version.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/version.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man1/x509.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man1/x509.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man1/x509.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man1/x509.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ADMISSIONS.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ADMISSIONS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ADMISSIONS.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ADMISSIONS.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_INTEGER_get_int64.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_INTEGER_get_int64.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_INTEGER_get_int64.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_INTEGER_get_int64.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_ITEM_lookup.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_ITEM_lookup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_ITEM_lookup.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_ITEM_lookup.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_OBJECT_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_OBJECT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_OBJECT_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_OBJECT_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_TABLE_add.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_TABLE_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_TABLE_add.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_TABLE_add.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_length.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_length.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_length.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_length.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_print_ex.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_STRING_print_ex.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_STRING_print_ex.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TIME_set.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_TIME_set.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TIME_set.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_TIME_set.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TYPE_get.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_TYPE_get.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_TYPE_get.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_TYPE_get.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_generate_nconf.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_generate_nconf.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASN1_generate_nconf.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASN1_generate_nconf.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_WAIT_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASYNC_WAIT_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_WAIT_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASYNC_WAIT_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_start_job.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASYNC_start_job.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ASYNC_start_job.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ASYNC_start_job.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BF_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BF_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BF_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BF_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDR.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_ADDR.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDR.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_ADDR.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDRINFO.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_ADDRINFO.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ADDRINFO.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_ADDRINFO.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_connect.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_connect.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_connect.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ctrl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_ctrl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_ctrl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_base64.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_base64.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_base64.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_base64.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_buffer.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_buffer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_buffer.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_buffer.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_cipher.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_cipher.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_cipher.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_md.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_md.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_md.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_null.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_null.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_null.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_null.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_ssl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_f_ssl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_f_ssl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_find_type.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_find_type.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_find_type.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_find_type.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_data.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_get_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_data.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_get_data.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_ex_new_index.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_get_ex_new_index.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new_CMS.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_new_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_new_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_new_CMS.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_parse_hostserv.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_parse_hostserv.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_parse_hostserv.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_parse_hostserv.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_printf.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_printf.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_printf.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_printf.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_push.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_push.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_push.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_push.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_read.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_read.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_read.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_accept.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_accept.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_accept.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_accept.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_bio.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_bio.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_bio.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_connect.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_connect.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_connect.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_fd.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_fd.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_fd.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_file.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_file.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_file.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_mem.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_mem.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_mem.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_mem.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_null.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_null.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_null.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_null.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_socket.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_socket.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_s_socket.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_s_socket.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_set_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_set_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_set_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_set_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_should_retry.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_should_retry.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BIO_should_retry.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BIO_should_retry.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_BLINDING_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_BLINDING_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_BLINDING_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_BLINDING_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_start.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_CTX_start.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_CTX_start.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_CTX_start.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_add.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add_word.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_add_word.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_add_word.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_add_word.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_bn2bin.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_bn2bin.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_bn2bin.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_bn2bin.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_cmp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_cmp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_cmp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_copy.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_copy.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_copy.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_copy.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_generate_prime.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_generate_prime.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_generate_prime.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_generate_prime.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_inverse.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_mod_inverse.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_inverse.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_mod_inverse.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_montgomery.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_mod_mul_montgomery.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_montgomery.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_mod_mul_montgomery.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_reciprocal.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_mod_mul_reciprocal.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_mod_mul_reciprocal.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_mod_mul_reciprocal.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_num_bytes.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_num_bytes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_num_bytes.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_num_bytes.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_rand.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_rand.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_rand.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_rand.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_security_bits.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_security_bits.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_security_bits.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_security_bits.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_set_bit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_set_bit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_set_bit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_set_bit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_swap.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_swap.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_swap.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_swap.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_zero.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_zero.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BN_zero.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BN_zero.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/BUF_MEM_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/BUF_MEM_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/BUF_MEM_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/BUF_MEM_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add0_cert.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_add0_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add0_cert.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_add0_cert.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_recipient_cert.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_add1_recipient_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_recipient_cert.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_add1_recipient_cert.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_signer.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_add1_signer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_add1_signer.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_add1_signer.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_compress.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_compress.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_compress.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_compress.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_decrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_decrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_decrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_final.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_final.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_final.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_final.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_RecipientInfos.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get0_RecipientInfos.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_RecipientInfos.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get0_RecipientInfos.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_SignerInfos.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get0_SignerInfos.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_SignerInfos.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get0_SignerInfos.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_type.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get0_type.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get0_type.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get0_type.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get1_ReceiptRequest.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get1_ReceiptRequest.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_get1_ReceiptRequest.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_get1_ReceiptRequest.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign_receipt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_sign_receipt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_sign_receipt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_sign_receipt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_uncompress.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_uncompress.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_uncompress.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_uncompress.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_verify.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify_receipt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_verify_receipt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CMS_verify_receipt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CMS_verify_receipt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_free.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CONF_modules_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_free.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CONF_modules_free.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_load_file.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CONF_modules_load_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CONF_modules_load_file.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CONF_modules_load_file.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_THREAD_run_once.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CRYPTO_THREAD_run_once.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_THREAD_run_once.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CRYPTO_THREAD_run_once.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_get_ex_new_index.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CRYPTO_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_get_ex_new_index.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CRYPTO_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_memcmp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CRYPTO_memcmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CRYPTO_memcmp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CRYPTO_memcmp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_get0_log_by_id.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CTLOG_STORE_get0_log_by_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_get0_log_by_id.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CTLOG_STORE_get0_log_by_id.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CTLOG_STORE_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_STORE_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CTLOG_STORE_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CTLOG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CTLOG_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CTLOG_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/CT_POLICY_EVAL_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/CT_POLICY_EVAL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/CT_POLICY_EVAL_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/CT_POLICY_EVAL_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DEFINE_STACK_OF.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DEFINE_STACK_OF.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DEFINE_STACK_OF.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DEFINE_STACK_OF.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DES_random_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DES_random_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DES_random_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DES_random_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_generate_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_parameters.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_generate_parameters.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_generate_parameters.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get0_pqg.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_get0_pqg.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get0_pqg.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_get0_pqg.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get_1024_160.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_get_1024_160.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_get_1024_160.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_get_1024_160.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new_by_nid.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_new_by_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_new_by_nid.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_new_by_nid.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_set_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_set_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_set_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_size.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DH_size.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DH_size.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_SIG_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_SIG_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_SIG_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_do_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_do_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_do_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_do_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_dup_DH.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_dup_DH.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_dup_DH.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_dup_DH.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_generate_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_parameters.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_generate_parameters.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_generate_parameters.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_get0_pqg.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_get0_pqg.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_get0_pqg.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_get0_pqg.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_set_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_set_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_set_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_size.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DSA_size.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DSA_size.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_get_data_mtu.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DTLS_get_data_mtu.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_get_data_mtu.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DTLS_get_data_mtu.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_set_timer_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DTLS_set_timer_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLS_set_timer_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DTLS_set_timer_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLSv1_listen.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/DTLSv1_listen.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/DTLSv1_listen.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/DTLSv1_listen.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECDSA_SIG_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ECDSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECDSA_SIG_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ECDSA_SIG_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECPKParameters_print.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ECPKParameters_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ECPKParameters_print.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ECPKParameters_print.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GFp_simple_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_GFp_simple_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GFp_simple_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_GFp_simple_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_copy.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_GROUP_copy.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_copy.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_GROUP_copy.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_GROUP_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_GROUP_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_GROUP_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_get_enc_flags.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_KEY_get_enc_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_get_enc_flags.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_KEY_get_enc_flags.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_KEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_KEY_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_KEY_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_add.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_POINT_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_add.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_POINT_add.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_POINT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EC_POINT_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EC_POINT_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ENGINE_add.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ENGINE_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ENGINE_add.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ENGINE_add.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_GET_LIB.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_GET_LIB.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_GET_LIB.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_GET_LIB.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_clear_error.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_clear_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_clear_error.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_clear_error.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_error_string.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_error_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_error_string.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_error_string.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_get_error.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_get_error.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_get_error.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_crypto_strings.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_load_crypto_strings.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_crypto_strings.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_load_crypto_strings.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_strings.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_load_strings.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_load_strings.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_load_strings.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_print_errors.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_print_errors.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_print_errors.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_print_errors.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_put_error.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_put_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_put_error.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_put_error.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_remove_state.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_remove_state.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_remove_state.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_remove_state.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_set_mark.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_set_mark.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/ERR_set_mark.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/ERR_set_mark.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_BytesToKey.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_BytesToKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_BytesToKey.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_BytesToKey.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_CIPHER_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_CIPHER_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_CIPHER_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_DigestInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_DigestInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestSignInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_DigestSignInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestSignInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_DigestSignInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestVerifyInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_DigestVerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_DigestVerifyInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_DigestVerifyInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncodeInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_EncodeInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncodeInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_EncodeInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncryptInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_EncryptInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_EncryptInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_EncryptInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_MD_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_MD_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_MD_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_MD_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_OpenInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_OpenInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_OpenInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_OpenInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_ASN1_METHOD.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_ASN1_METHOD.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_ASN1_METHOD.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_ASN1_METHOD.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_ctrl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_ctrl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_asn1_get_count.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_asn1_get_count.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_asn1_get_count.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_asn1_get_count.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_cmp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_cmp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_cmp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_decrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_decrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_decrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_derive.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_derive.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_derive.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_derive.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_get_default_digest_nid.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_get_default_digest_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_get_default_digest_nid.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_get_default_digest_nid.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_keygen.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_keygen.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_keygen.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_keygen.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_get_count.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_meth_get_count.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_get_count.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_meth_get_count.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_print_private.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_print_private.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_print_private.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_print_private.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_set1_RSA.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_set1_RSA.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_set1_RSA.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_set1_RSA.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_size.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_size.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_size.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_verify.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify_recover.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_verify_recover.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_PKEY_verify_recover.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_PKEY_verify_recover.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SealInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_SealInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SealInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_SealInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SignInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_SignInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_SignInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_SignInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_VerifyInit.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_VerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_VerifyInit.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_VerifyInit.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aes.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_aes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aes.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_aes.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aria.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_aria.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_aria.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_aria.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_bf_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_bf_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_bf_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_bf_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_blake2b512.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_blake2b512.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_blake2b512.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_blake2b512.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_camellia.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_camellia.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_camellia.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_camellia.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_cast5_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_cast5_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_cast5_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_cast5_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_chacha20.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_chacha20.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_chacha20.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_chacha20.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_des.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_des.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_des.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_des.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_desx_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_desx_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_desx_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_desx_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_idea_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_idea_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_idea_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_idea_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md2.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_md2.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md2.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_md2.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md4.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_md4.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md4.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_md4.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md5.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_md5.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_md5.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_md5.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_mdc2.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_mdc2.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_mdc2.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_mdc2.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc2_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_rc2_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc2_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_rc2_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc4.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_rc4.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc4.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_rc4.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc5_32_12_16_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_rc5_32_12_16_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_rc5_32_12_16_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_rc5_32_12_16_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_ripemd160.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_ripemd160.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_ripemd160.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_ripemd160.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_seed_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_seed_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_seed_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_seed_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha1.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sha1.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha1.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sha1.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha224.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sha224.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha224.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sha224.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha3_224.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sha3_224.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sha3_224.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sha3_224.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm3.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sm3.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm3.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sm3.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm4_cbc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sm4_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_sm4_cbc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_sm4_cbc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_whirlpool.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_whirlpool.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/EVP_whirlpool.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/EVP_whirlpool.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/HMAC.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/HMAC.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/HMAC.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/HMAC.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/MD5.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/MD5.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/MD5.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/MD5.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/MDC2_Init.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/MDC2_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/MDC2_Init.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/MDC2_Init.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OBJ_nid2obj.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OBJ_nid2obj.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OBJ_nid2obj.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OBJ_nid2obj.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_REQUEST_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_REQUEST_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_REQUEST_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_REQUEST_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_cert_to_id.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_cert_to_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_cert_to_id.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_cert_to_id.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_request_add1_nonce.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_request_add1_nonce.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_request_add1_nonce.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_request_add1_nonce.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_resp_find_status.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_resp_find_status.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_resp_find_status.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_resp_find_status.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_response_status.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_response_status.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_response_status.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_response_status.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_sendreq_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_sendreq_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OCSP_sendreq_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OCSP_sendreq_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_Applink.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_Applink.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_Applink.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_Applink.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_COMPFUNC.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_LH_COMPFUNC.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_COMPFUNC.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_LH_COMPFUNC.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_stats.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_LH_stats.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_LH_stats.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_LH_stats.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_VERSION_NUMBER.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_VERSION_NUMBER.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_VERSION_NUMBER.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_VERSION_NUMBER.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_config.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_config.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_config.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_fork_prepare.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_fork_prepare.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_fork_prepare.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_fork_prepare.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_ia32cap.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_ia32cap.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_ia32cap.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_ia32cap.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_crypto.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_init_crypto.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_crypto.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_init_crypto.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_ssl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_init_ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_init_ssl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_init_ssl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_instrument_bus.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_instrument_bus.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_instrument_bus.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_instrument_bus.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_load_builtin_modules.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_load_builtin_modules.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_load_builtin_modules.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_load_builtin_modules.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_malloc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_malloc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_malloc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_malloc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_secure_malloc.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_secure_malloc.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OPENSSL_secure_malloc.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OPENSSL_secure_malloc.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_INFO.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_INFO.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_INFO.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_INFO.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_LOADER.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_LOADER.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_LOADER.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_LOADER.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_SEARCH.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_SEARCH.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_SEARCH.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_SEARCH.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_expect.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_expect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_expect.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_expect.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_open.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_open.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OSSL_STORE_open.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OSSL_STORE_open.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/OpenSSL_add_all_algorithms.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/OpenSSL_add_all_algorithms.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/OpenSSL_add_all_algorithms.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/OpenSSL_add_all_algorithms.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_bytes_read_bio.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_bytes_read_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_bytes_read_bio.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_bytes_read_bio.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_CMS.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read_CMS.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_PrivateKey.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read_bio_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_PrivateKey.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read_bio_PrivateKey.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_ex.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read_bio_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_read_bio_ex.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_read_bio_ex.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_CMS_stream.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_write_bio_CMS_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_CMS_stream.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_write_bio_CMS_stream.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_PKCS7_stream.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_write_bio_PKCS7_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PEM_write_bio_PKCS7_stream.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PEM_write_bio_PKCS7_stream.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_create.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS12_create.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_create.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS12_create.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_newpass.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS12_newpass.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_newpass.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS12_newpass.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_parse.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS12_parse.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS12_parse.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS12_parse.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS5_PBKDF2_HMAC.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS5_PBKDF2_HMAC.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS5_PBKDF2_HMAC.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS5_PBKDF2_HMAC.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_decrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_decrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_decrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign_add_signer.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_sign_add_signer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_sign_add_signer.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_sign_add_signer.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_verify.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/PKCS7_verify.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/PKCS7_verify.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_generate.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_generate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_generate.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_generate.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_get0_master.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_get0_master.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_get0_master.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_get0_master.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_reseed.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_reseed.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_reseed.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_reseed.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_callbacks.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_set_callbacks.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_callbacks.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_set_callbacks.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_ex_data.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_DRBG_set_ex_data.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_DRBG_set_ex_data.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_add.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_add.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_add.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_bytes.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_bytes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_bytes.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_bytes.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_cleanup.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_cleanup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_cleanup.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_cleanup.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_egd.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_egd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_egd.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_egd.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_load_file.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_load_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_load_file.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_load_file.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_set_rand_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_set_rand_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RAND_set_rand_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RAND_set_rand_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RC4_set_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RC4_set_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RC4_set_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RC4_set_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RIPEMD160_Init.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RIPEMD160_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RIPEMD160_Init.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RIPEMD160_Init.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_blinding_on.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_blinding_on.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_blinding_on.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_blinding_on.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_check_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_check_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_check_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_check_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_generate_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_generate_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_generate_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_get0_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_get0_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_get0_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_get0_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_padding_add_PKCS1_type_1.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_padding_add_PKCS1_type_1.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_padding_add_PKCS1_type_1.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_padding_add_PKCS1_type_1.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_print.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_print.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_print.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_private_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_private_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_private_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_private_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_public_encrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_public_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_public_encrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_public_encrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_set_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_set_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_set_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_size.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/RSA_size.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/RSA_size.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SCT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SCT_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_print.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SCT_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_print.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SCT_print.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_validate.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SCT_validate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SCT_validate.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SCT_validate.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SHA256_Init.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SHA256_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SHA256_Init.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SHA256_Init.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_CMS.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_read_CMS.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_PKCS7.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_read_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_read_PKCS7.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_read_PKCS7.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_CMS.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_write_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_CMS.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_write_CMS.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_PKCS7.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_write_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SMIME_write_PKCS7.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SMIME_write_PKCS7.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CIPHER_get_name.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CIPHER_get_name.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CIPHER_get_name.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CIPHER_get_name.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_COMP_add_compression_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_COMP_add_compression_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_COMP_add_compression_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_COMP_add_compression_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set1_prefix.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_set1_prefix.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set1_prefix.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_set1_prefix.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_flags.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_flags.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_set_flags.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_cmd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_cmd.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd_argv.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_cmd_argv.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CONF_cmd_argv.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CONF_cmd_argv.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add1_chain_cert.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_add1_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add1_chain_cert.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_add1_chain_cert.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_extra_chain_cert.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_add_extra_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_extra_chain_cert.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_add_extra_chain_cert.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_session.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_add_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_add_session.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_add_session.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_config.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_config.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_config.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_ctrl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_ctrl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_dane_enable.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_dane_enable.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_dane_enable.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_dane_enable.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_flush_sessions.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_flush_sessions.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_flush_sessions.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_flush_sessions.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_free.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_free.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_free.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get0_param.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get0_param.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_get0_param.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get_verify_mode.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_get_verify_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_get_verify_mode.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_get_verify_mode.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_has_client_custom_ext.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_has_client_custom_ext.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_has_client_custom_ext.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_has_client_custom_ext.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_load_verify_locations.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_load_verify_locations.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_load_verify_locations.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_load_verify_locations.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_number.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sess_number.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_number.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sess_number.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_cache_size.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sess_set_cache_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_cache_size.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sess_set_cache_size.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_get_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sess_set_get_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sess_set_get_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sess_set_get_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sessions.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sessions.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_sessions.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_sessions.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set0_CA_list.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set0_CA_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set0_CA_list.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set0_CA_list.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_curves.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set1_curves.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_curves.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set1_curves.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_sigalgs.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set1_sigalgs.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_sigalgs.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set1_sigalgs.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_verify_cert_store.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set1_verify_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set1_verify_cert_store.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set1_verify_cert_store.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_alpn_select_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_alpn_select_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_alpn_select_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_alpn_select_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cert_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_store.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_store.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cert_store.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_verify_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cert_verify_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cert_verify_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cert_verify_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cipher_list.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cipher_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_cipher_list.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_cipher_list.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_cert_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_client_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_cert_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_client_cert_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_hello_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_client_hello_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_client_hello_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_client_hello_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ct_validation_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ct_validation_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ct_validation_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ct_validation_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ctlog_list_file.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ctlog_list_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ctlog_list_file.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ctlog_list_file.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_default_passwd_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_default_passwd_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_default_passwd_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_default_passwd_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ex_data.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ex_data.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ex_data.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_generate_session_id.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_generate_session_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_generate_session_id.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_generate_session_id.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_info_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_info_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_info_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_info_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_keylog_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_keylog_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_keylog_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_keylog_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_max_cert_list.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_max_cert_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_max_cert_list.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_max_cert_list.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_min_proto_version.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_min_proto_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_min_proto_version.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_min_proto_version.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_mode.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_mode.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_mode.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_msg_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_msg_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_msg_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_msg_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_num_tickets.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_num_tickets.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_num_tickets.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_num_tickets.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_options.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_options.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_options.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_options.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_psk_client_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_psk_client_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_psk_client_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_psk_client_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_quiet_shutdown.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_quiet_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_quiet_shutdown.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_quiet_shutdown.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_read_ahead.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_read_ahead.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_read_ahead.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_read_ahead.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_record_padding_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_record_padding_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_record_padding_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_record_padding_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_security_level.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_security_level.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_security_level.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_security_level.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_cache_mode.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_session_cache_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_cache_mode.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_session_cache_mode.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_id_context.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_session_id_context.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_id_context.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_session_id_context.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_ticket_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_session_ticket_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_session_ticket_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_session_ticket_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_split_send_fragment.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_split_send_fragment.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_split_send_fragment.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_split_send_fragment.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ssl_version.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ssl_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_ssl_version.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_ssl_version.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_timeout.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_timeout.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_timeout.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_timeout.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_status_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_status_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_status_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_status_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tmp_dh_callback.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tmp_dh_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_tmp_dh_callback.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_tmp_dh_callback.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_verify.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_set_verify.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_set_verify.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_certificate.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_use_certificate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_certificate.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_use_certificate.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_psk_identity_hint.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_use_psk_identity_hint.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_psk_identity_hint.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_use_psk_identity_hint.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_serverinfo.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_use_serverinfo.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_CTX_use_serverinfo.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_CTX_use_serverinfo.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_free.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_free.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_free.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_cipher.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_cipher.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_cipher.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_hostname.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_hostname.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_hostname.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_hostname.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_id_context.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_id_context.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_id_context.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_id_context.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_peer.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_peer.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get0_peer.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get0_peer.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_compress_id.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_compress_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_compress_id.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_compress_id.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_ex_data.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_ex_data.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_ex_data.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_protocol_version.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_protocol_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_protocol_version.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_protocol_version.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_time.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_get_time.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_get_time.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_has_ticket.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_has_ticket.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_has_ticket.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_has_ticket.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_is_resumable.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_is_resumable.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_is_resumable.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_is_resumable.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_print.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_print.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_print.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_set1_id.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_set1_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_SESSION_set1_id.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_SESSION_set1_id.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_accept.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_accept.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_accept.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_accept.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alert_type_string.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_alert_type_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alert_type_string.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_alert_type_string.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alloc_buffers.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_alloc_buffers.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_alloc_buffers.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_alloc_buffers.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_check_chain.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_check_chain.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_check_chain.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_check_chain.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_clear.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_clear.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_clear.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_clear.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_connect.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_connect.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_connect.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_do_handshake.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_do_handshake.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_do_handshake.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_do_handshake.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_export_keying_material.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_export_keying_material.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_export_keying_material.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_export_keying_material.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_extension_supported.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_extension_supported.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_extension_supported.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_extension_supported.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_free.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_free.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_free.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get0_peer_scts.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get0_peer_scts.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get0_peer_scts.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get0_peer_scts.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_SSL_CTX.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_SSL_CTX.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_SSL_CTX.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_SSL_CTX.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_all_async_fds.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_all_async_fds.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_all_async_fds.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_all_async_fds.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_ciphers.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_ciphers.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_ciphers.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_ciphers.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_client_random.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_client_random.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_client_random.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_client_random.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_current_cipher.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_current_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_current_cipher.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_current_cipher.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_default_timeout.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_default_timeout.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_default_timeout.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_default_timeout.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_error.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_error.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_error.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_extms_support.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_extms_support.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_extms_support.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_extms_support.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_fd.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_fd.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_fd.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_cert_chain.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_cert_chain.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_cert_chain.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_cert_chain.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_certificate.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_certificate.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_certificate.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_certificate.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_signature_nid.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_signature_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_signature_nid.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_signature_nid.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_tmp_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_tmp_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_peer_tmp_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_peer_tmp_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_psk_identity.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_psk_identity.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_psk_identity.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_psk_identity.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_rbio.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_rbio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_rbio.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_rbio.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_session.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_session.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_session.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_shared_sigalgs.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_shared_sigalgs.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_shared_sigalgs.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_shared_sigalgs.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_verify_result.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_verify_result.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_verify_result.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_version.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_get_version.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_get_version.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_in_init.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_in_init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_in_init.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_in_init.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_key_update.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_key_update.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_key_update.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_key_update.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_library_init.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_library_init.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_library_init.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_library_init.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_load_client_CA_file.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_load_client_CA_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_load_client_CA_file.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_load_client_CA_file.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_pending.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_pending.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_pending.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_pending.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_read.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read_early_data.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_read_early_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_read_early_data.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_read_early_data.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_rstate_string.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_rstate_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_rstate_string.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_rstate_string.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_session_reused.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_session_reused.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_session_reused.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_session_reused.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set1_host.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set1_host.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set1_host.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set1_host.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_bio.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_bio.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_bio.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_connect_state.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_connect_state.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_connect_state.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_connect_state.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_fd.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_fd.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_fd.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_session.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_session.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_session.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_shutdown.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_shutdown.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_shutdown.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_verify_result.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_set_verify_result.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_set_verify_result.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_shutdown.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_shutdown.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_shutdown.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_state_string.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_state_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_state_string.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_state_string.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_want.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_want.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_want.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_want.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_write.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_write.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/SSL_write.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/SSL_write.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_STRING.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_STRING.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_STRING.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_STRING.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_UTIL_read_pw.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_UTIL_read_pw.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_UTIL_read_pw.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_UTIL_read_pw.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_create_method.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_create_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_create_method.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_create_method.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/UI_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/UI_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509V3_get_d2i.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509V3_get_d2i.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509V3_get_d2i.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509V3_get_d2i.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_ALGOR_dup.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_ALGOR_dup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_ALGOR_dup.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_ALGOR_dup.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_CRL_get0_by_serial.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_CRL_get0_by_serial.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_CRL_get0_by_serial.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_CRL_get0_by_serial.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_EXTENSION_set_object.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_EXTENSION_set_object.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_EXTENSION_set_object.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_EXTENSION_set_object.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_LOOKUP.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_LOOKUP.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_hash_dir.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_LOOKUP_hash_dir.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_hash_dir.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_LOOKUP_hash_dir.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_meth_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_LOOKUP_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_LOOKUP_meth_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_LOOKUP_meth_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_ENTRY_get_object.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_ENTRY_get_object.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_ENTRY_get_object.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_ENTRY_get_object.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_add_entry_by_txt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_add_entry_by_txt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_add_entry_by_txt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_add_entry_by_txt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get0_der.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_get0_der.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get0_der.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_get0_der.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get_index_by_NID.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_get_index_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_get_index_by_NID.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_get_index_by_NID.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_print_ex.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_NAME_print_ex.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_NAME_print_ex.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_PUBKEY_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_PUBKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_PUBKEY_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_PUBKEY_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_SIG_get0.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_SIG_get0.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_SIG_get0.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_SIG_get0.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_get_error.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_CTX_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_get_error.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_CTX_get_error.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_set_verify_cb.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_CTX_set_verify_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_CTX_set_verify_cb.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_CTX_set_verify_cb.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_add_cert.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_add_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_add_cert.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_add_cert.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_get0_param.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_get0_param.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_get0_param.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_set_verify_cb_func.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_set_verify_cb_func.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_STORE_set_verify_cb_func.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_STORE_set_verify_cb_func.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_VERIFY_PARAM_set_flags.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_VERIFY_PARAM_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_VERIFY_PARAM_set_flags.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_VERIFY_PARAM_set_flags.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_ca.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_ca.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_ca.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_ca.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_host.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_host.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_host.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_host.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_issued.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_issued.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_issued.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_issued.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_private_key.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_private_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_private_key.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_private_key.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_purpose.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_purpose.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_check_purpose.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_check_purpose.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_cmp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp_time.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_cmp_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_cmp_time.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_cmp_time.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_digest.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_digest.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_digest.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_digest.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_dup.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_dup.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_dup.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_dup.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_notBefore.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get0_notBefore.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_notBefore.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get0_notBefore.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_signature.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get0_signature.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_signature.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get0_signature.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_uids.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get0_uids.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get0_uids.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get0_uids.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_extension_flags.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_extension_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_extension_flags.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_extension_flags.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_pubkey.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_pubkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_pubkey.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_pubkey.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_serialNumber.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_serialNumber.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_serialNumber.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_serialNumber.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_subject_name.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_subject_name.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_subject_name.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_subject_name.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_version.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_get_version.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_get_version.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_new.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_new.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_new.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_sign.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_sign.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_sign.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_verify_cert.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_verify_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509_verify_cert.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509_verify_cert.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509v3_get_ext_by_NID.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509v3_get_ext_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/X509v3_get_ext_by_NID.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/X509v3_get_ext_by_NID.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_DHparams.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_DHparams.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_DHparams.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_DHparams.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PKCS8PrivateKey_bio.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_PKCS8PrivateKey_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PKCS8PrivateKey_bio.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_PKCS8PrivateKey_bio.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PrivateKey.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_PrivateKey.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_PrivateKey.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_SSL_SESSION.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_SSL_SESSION.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_SSL_SESSION.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_SSL_SESSION.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_X509.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_X509.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/d2i_X509.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/d2i_X509.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_CMS_bio_stream.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/i2d_CMS_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_CMS_bio_stream.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/i2d_CMS_bio_stream.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_PKCS7_bio_stream.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/i2d_PKCS7_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_PKCS7_bio_stream.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/i2d_PKCS7_bio_stream.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_re_X509_tbs.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/i2d_re_X509_tbs.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/i2d_re_X509_tbs.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/i2d_re_X509_tbs.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man3/o2i_SCT_LIST.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man3/o2i_SCT_LIST.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man3/o2i_SCT_LIST.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man3/o2i_SCT_LIST.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man5/config.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man5/config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man5/config.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man5/config.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man5/x509v3_config.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man5/x509v3_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man5/x509v3_config.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man5/x509v3_config.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/Ed25519.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/Ed25519.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/Ed25519.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/Ed25519.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/RAND.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/RAND.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND_DRBG.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/RAND_DRBG.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/RAND_DRBG.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/RAND_DRBG.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/RSA-PSS.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/RSA-PSS.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/RSA-PSS.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/RSA-PSS.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/SM2.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/SM2.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/SM2.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/SM2.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/X25519.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/X25519.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/X25519.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/X25519.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/bio.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/bio.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/bio.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/crypto.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/crypto.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/crypto.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/crypto.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ct.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/ct.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/ct.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/ct.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/des_modes.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/des_modes.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/des_modes.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/des_modes.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/evp.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/evp.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/evp.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/evp.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store-file.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/ossl_store-file.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store-file.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/ossl_store-file.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/ossl_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/ossl_store.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/ossl_store.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/passphrase-encoding.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/passphrase-encoding.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/passphrase-encoding.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/passphrase-encoding.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/proxy-certificates.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/proxy-certificates.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/proxy-certificates.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/proxy-certificates.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/scrypt.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/scrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/scrypt.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/scrypt.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/ssl.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/ssl.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/ssl.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/man7/x509.pod b/src/openssl/openssl-1.1.1w-chevah2/doc/man7/x509.pod similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/man7/x509.pod rename to src/openssl/openssl-1.1.1w-chevah2/doc/man7/x509.pod diff --git a/src/openssl/openssl-1.1.1w-chevah1/doc/openssl-c-indent.el b/src/openssl/openssl-1.1.1w-chevah2/doc/openssl-c-indent.el similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/doc/openssl-c-indent.el rename to src/openssl/openssl-1.1.1w-chevah2/doc/openssl-c-indent.el diff --git a/src/openssl/openssl-1.1.1w-chevah1/e_os.h b/src/openssl/openssl-1.1.1w-chevah2/e_os.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/e_os.h rename to src/openssl/openssl-1.1.1w-chevah2/e_os.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/engines/asm/e_padlock-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/engines/asm/e_padlock-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/engines/asm/e_padlock-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/asm/e_padlock-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/engines/asm/e_padlock-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/build.info b/src/openssl/openssl-1.1.1w-chevah2/engines/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/build.info rename to src/openssl/openssl-1.1.1w-chevah2/engines/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.ec b/src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.ec similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.ec rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.ec diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.h b/src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.h rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.txt b/src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg.txt rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.h b/src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_afalg_err.h rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_afalg_err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_capi.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_capi.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.ec b/src/openssl/openssl-1.1.1w-chevah2/engines/e_capi.ec similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.ec rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_capi.ec diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.txt b/src/openssl/openssl-1.1.1w-chevah2/engines/e_capi.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_capi.txt rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_capi.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_capi_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_capi_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.h b/src/openssl/openssl-1.1.1w-chevah2/engines/e_capi_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_capi_err.h rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_capi_err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.ec b/src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync.ec similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.ec rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync.ec diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.txt b/src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync.txt rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.h b/src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_dasync_err.h rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_dasync_err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.ec b/src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest.ec similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.ec rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest.ec diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.txt b/src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest.txt rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.h b/src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest_err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_ossltest_err.h rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_ossltest_err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/engines/e_padlock.c b/src/openssl/openssl-1.1.1w-chevah2/engines/e_padlock.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/engines/e_padlock.c rename to src/openssl/openssl-1.1.1w-chevah2/engines/e_padlock.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Downloaded.txt b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Downloaded.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Downloaded.txt rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Downloaded.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Artistic b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/Artistic similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Artistic rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/Artistic diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/COPYING b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/COPYING similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/COPYING rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/COPYING diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/INSTALL b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/INSTALL similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/INSTALL rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/INSTALL diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/MANIFEST b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/MANIFEST similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/MANIFEST rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/MANIFEST diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.json b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/META.json similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.json rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/META.json diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.yml b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/META.yml similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/META.yml rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/META.yml diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Makefile.PL b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/Makefile.PL similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/Makefile.PL rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/Makefile.PL diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/README b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/README rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template.pm b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/lib/Text/Template.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template.pm rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/lib/Text/Template.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/00-version.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/00-version.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/00-version.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/00-version.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/01-basic.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/01-basic.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/01-basic.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/01-basic.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/02-hash.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/02-hash.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/02-hash.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/02-hash.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/03-out.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/03-out.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/03-out.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/03-out.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/04-safe.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/04-safe.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/04-safe.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/04-safe.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/05-safe2.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/05-safe2.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/05-safe2.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/05-safe2.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/06-ofh.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/06-ofh.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/06-ofh.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/06-ofh.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/07-safe3.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/07-safe3.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/07-safe3.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/07-safe3.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/08-exported.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/08-exported.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/08-exported.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/08-exported.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/09-error.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/09-error.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/09-error.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/09-error.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/10-delimiters.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/10-delimiters.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/10-delimiters.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/10-delimiters.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/11-prepend.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/11-prepend.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/11-prepend.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/11-prepend.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/12-preprocess.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/12-preprocess.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/12-preprocess.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/12-preprocess.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/13-taint.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/13-taint.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/13-taint.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/13-taint.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/14-broken.t b/src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/14-broken.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/Text-Template-1.46/t/14-broken.t rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/Text-Template-1.46/t/14-broken.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/external/perl/transfer/Text/Template.pm b/src/openssl/openssl-1.1.1w-chevah2/external/perl/transfer/Text/Template.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/external/perl/transfer/Text/Template.pm rename to src/openssl/openssl-1.1.1w-chevah2/external/perl/transfer/Text/Template.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/README.md b/src/openssl/openssl-1.1.1w-chevah2/fuzz/README.md similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/README.md rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/README.md diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1parse.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/asn1parse.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/asn1parse.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/asn1parse.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/bignum.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/bignum.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/bignum.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/bignum.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/bndiv.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/bndiv.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/bndiv.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/bndiv.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/build.info b/src/openssl/openssl-1.1.1w-chevah2/fuzz/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/build.info rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/client.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/client.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/client.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/client.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/cms.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/cms.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/cms.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/cms.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/conf.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/conf.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/conf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/crl.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/crl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/crl.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/crl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/ct.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/ct.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/ct.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/ct.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/driver.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/driver.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/driver.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/driver.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/fuzzer.h b/src/openssl/openssl-1.1.1w-chevah2/fuzz/fuzzer.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/fuzzer.h rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/fuzzer.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/helper.py b/src/openssl/openssl-1.1.1w-chevah2/fuzz/helper.py similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/helper.py rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/helper.py diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/mkfuzzoids.pl b/src/openssl/openssl-1.1.1w-chevah2/fuzz/mkfuzzoids.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/mkfuzzoids.pl rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/mkfuzzoids.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/oids.txt b/src/openssl/openssl-1.1.1w-chevah2/fuzz/oids.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/oids.txt rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/oids.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/rand.inc b/src/openssl/openssl-1.1.1w-chevah2/fuzz/rand.inc similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/rand.inc rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/rand.inc diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/server.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/server.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/server.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/server.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/test-corpus.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/test-corpus.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/test-corpus.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/test-corpus.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/fuzz/x509.c b/src/openssl/openssl-1.1.1w-chevah2/fuzz/x509.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/fuzz/x509.c rename to src/openssl/openssl-1.1.1w-chevah2/fuzz/x509.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/aria.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/aria.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/aria.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/aria.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/asn1.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/asn1.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/asn1.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/asn1.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/async.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/async.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/async.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/async.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_conf.h.in b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn_conf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_conf.h.in rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn_conf.h.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_dh.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn_dh.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_dh.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn_dh.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_srp.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn_srp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/bn_srp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/bn_srp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/chacha.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/chacha.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/chacha.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/chacha.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/cryptlib.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/cryptlib.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/cryptlib.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/ctype.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/ctype.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/ctype.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/ctype.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/dso_conf.h.in b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/dso_conf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/dso_conf.h.in rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/dso_conf.h.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/ec.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/ec.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/ec.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/ec.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/engine.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/engine.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/engine.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/engine.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/err.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/evp.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/evp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/evp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/evp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/lhash.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/lhash.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/lhash.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/lhash.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/md32_common.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/md32_common.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/md32_common.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/md32_common.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/objects.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/objects.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/objects.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/objects.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/poly1305.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/poly1305.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/poly1305.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/poly1305.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/rand.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/rand.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/rand.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/rand.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sha.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/sha.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/sha.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/sha.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/siphash.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/siphash.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/siphash.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/siphash.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2err.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm2err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm2err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm2err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm3.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm3.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm3.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm3.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm4.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm4.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/sm4.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/sm4.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/store.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/store.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/store.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/store.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/crypto/x509.h b/src/openssl/openssl-1.1.1w-chevah2/include/crypto/x509.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/crypto/x509.h rename to src/openssl/openssl-1.1.1w-chevah2/include/crypto/x509.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w-chevah2/include/internal/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w-chevah2/include/internal/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/bio.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/bio.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/bio.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/comp.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/comp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/comp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/comp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/conf.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/conf.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/conf.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/conf.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/constant_time.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/constant_time.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/constant_time.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/constant_time.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/cryptlib.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/cryptlib.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/cryptlib.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/dane.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/dane.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/dane.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/dane.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/dso.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/dso.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/dso.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/dso.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/dsoerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/dsoerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/dsoerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/dsoerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/err.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/nelem.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/nelem.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/nelem.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/nelem.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/numbers.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/numbers.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/numbers.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/numbers.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/o_dir.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/o_dir.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/o_dir.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/o_dir.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/o_str.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/o_str.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/o_str.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/o_str.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/refcount.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/refcount.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/refcount.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/refcount.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/sockets.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/sockets.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/sockets.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/sockets.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/sslconf.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/sslconf.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/sslconf.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/sslconf.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/thread_once.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/thread_once.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/thread_once.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/thread_once.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/internal/tsan_assist.h b/src/openssl/openssl-1.1.1w-chevah2/include/internal/tsan_assist.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/internal/tsan_assist.h rename to src/openssl/openssl-1.1.1w-chevah2/include/internal/tsan_assist.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/aes.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/aes.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/aes.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/aes.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1_mac.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1_mac.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1_mac.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1_mac.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1err.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1t.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1t.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/asn1t.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/asn1t.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/async.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/async.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/async.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/async.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/asyncerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/asyncerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/asyncerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/asyncerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bio.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/bio.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/bio.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bioerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/bioerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/bioerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/bioerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/blowfish.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/blowfish.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/blowfish.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/blowfish.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bn.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/bn.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/bn.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/bn.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/bnerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/bnerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/bnerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/bnerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffer.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/buffer.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffer.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/buffer.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffererr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/buffererr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/buffererr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/buffererr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/camellia.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/camellia.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/camellia.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/camellia.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cast.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/cast.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/cast.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/cast.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmac.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/cmac.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmac.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/cmac.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cms.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/cms.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/cms.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/cms.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmserr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/cmserr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/cmserr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/cmserr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/comp.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/comp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/comp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/comp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/comperr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/comperr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/comperr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/comperr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/conf.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/conf.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf_api.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/conf_api.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/conf_api.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/conf_api.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/conferr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/conferr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/conferr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/conferr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/crypto.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/crypto.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/crypto.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/crypto.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cryptoerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/cryptoerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/cryptoerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/cryptoerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ct.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ct.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ct.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ct.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/cterr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/cterr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/cterr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/cterr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/des.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/des.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/des.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/des.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dh.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/dh.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/dh.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/dh.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dherr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/dherr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/dherr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/dherr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsa.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/dsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsa.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/dsa.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsaerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/dsaerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/dsaerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/dsaerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/dtls1.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/dtls1.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/dtls1.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/dtls1.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/e_os2.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/e_os2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/e_os2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/e_os2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ebcdic.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ebcdic.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ebcdic.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ebcdic.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ec.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ec.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ec.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ec.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdh.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ecdh.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdh.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ecdh.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdsa.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ecdsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecdsa.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ecdsa.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ecerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ecerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ecerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/engine.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/engine.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/engine.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/engine.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/engineerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/engineerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/engineerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/engineerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/err.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/evp.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/evp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/evp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/evp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/evperr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/evperr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/evperr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/evperr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/hmac.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/hmac.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/hmac.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/hmac.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/idea.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/idea.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/idea.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/idea.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdf.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/kdf.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdf.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/kdf.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdferr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/kdferr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/kdferr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/kdferr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/lhash.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/lhash.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/lhash.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/lhash.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/md2.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/md2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/md2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/md2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/md4.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/md4.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/md4.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/md4.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/md5.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/md5.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/md5.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/md5.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/mdc2.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/mdc2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/mdc2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/mdc2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/modes.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/modes.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/modes.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/modes.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/obj_mac.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/obj_mac.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/obj_mac.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/obj_mac.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/objects.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/objects.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/objects.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/objects.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/objectserr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/objectserr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/objectserr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/objectserr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsp.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ocsp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ocsp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsperr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ocsperr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ocsperr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ocsperr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslconf.h.in b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/opensslconf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslconf.h.in rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/opensslconf.h.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslv.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/opensslv.h similarity index 98% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslv.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/opensslv.h index 07e9bb796..c190518b6 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/opensslv.h +++ b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/opensslv.h @@ -40,7 +40,7 @@ extern "C" { * major minor fix final patch/beta) */ # define OPENSSL_VERSION_NUMBER 0x1010117fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w-chevah1 26 Jul 2024" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w-chevah2 15 Aug 2024" /*- * The macros below are to be used for shared library (.so, .dll, ...) diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ossl_typ.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ossl_typ.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ossl_typ.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ossl_typ.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pem.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pem.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem2.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pem2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pem2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pem2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pemerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pemerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pemerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pemerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs12.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs12.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12err.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs12err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs12err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs12err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs7.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs7.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7err.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs7err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/pkcs7err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/pkcs7err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rand.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rand.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand_drbg.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rand_drbg.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rand_drbg.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rand_drbg.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/randerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/randerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/randerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/randerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc2.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rc2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rc2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc4.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rc4.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc4.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rc4.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc5.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rc5.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rc5.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rc5.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ripemd.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ripemd.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ripemd.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ripemd.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsa.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rsa.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsa.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rsa.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsaerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/rsaerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/rsaerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/rsaerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/safestack.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/safestack.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/safestack.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/safestack.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/seed.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/seed.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/seed.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/seed.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/sha.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/sha.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/sha.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/sha.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/srp.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/srp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/srp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/srp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/srtp.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/srtp.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/srtp.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/srtp.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ssl.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ssl.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl2.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ssl2.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl2.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ssl2.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl3.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ssl3.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ssl3.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ssl3.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/sslerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/sslerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/sslerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/sslerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/stack.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/stack.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/stack.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/stack.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/store.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/store.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/store.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/store.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/storeerr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/storeerr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/storeerr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/storeerr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/symhacks.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/symhacks.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/symhacks.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/symhacks.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/tls1.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/tls1.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/tls1.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/tls1.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ts.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ts.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ts.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ts.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/tserr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/tserr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/tserr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/tserr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/txt_db.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/txt_db.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/txt_db.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/txt_db.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/ui.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/ui.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/ui.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/ui.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/uierr.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/uierr.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/uierr.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/uierr.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/whrlpool.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/whrlpool.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/whrlpool.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/whrlpool.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509_vfy.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509_vfy.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509_vfy.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509_vfy.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509err.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509v3.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509v3.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3err.h b/src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509v3err.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/include/openssl/x509v3err.h rename to src/openssl/openssl-1.1.1w-chevah2/include/openssl/x509v3err.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/applink.c b/src/openssl/openssl-1.1.1w-chevah2/ms/applink.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/applink.c rename to src/openssl/openssl-1.1.1w-chevah2/ms/applink.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/cmp.pl b/src/openssl/openssl-1.1.1w-chevah2/ms/cmp.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/cmp.pl rename to src/openssl/openssl-1.1.1w-chevah2/ms/cmp.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-common.pl b/src/openssl/openssl-1.1.1w-chevah2/ms/uplink-common.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/uplink-common.pl rename to src/openssl/openssl-1.1.1w-chevah2/ms/uplink-common.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-ia64.pl b/src/openssl/openssl-1.1.1w-chevah2/ms/uplink-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/uplink-ia64.pl rename to src/openssl/openssl-1.1.1w-chevah2/ms/uplink-ia64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86.pl b/src/openssl/openssl-1.1.1w-chevah2/ms/uplink-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86.pl rename to src/openssl/openssl-1.1.1w-chevah2/ms/uplink-x86.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86_64.pl b/src/openssl/openssl-1.1.1w-chevah2/ms/uplink-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/uplink-x86_64.pl rename to src/openssl/openssl-1.1.1w-chevah2/ms/uplink-x86_64.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/uplink.c b/src/openssl/openssl-1.1.1w-chevah2/ms/uplink.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/uplink.c rename to src/openssl/openssl-1.1.1w-chevah2/ms/uplink.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ms/uplink.h b/src/openssl/openssl-1.1.1w-chevah2/ms/uplink.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ms/uplink.h rename to src/openssl/openssl-1.1.1w-chevah2/ms/uplink.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/os-dep/haiku.h b/src/openssl/openssl-1.1.1w-chevah2/os-dep/haiku.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/os-dep/haiku.h rename to src/openssl/openssl-1.1.1w-chevah2/os-dep/haiku.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/bio_ssl.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/bio_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/bio_ssl.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/bio_ssl.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/build.info b/src/openssl/openssl-1.1.1w-chevah2/ssl/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/build.info rename to src/openssl/openssl-1.1.1w-chevah2/ssl/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/d1_lib.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/d1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/d1_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/d1_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/d1_msg.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/d1_msg.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/d1_msg.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/d1_msg.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/d1_srtp.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/d1_srtp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/d1_srtp.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/d1_srtp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/methods.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/methods.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/methods.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/methods.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/packet.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/packet.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/packet.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/packet.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/packet_local.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/packet_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/packet_local.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/packet_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/pqueue.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/pqueue.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/pqueue.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/pqueue.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/README b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/README rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/dtls1_bitmap.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/dtls1_bitmap.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/dtls1_bitmap.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/dtls1_bitmap.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_d1.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/rec_layer_d1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_d1.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/rec_layer_d1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_s3.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/rec_layer_s3.c similarity index 99% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_s3.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/rec_layer_s3.c index 1db1712a0..525c3abf4 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/rec_layer_s3.c +++ b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/rec_layer_s3.c @@ -81,6 +81,15 @@ int RECORD_LAYER_read_pending(const RECORD_LAYER *rl) return SSL3_BUFFER_get_left(&rl->rbuf) != 0; } +int RECORD_LAYER_data_present(const RECORD_LAYER *rl) +{ + if (rl->rstate == SSL_ST_READ_BODY) + return 1; + if (RECORD_LAYER_processed_read_pending(rl)) + return 1; + return 0; +} + /* Checks if we have decrypted unread record data pending */ int RECORD_LAYER_processed_read_pending(const RECORD_LAYER *rl) { diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/record.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/record.h similarity index 99% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/record.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/record.h index af56206e0..513ab3988 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/record.h +++ b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/record.h @@ -197,6 +197,7 @@ void RECORD_LAYER_release(RECORD_LAYER *rl); int RECORD_LAYER_read_pending(const RECORD_LAYER *rl); int RECORD_LAYER_processed_read_pending(const RECORD_LAYER *rl); int RECORD_LAYER_write_pending(const RECORD_LAYER *rl); +int RECORD_LAYER_data_present(const RECORD_LAYER *rl); void RECORD_LAYER_reset_read_sequence(RECORD_LAYER *rl); void RECORD_LAYER_reset_write_sequence(RECORD_LAYER *rl); int RECORD_LAYER_is_sslv2_record(RECORD_LAYER *rl); diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/record_local.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/record_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/record_local.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/record_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_buffer.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/ssl3_buffer.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_buffer.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/ssl3_buffer.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/ssl3_record.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/ssl3_record.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record_tls13.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/record/ssl3_record_tls13.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/record/ssl3_record_tls13.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/record/ssl3_record_tls13.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_cbc.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/s3_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/s3_cbc.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/s3_cbc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_enc.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/s3_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/s3_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/s3_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_lib.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/s3_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/s3_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/s3_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/s3_msg.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/s3_msg.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/s3_msg.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/s3_msg.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_asn1.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_asn1.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_asn1.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_cert.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_cert.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert_table.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_cert_table.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_cert_table.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_cert_table.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_ciph.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_ciph.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_ciph.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_ciph.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_conf.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_conf.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_conf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_err.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_err.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_err.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_err.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_init.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_init.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_lib.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_lib.c similarity index 98% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_lib.c index 47adc3211..ccb1d4a0c 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_lib.c +++ b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_lib.c @@ -2761,37 +2761,54 @@ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, unsigned int server_len, const unsigned char *client, unsigned int client_len) { - unsigned int i, j; - const unsigned char *result; - int status = OPENSSL_NPN_UNSUPPORTED; + PACKET cpkt, csubpkt, spkt, ssubpkt; + + if (!PACKET_buf_init(&cpkt, client, client_len) + || !PACKET_get_length_prefixed_1(&cpkt, &csubpkt) + || PACKET_remaining(&csubpkt) == 0) { + *out = NULL; + *outlen = 0; + return OPENSSL_NPN_NO_OVERLAP; + } + + /* + * Set the default opportunistic protocol. Will be overwritten if we find + * a match. + */ + *out = (unsigned char *)PACKET_data(&csubpkt); + *outlen = (unsigned char)PACKET_remaining(&csubpkt); /* * For each protocol in server preference order, see if we support it. */ - for (i = 0; i < server_len;) { - for (j = 0; j < client_len;) { - if (server[i] == client[j] && - memcmp(&server[i + 1], &client[j + 1], server[i]) == 0) { - /* We found a match */ - result = &server[i]; - status = OPENSSL_NPN_NEGOTIATED; - goto found; + if (PACKET_buf_init(&spkt, server, server_len)) { + while (PACKET_get_length_prefixed_1(&spkt, &ssubpkt)) { + if (PACKET_remaining(&ssubpkt) == 0) + continue; /* Invalid - ignore it */ + if (PACKET_buf_init(&cpkt, client, client_len)) { + while (PACKET_get_length_prefixed_1(&cpkt, &csubpkt)) { + if (PACKET_equal(&csubpkt, PACKET_data(&ssubpkt), + PACKET_remaining(&ssubpkt))) { + /* We found a match */ + *out = (unsigned char *)PACKET_data(&ssubpkt); + *outlen = (unsigned char)PACKET_remaining(&ssubpkt); + return OPENSSL_NPN_NEGOTIATED; + } + } + /* Ignore spurious trailing bytes in the client list */ + } else { + /* This should never happen */ + return OPENSSL_NPN_NO_OVERLAP; } - j += client[j]; - j++; } - i += server[i]; - i++; + /* Ignore spurious trailing bytes in the server list */ } - /* There's no overlap between our protocols and the server's list. */ - result = client; - status = OPENSSL_NPN_NO_OVERLAP; - - found: - *out = (unsigned char *)result + 1; - *outlen = result[0]; - return status; + /* + * There's no overlap between our protocols and the server's list. We use + * the default opportunistic protocol selected earlier + */ + return OPENSSL_NPN_NO_OVERLAP; } #ifndef OPENSSL_NO_NEXTPROTONEG @@ -3515,9 +3532,10 @@ void ssl_update_cache(SSL *s, int mode) /* * If the session_id_length is 0, we are not supposed to cache it, and it - * would be rather hard to do anyway :-) + * would be rather hard to do anyway :-). Also if the session has already + * been marked as not_resumable we should not cache it for later reuse. */ - if (s->session->session_id_length == 0) + if (s->session->session_id_length == 0 || s->session->not_resumable) return; /* @@ -5247,6 +5265,9 @@ int SSL_free_buffers(SSL *ssl) if (RECORD_LAYER_read_pending(rl) || RECORD_LAYER_write_pending(rl)) return 0; + if (RECORD_LAYER_data_present(rl)) + return 0; + RECORD_LAYER_release(rl); return 1; } diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_local.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_local.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_mcnf.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_mcnf.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_mcnf.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_mcnf.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_rsa.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_rsa.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_rsa.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_sess.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_sess.c similarity index 98% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_sess.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_sess.c index 68d1737ac..4c25e05d9 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_sess.c +++ b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_sess.c @@ -94,16 +94,11 @@ SSL_SESSION *SSL_SESSION_new(void) return ss; } -SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src) -{ - return ssl_session_dup(src, 1); -} - /* * Create a new SSL_SESSION and duplicate the contents of |src| into it. If * ticket == 0 then no ticket information is duplicated, otherwise it is. */ -SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) +static SSL_SESSION *ssl_session_dup_intern(SSL_SESSION *src, int ticket) { SSL_SESSION *dest; @@ -226,6 +221,27 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) return NULL; } +SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src) +{ + return ssl_session_dup_intern(src, 1); +} + +/* + * Used internally when duplicating a session which might be already shared. + * We will have resumed the original session. Subsequently we might have marked + * it as non-resumable (e.g. in another thread) - but this copy should be ok to + * resume from. + */ +SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) +{ + SSL_SESSION *sess = ssl_session_dup_intern(src, ticket); + + if (sess != NULL) + sess->not_resumable = 0; + + return sess; +} + const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len) { if (len) diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_stat.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_stat.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_stat.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_stat.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_txt.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_txt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_txt.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_txt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_utst.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_utst.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/ssl_utst.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/ssl_utst.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/README b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/README rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_clnt.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions_clnt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_clnt.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions_clnt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_cust.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions_cust.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_cust.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions_cust.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_srvr.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions_srvr.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/extensions_srvr.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/extensions_srvr.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_clnt.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_clnt.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_clnt.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_clnt.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_dtls.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_dtls.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_dtls.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_dtls.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_lib.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_local.h b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_local.h rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_srvr.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_srvr.c similarity index 99% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_srvr.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_srvr.c index 43f77a589..f55e11bde 100644 --- a/src/openssl/openssl-1.1.1w-chevah1/ssl/statem/statem_srvr.c +++ b/src/openssl/openssl-1.1.1w-chevah2/ssl/statem/statem_srvr.c @@ -2403,9 +2403,8 @@ int tls_construct_server_hello(SSL *s, WPACKET *pkt) * so the following won't overwrite an ID that we're supposed * to send back. */ - if (s->session->not_resumable || - (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER) - && !s->hit)) + if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER) + && !s->hit) s->session->session_id_length = 0; if (usetls13) { diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/t1_enc.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/t1_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/t1_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/t1_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/t1_lib.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/t1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/t1_lib.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/t1_lib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/t1_trce.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/t1_trce.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/t1_trce.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/t1_trce.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/tls13_enc.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/tls13_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/tls13_enc.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/tls13_enc.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/ssl/tls_srp.c b/src/openssl/openssl-1.1.1w-chevah2/ssl/tls_srp.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/ssl/tls_srp.c rename to src/openssl/openssl-1.1.1w-chevah2/ssl/tls_srp.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/CAss.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/CAss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/CAss.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/CAss.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/CAssdh.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/CAssdh.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/CAssdh.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/CAssdh.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/CAssdsa.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/CAssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/CAssdsa.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/CAssdsa.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/CAssrsa.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/CAssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/CAssrsa.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/CAssrsa.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/CAtsa.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/CAtsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/CAtsa.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/CAtsa.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/P1ss.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/P1ss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/P1ss.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/P1ss.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/P2ss.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/P2ss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/P2ss.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/P2ss.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/README b/src/openssl/openssl-1.1.1w-chevah2/test/README similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/README rename to src/openssl/openssl-1.1.1w-chevah2/test/README diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/README.external b/src/openssl/openssl-1.1.1w-chevah2/test/README.external similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/README.external rename to src/openssl/openssl-1.1.1w-chevah2/test/README.external diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/README.ssltest.md b/src/openssl/openssl-1.1.1w-chevah2/test/README.ssltest.md similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/README.ssltest.md rename to src/openssl/openssl-1.1.1w-chevah2/test/README.ssltest.md diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/Sssdsa.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/Sssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/Sssdsa.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/Sssdsa.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/Sssrsa.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/Sssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/Sssrsa.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/Sssrsa.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/Uss.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/Uss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/Uss.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/Uss.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/aborttest.c b/src/openssl/openssl-1.1.1w-chevah2/test/aborttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/aborttest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/aborttest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/afalgtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/afalgtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/afalgtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/afalgtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asn1_decode_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/asn1_decode_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asn1_decode_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asn1_decode_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asn1_encode_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/asn1_encode_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asn1_encode_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asn1_encode_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asn1_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/asn1_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asn1_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asn1_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asn1_string_table_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/asn1_string_table_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asn1_string_table_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asn1_string_table_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asn1_time_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/asn1_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asn1_time_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asn1_time_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asynciotest.c b/src/openssl/openssl-1.1.1w-chevah2/test/asynciotest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asynciotest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asynciotest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/asynctest.c b/src/openssl/openssl-1.1.1w-chevah2/test/asynctest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/asynctest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/asynctest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bad_dtls_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/bad_dtls_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bad_dtls_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bad_dtls_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bftest.c b/src/openssl/openssl-1.1.1w-chevah2/test/bftest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bftest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bftest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bio_callback_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/bio_callback_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bio_callback_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bio_callback_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bio_enc_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/bio_enc_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bio_enc_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bio_enc_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bio_memleak_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/bio_memleak_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bio_memleak_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bio_memleak_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bioprinttest.c b/src/openssl/openssl-1.1.1w-chevah2/test/bioprinttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bioprinttest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bioprinttest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bntest.c b/src/openssl/openssl-1.1.1w-chevah2/test/bntest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bntest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/bntest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/bntests.pl b/src/openssl/openssl-1.1.1w-chevah2/test/bntests.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/bntests.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/bntests.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/build.info b/src/openssl/openssl-1.1.1w-chevah2/test/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/build.info rename to src/openssl/openssl-1.1.1w-chevah2/test/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/casttest.c b/src/openssl/openssl-1.1.1w-chevah2/test/casttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/casttest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/casttest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/alt1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/alt1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/alt1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/alt1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/alt1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/alt2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/alt2-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/alt2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/alt2-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/alt2-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/alt3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/alt3-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/alt3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/alt3-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/alt3-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc3-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc3-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc3-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc4-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc4-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc4-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc4-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc4-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc6-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc6-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc6-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad-pc6-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad-pc6-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.key b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad.key similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.key rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad.key diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/bad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/bad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/bad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt10-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt10-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt10-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt10-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt10-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt2-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt2-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt2-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt3-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt3-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt3-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt4-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt4-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt4-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt4-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt4-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt5-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt5-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt5-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt5-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt5-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt6-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt6-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt6-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt6-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt6-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt7-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt7-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt7-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt7-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt7-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt8-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt8-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt8-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt8-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt8-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt9-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt9-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt9-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badalt9-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badalt9-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badcn1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badcn1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/badcn1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/badcn1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/badcn1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-768.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768i.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-768i.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-768i.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-768i.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-ec-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-ec-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-ec-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5-any.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-md5-any.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5-any.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-md5-any.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert-md5.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-cert2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-expired.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-expired.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-expired.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-768.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-768.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key-768.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key-ec-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key-ec-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key-ec-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-key2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-key2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-name2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-name2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-name2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonbc.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-nonbc.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonbc.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-nonbc.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonca.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-nonca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-nonca.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-nonca.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pol-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-pol-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pol-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-pol-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-pss-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-pss-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-pss-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-root2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-root2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-root2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-root2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ca-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cca-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed25519-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed25519-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed25519-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed25519-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed25519-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/client-ed448-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/client-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/croot-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/croot-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cross-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cross-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cross-root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cross-root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cross-root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.msb b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic.msb similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.msb rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic.msb diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.utf8 b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic.utf8 similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic.utf8 rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic.utf8 diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic_crl.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic_crl.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.utf8 b/src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic_crl.utf8 similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/cyrillic_crl.utf8 rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/cyrillic_crl.utf8 diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/dhp2048.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/dhp2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/dhp2048.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/dhp2048.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-768.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768i.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-768i.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-768i.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-768i.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-ec-named-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-ec-named-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-ec-named-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-ec-named-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-ec-named-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-md5.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-md5.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies-bad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-policies-bad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies-bad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-policies-bad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-policies.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert-policies.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert-policies.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-cert2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client-chain.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-client-chain.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client-chain.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-client-chain.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-client.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-client.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-client.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-client-chain.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-ecdsa-client-chain.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-client-chain.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-ecdsa-client-chain.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-ecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ecdsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-ecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ed25519.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-ed25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-ed25519.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-ed25519.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-expired.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-expired.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-expired.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-768.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-768.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-768.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-ec-named-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-ec-named-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-ec-named-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key-ec-named-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key-ec-named-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-name2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-name2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-name2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pathlen.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pathlen.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pathlen.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pathlen.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pss-sha1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pss-sha1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha256-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pss-sha256-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-pss-sha256-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-pss-sha256-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-self-signed.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-self-signed.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-self-signed.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-self-signed.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ee-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ee-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.sct b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1.sct similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1.sct rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1.sct diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1_issuer-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1_issuer-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1_issuer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs1_issuer.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs1_issuer.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs3.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.sct b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs3.sct similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3.sct rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs3.sct diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3_issuer.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs3_issuer.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/embeddedSCTs3_issuer.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/embeddedSCTs3_issuer.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/goodcn1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/goodcn1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/goodcn1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/goodcn1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/goodcn1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.key b/src/openssl/openssl-1.1.1w-chevah2/test/certs/interCA.key similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.key rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/interCA.key diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/interCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/interCA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/interCA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/invalid-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/invalid-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/invalid-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/invalid-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.key b/src/openssl/openssl-1.1.1w-chevah2/test/certs/leaf.key similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.key rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/leaf.key diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/leaf.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/leaf.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-constraints.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/many-constraints.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/many-constraints.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/many-constraints.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/many-names1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/many-names1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/many-names2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/many-names2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names3.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/many-names3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/many-names3.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/many-names3.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/mkcert.sh b/src/openssl/openssl-1.1.1w-chevah2/test/certs/mkcert.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/mkcert.sh rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/mkcert.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/nca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/nca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/nca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/nca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/nca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca2-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca2-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca2-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca3-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/ncca3-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/ncca3-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/nroot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/nroot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/nroot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/nroot+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/nroot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/p256-server-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/p256-server-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/p256-server-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/p256-server-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/p256-server-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-root-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-root-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-server-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-server-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-server-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/p384-server-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/p384-server-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pathlen.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pathlen.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pathlen.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pathlen.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pc1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pc1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pc1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pc1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pc1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pc2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pc2-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pc2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pc2-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pc2-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pc5-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pc5-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/pc5-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/pc5-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/pc5-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-768.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-768.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert-768.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-md5.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-md5.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-rsa2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert-rsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert-rsa2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert-rsa2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cert2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cross-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cross-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-cross-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-cross-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed25519.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-ed25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed25519.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-ed25519.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-ed448-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-expired.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-expired.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-expired.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key-768.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key-768.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-key-768.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-key2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-key2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-key2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-name2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-name2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-name2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-nonca.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-nonca.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-nonca.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-nonca.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-noserver.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-noserver.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-noserver.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-noserver.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root2+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root2+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root2+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root2+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root2+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/root2-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/root2-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/root2-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/root2-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.key b/src/openssl/openssl-1.1.1w-chevah2/test/certs/rootCA.key similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.key rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/rootCA.key diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/rootCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/rootCA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/rootCA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootcert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/rootcert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/rootcert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/rootcert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/rootkey.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/rootkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/rootkey.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/rootkey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/roots.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/roots.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/roots.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/roots.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sca-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-cecdsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-cecdsa-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-cecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-cecdsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-cecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-dsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-dsa-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-dsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-dsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-dsa-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-brainpoolP256r1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-brainpoolP256r1-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-brainpoolP256r1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-brainpoolP256r1-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-brainpoolP256r1-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ecdsa-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed25519-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed25519-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed25519-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed25519-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed25519-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-ed448-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-restrict-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-restrict-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-restrict-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-pss-restrict-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-pss-restrict-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/server-trusted.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/server-trusted.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/server-trusted.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/server-trusted.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/servercert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/servercert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/servercert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/servercert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/serverkey.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/serverkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/serverkey.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/serverkey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/setup.sh b/src/openssl/openssl-1.1.1w-chevah2/test/certs/setup.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/setup.sh rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/setup.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/some-names1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/some-names1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/some-names2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/some-names2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names3.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/some-names3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/some-names3.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/some-names3.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot+serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-anyEKU.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-anyEKU.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-clientAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-clientAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-serverAuth.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/sroot-serverAuth.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/sroot-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA-ss.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/subinterCA-ss.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA-ss.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/subinterCA-ss.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.key b/src/openssl/openssl-1.1.1w-chevah2/test/certs/subinterCA.key similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.key rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/subinterCA.key diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/subinterCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/subinterCA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/subinterCA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/untrusted.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/untrusted.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/untrusted.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/untrusted.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongcert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/wrongcert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongcert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/wrongcert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongkey.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/wrongkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/wrongkey.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/wrongkey.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check-key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/certs/x509-check-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check-key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/x509-check-key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check.csr b/src/openssl/openssl-1.1.1w-chevah2/test/certs/x509-check.csr similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/certs/x509-check.csr rename to src/openssl/openssl-1.1.1w-chevah2/test/certs/x509-check.csr diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/chacha_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/chacha_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/chacha_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/chacha_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/cipher_overhead_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/cipher_overhead_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/cipher_overhead_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/cipher_overhead_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/cipherbytes_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/cipherbytes_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/cipherbytes_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/cipherbytes_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/cipherlist_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/cipherlist_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/cipherlist_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/cipherlist_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ciphername_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ciphername_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ciphername_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ciphername_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/clienthellotest.c b/src/openssl/openssl-1.1.1w-chevah2/test/clienthellotest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/clienthellotest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/clienthellotest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/cmactest.c b/src/openssl/openssl-1.1.1w-chevah2/test/cmactest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/cmactest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/cmactest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/cms-examples.pl b/src/openssl/openssl-1.1.1w-chevah2/test/cms-examples.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/cms-examples.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/cms-examples.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/cmsapitest.c b/src/openssl/openssl-1.1.1w-chevah2/test/cmsapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/cmsapitest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/cmsapitest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/conf_include_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/conf_include_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/conf_include_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/conf_include_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/constant_time_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/constant_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/constant_time_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/constant_time_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/crltest.c b/src/openssl/openssl-1.1.1w-chevah2/test/crltest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/crltest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/crltest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ct/log_list.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ct/log_list.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ct/log_list.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ct/log_list.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ct/tls1.sct b/src/openssl/openssl-1.1.1w-chevah2/test/ct/tls1.sct similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ct/tls1.sct rename to src/openssl/openssl-1.1.1w-chevah2/test/ct/tls1.sct diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ct_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ct_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ct_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ct_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ctype_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ctype_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ctype_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ctype_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/curve448_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/curve448_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/curve448_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/curve448_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-cms.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad-cms.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-cms.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad-cms.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-pad0.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad-int-pad0.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-pad0.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad-int-pad0.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-padminus1.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad-int-padminus1.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad-int-padminus1.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad-int-padminus1.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_bio.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad_bio.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_bio.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad_bio.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_cert.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad_cert.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_cert.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad_cert.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_generalname.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad_generalname.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/bad_generalname.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/bad_generalname.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/high_tag.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/high_tag.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/high_tag.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/high_tag.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int0.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/int0.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int0.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/int0.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int1.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/int1.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/int1.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/int1.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/intminus1.der b/src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/intminus1.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i-tests/intminus1.der rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i-tests/intminus1.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/d2i_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/d2i_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/d2i_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/d2i_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dane-cross.in b/src/openssl/openssl-1.1.1w-chevah2/test/dane-cross.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dane-cross.in rename to src/openssl/openssl-1.1.1w-chevah2/test/dane-cross.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/danetest.c b/src/openssl/openssl-1.1.1w-chevah2/test/danetest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/danetest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/danetest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/danetest.in b/src/openssl/openssl-1.1.1w-chevah2/test/danetest.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/danetest.in rename to src/openssl/openssl-1.1.1w-chevah2/test/danetest.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/danetest.pem b/src/openssl/openssl-1.1.1w-chevah2/test/danetest.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/danetest.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/danetest.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/data.bin b/src/openssl/openssl-1.1.1w-chevah2/test/data.bin similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/data.bin rename to src/openssl/openssl-1.1.1w-chevah2/test/data.bin diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/destest.c b/src/openssl/openssl-1.1.1w-chevah2/test/destest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/destest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/destest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dhtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/dhtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dhtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/dhtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.c b/src/openssl/openssl-1.1.1w-chevah2/test/drbg_cavs_data.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.c rename to src/openssl/openssl-1.1.1w-chevah2/test/drbg_cavs_data.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.h b/src/openssl/openssl-1.1.1w-chevah2/test/drbg_cavs_data.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_data.h rename to src/openssl/openssl-1.1.1w-chevah2/test/drbg_cavs_data.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/drbg_cavs_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/drbg_cavs_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/drbg_cavs_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/drbgtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/drbgtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.h b/src/openssl/openssl-1.1.1w-chevah2/test/drbgtest.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/drbgtest.h rename to src/openssl/openssl-1.1.1w-chevah2/test/drbgtest.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dsa_no_digest_size_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/dsa_no_digest_size_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dsa_no_digest_size_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/dsa_no_digest_size_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dsatest.c b/src/openssl/openssl-1.1.1w-chevah2/test/dsatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dsatest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/dsatest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dtls_mtu_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/dtls_mtu_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dtls_mtu_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/dtls_mtu_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dtlstest.c b/src/openssl/openssl-1.1.1w-chevah2/test/dtlstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dtlstest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/dtlstest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/dtlsv1listentest.c b/src/openssl/openssl-1.1.1w-chevah2/test/dtlsv1listentest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/dtlsv1listentest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/dtlsv1listentest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ec_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ec_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ec_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ec_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.c b/src/openssl/openssl-1.1.1w-chevah2/test/ecdsatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ecdsatest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.h b/src/openssl/openssl-1.1.1w-chevah2/test/ecdsatest.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ecdsatest.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ecdsatest.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ecstresstest.c b/src/openssl/openssl-1.1.1w-chevah2/test/ecstresstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ecstresstest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ecstresstest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ectest.c b/src/openssl/openssl-1.1.1w-chevah2/test/ectest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ectest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ectest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/enginetest.c b/src/openssl/openssl-1.1.1w-chevah2/test/enginetest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/enginetest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/enginetest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/errtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/errtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/errtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/errtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/evp_extra_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/evp_extra_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/evp_extra_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/evp_extra_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/evp_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/evp_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/evp_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/evp_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/evp_test.h b/src/openssl/openssl-1.1.1w-chevah2/test/evp_test.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/evp_test.h rename to src/openssl/openssl-1.1.1w-chevah2/test/evp_test.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/exdatatest.c b/src/openssl/openssl-1.1.1w-chevah2/test/exdatatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/exdatatest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/exdatatest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/exptest.c b/src/openssl/openssl-1.1.1w-chevah2/test/exptest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/exptest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/exptest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/fatalerrtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/fatalerrtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/fatalerrtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/fatalerrtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/generate_buildtest.pl b/src/openssl/openssl-1.1.1w-chevah2/test/generate_buildtest.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/generate_buildtest.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/generate_buildtest.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/generate_ssl_tests.pl b/src/openssl/openssl-1.1.1w-chevah2/test/generate_ssl_tests.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/generate_ssl_tests.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/generate_ssl_tests.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/gmdifftest.c b/src/openssl/openssl-1.1.1w-chevah2/test/gmdifftest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/gmdifftest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/gmdifftest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/gosttest.c b/src/openssl/openssl-1.1.1w-chevah2/test/gosttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/gosttest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/gosttest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.c b/src/openssl/openssl-1.1.1w-chevah2/test/handshake_helper.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.c rename to src/openssl/openssl-1.1.1w-chevah2/test/handshake_helper.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.h b/src/openssl/openssl-1.1.1w-chevah2/test/handshake_helper.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/handshake_helper.h rename to src/openssl/openssl-1.1.1w-chevah2/test/handshake_helper.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/hmactest.c b/src/openssl/openssl-1.1.1w-chevah2/test/hmactest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/hmactest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/hmactest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ideatest.c b/src/openssl/openssl-1.1.1w-chevah2/test/ideatest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ideatest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ideatest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/igetest.c b/src/openssl/openssl-1.1.1w-chevah2/test/igetest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/igetest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/igetest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/lhash_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/lhash_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/lhash_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/lhash_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/md2test.c b/src/openssl/openssl-1.1.1w-chevah2/test/md2test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/md2test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/md2test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/mdc2_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/mdc2_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/mdc2_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/mdc2_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/mdc2test.c b/src/openssl/openssl-1.1.1w-chevah2/test/mdc2test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/mdc2test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/mdc2test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/memleaktest.c b/src/openssl/openssl-1.1.1w-chevah2/test/memleaktest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/memleaktest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/memleaktest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/modes_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/modes_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/modes_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/modes_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D1_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Cert_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Cert_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D3_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISDOSC_D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISDOSC_D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISDOSC_D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISDOSC_D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_ND1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_ND2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ISOP_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ISOP_ND3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cross_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Cross_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Cross_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Cross_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Cert_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Cert_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Cert_EE.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Cert_EE.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND3_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_ND1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_ND2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WIKH_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WIKH_ND3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_ND1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_ND2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WINH_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WINH_ND3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKDOSC_D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKDOSC_D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKDOSC_D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKDOSC_D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_D1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_D2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_D3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_D3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND1.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND1.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_ND1.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND2.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND2.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_ND2.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND3.ors b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WRID_ND3.ors rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WRID_ND3.ors diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ocspapitest.c b/src/openssl/openssl-1.1.1w-chevah2/test/ocspapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ocspapitest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ocspapitest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.cc b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/async_bio.cc similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.cc rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/async_bio.cc diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.h b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/async_bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/async_bio.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/async_bio.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/build.info b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/build.info rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/include/openssl/base.h b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/include/openssl/base.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/include/openssl/base.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/include/openssl/base.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_config.json b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/ossl_config.json similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_config.json rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/ossl_config.json diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_shim.cc b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/ossl_shim.cc similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/ossl_shim.cc rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/ossl_shim.cc diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.cc b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/packeted_bio.cc similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.cc rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/packeted_bio.cc diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.h b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/packeted_bio.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/packeted_bio.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/packeted_bio.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.cc b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/test_config.cc similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.cc rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/test_config.cc diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.h b/src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/test_config.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ossl_shim/test_config.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ossl_shim/test_config.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/packettest.c b/src/openssl/openssl-1.1.1w-chevah2/test/packettest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/packettest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/packettest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pbelutest.c b/src/openssl/openssl-1.1.1w-chevah2/test/pbelutest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pbelutest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/pbelutest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pemtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/pemtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pemtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/pemtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pkcs7-1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/pkcs7-1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pkcs7-1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/pkcs7-1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pkcs7.pem b/src/openssl/openssl-1.1.1w-chevah2/test/pkcs7.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pkcs7.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/pkcs7.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_kdf_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/pkey_meth_kdf_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_kdf_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/pkey_meth_kdf_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/pkey_meth_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pkey_meth_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/pkey_meth_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/pkits-test.pl b/src/openssl/openssl-1.1.1w-chevah2/test/pkits-test.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/pkits-test.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/pkits-test.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/poly1305_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/poly1305_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/poly1305_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/poly1305_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rc2test.c b/src/openssl/openssl-1.1.1w-chevah2/test/rc2test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rc2test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rc2test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rc4test.c b/src/openssl/openssl-1.1.1w-chevah2/test/rc4test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rc4test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rc4test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rc5test.c b/src/openssl/openssl-1.1.1w-chevah2/test/rc5test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rc5test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rc5test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rdrand_sanitytest.c b/src/openssl/openssl-1.1.1w-chevah2/test/rdrand_sanitytest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rdrand_sanitytest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rdrand_sanitytest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_abort.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_abort.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_abort.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_abort.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_sanity.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_sanity.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_sanity.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_sanity.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_symbol_presence.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_symbol_presence.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_symbol_presence.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_symbol_presence.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_test.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_test.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/01-test_test.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/01-test_test.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_errstr.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_errstr.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_errstr.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_errstr.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_internal_ctype.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_internal_ctype.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_internal_ctype.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_internal_ctype.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_lhash.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_lhash.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_lhash.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_lhash.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_ordinals.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_ordinals.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_ordinals.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_ordinals.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_stack.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_stack.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/02-test_stack.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/02-test_stack.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_exdata.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_exdata.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_exdata.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_exdata.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_asn1.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_asn1.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_asn1.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_asn1.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_chacha.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_chacha.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_chacha.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_chacha.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_curve448.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_curve448.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_curve448.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_curve448.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ec.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_ec.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ec.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_ec.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_mdc2.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_mdc2.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_mdc2.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_mdc2.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_modes.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_modes.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_modes.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_modes.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_poly1305.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_poly1305.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_poly1305.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_poly1305.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_siphash.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_siphash.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_siphash.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_siphash.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm2.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_sm2.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm2.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_sm2.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm4.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_sm4.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_sm4.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_sm4.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ssl_cert_table.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_ssl_cert_table.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_ssl_cert_table.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_ssl_cert_table.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_x509.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_x509.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_internal_x509.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_internal_x509.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_ui.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_ui.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/03-test_ui.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/03-test_ui.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_decode.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_asn1_decode.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_decode.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_asn1_decode.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_encode.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_asn1_encode.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_encode.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_asn1_encode.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_string_table.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_asn1_string_table.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_asn1_string_table.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_asn1_string_table.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bio_callback.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_bio_callback.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bio_callback.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_bio_callback.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bioprint.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_bioprint.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_bioprint.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_bioprint.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_err.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_err.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_err.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_err.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/NOTES b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/NOTES similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/NOTES rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/NOTES diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/beermug.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/beermug.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/beermug.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/beermug.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1023line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-1023line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1023line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-1023line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1024line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-1024line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1024line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-1024line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1025line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-1025line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-1025line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-1025line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-255line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-255line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-255line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-255line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-256line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-256line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-256line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-256line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-257line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-257line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-257line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-257line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-blankline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-blankline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-blankline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-blankline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-comment.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-comment.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-comment.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-comment.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-earlypad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-earlypad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-earlypad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-earlypad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-extrapad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-extrapad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-extrapad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-extrapad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-infixwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-infixwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-infixwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-infixwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-junk.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-junk.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-junk.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-junk.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-longline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-longline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-longline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-longline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-misalignedpad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-misalignedpad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-misalignedpad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-misalignedpad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-onecolumn.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-onecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-onecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-onecolumn.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-oneline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-oneline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-oneline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortandlongline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-shortandlongline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortandlongline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-shortandlongline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-shortline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-shortline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-shortline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-threecolumn.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-threecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-threecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-threecolumn.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/csr.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/csr.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/csr.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/csr.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1023line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-1023line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1023line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-1023line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1024line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-1024line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1024line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-1024line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1025line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-1025line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-1025line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-1025line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-255line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-255line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-255line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-255line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-256line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-256line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-256line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-256line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-257line.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-257line.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-257line.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-257line.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-blankline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-blankline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-blankline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-blankline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-comment.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-comment.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-comment.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-comment.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptedheader.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-corruptedheader.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptedheader.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-corruptedheader.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptiv.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-corruptiv.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-corruptiv.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-corruptiv.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-earlypad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-earlypad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-earlypad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-earlypad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-extrapad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-extrapad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-extrapad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-extrapad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-junk.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-junk.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-junk.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-junk.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-longline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-longline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-longline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-longline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-misalignedpad.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-misalignedpad.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-misalignedpad.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-misalignedpad.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onecolumn.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-onecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-onecolumn.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-oneline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-oneline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-oneline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-oneline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onelineheader.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-onelineheader.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-onelineheader.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-onelineheader.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortandlongline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-shortandlongline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortandlongline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-shortandlongline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortline.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-shortline.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-shortline.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-shortline.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-threecolumn.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-threecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-threecolumn.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-threecolumn.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsa.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsa.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsaparam.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsaparam.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/dsaparam.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/dsaparam.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/wellknown b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/wellknown similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/04-test_pem_data/wellknown rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/04-test_pem_data/wellknown diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_bf.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_bf.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_bf.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_bf.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cast.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_cast.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cast.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_cast.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cmac.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_cmac.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_cmac.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_cmac.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_des.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_des.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_des.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_des.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_hmac.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_hmac.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_hmac.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_hmac.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_idea.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_idea.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_idea.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_idea.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_md2.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_md2.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_md2.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_md2.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_mdc2.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_mdc2.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_mdc2.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_mdc2.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rand.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rand.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rand.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rand.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc2.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rc2.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc2.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rc2.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc4.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rc4.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc4.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rc4.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc5.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rc5.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/05-test_rc5.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/05-test_rc5.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/06-test-rdrand.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/06-test-rdrand.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/06-test-rdrand.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/06-test-rdrand.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnexp.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnexp.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnexp.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnexp.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bngcd.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bngcd.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bngcd.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bngcd.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmod.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnmod.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmod.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnmod.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmul.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnmul.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnmul.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnmul.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnshift.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnshift.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnshift.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnshift.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnsum.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnsum.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_bn_data/bnsum.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_bn_data/bnsum.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_exp.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_exp.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/10-test_exp.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/10-test_exp.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dh.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_dh.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dh.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_dh.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dsa.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_dsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_dsa.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_dsa.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ec.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ec.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ec.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ec.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecdsa.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecdsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecdsa.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecdsa.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genec.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_genec.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genec.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_genec.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genrsa.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_genrsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_genrsa.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_genrsa.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_mp_rsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_mp_rsa.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa_data/plain_text b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_mp_rsa_data/plain_text similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_mp_rsa_data/plain_text rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_mp_rsa_data/plain_text diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_out_option.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_out_option.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_out_option.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_out_option.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsa.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_rsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsa.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_rsa.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsapss.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_rsapss.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/15-test_rsapss.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/15-test_rsapss.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_dgst.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_dgst.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_dgst.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_dgst.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_enc.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_enc.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc_more.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_enc_more.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_enc_more.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_enc_more.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_passwd.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_passwd.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/20-test_passwd.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/20-test_passwd.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_crl.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_crl.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_crl.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_crl.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_d2i.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_d2i.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_d2i.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_d2i.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_pkcs7.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_pkcs7.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_pkcs7.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_pkcs7.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_req.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_req.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_req.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_req.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_sid.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_sid.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_sid.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_sid.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_verify.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_verify.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_verify.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_verify.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_x509.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_x509.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/25-test_x509.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/25-test_x509.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_afalg.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_afalg.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_afalg.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_afalg.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_engine.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_engine.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_engine.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_engine.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpcase.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpcase.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpcase.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpcase.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpccmcavs.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpccmcavs.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpccmcavs.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpccmcavs.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpciph.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpciph.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpciph.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpciph.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpdigest.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpdigest.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpdigest.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpdigest.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpencod.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpencod.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpencod.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpencod.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpkdf.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpkdf.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpkdf.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpkdf.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpmac.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpmac.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evpmac.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evpmac.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppbe.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evppbe.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppbe.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evppbe.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evppkey.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evppkey.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey_ecc.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evppkey_ecc.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_data/evppkey_ecc.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_data/evppkey_ecc.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_extra.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_extra.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_evp_extra.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_evp_extra.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pbelu.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_pbelu.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pbelu.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_pbelu.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_pkey_meth.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_pkey_meth.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth_kdf.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_pkey_meth_kdf.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/30-test_pkey_meth_kdf.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/30-test_pkey_meth_kdf.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/40-test_rehash.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/40-test_rehash.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/40-test_rehash.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/40-test_rehash.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_check_cert_pkey.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_check_cert_pkey.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_check_cert_pkey.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_check_cert_pkey.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_dup_cert.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_dup_cert.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_dup_cert.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_dup_cert.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_store.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_store.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_store.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_store.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_time.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_time.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/60-test_x509_time.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/60-test_x509_time.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_asyncio.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_asyncio.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_asyncio.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_asyncio.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_bad_dtls.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_bad_dtls.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_bad_dtls.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_bad_dtls.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_clienthello.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_clienthello.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_clienthello.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_clienthello.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_comp.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_comp.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_comp.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_comp.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_key_share.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_key_share.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_key_share.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_key_share.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_packet.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_packet.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_packet.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_packet.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_recordlen.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_recordlen.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_recordlen.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_recordlen.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_renegotiation.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_renegotiation.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_renegotiation.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_renegotiation.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_servername.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_servername.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_servername.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_servername.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcbcpadding.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslcbcpadding.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcbcpadding.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslcbcpadding.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcertstatus.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslcertstatus.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslcertstatus.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslcertstatus.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslextension.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslextension.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslextension.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslextension.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslmessages.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslmessages.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslmessages.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslmessages.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslrecords.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslrecords.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslrecords.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslrecords.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsessiontick.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslsessiontick.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsessiontick.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslsessiontick.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsigalgs.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslsigalgs.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsigalgs.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslsigalgs.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsignature.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslsignature.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslsignature.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslsignature.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslskewith0p.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslskewith0p.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslskewith0p.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslskewith0p.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslversions.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslversions.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslversions.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslversions.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslvertol.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslvertol.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_sslvertol.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_sslvertol.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13alerts.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13alerts.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13alerts.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13alerts.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13cookie.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13cookie.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13cookie.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13cookie.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13downgrade.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13downgrade.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13downgrade.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13downgrade.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13hrr.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13hrr.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13hrr.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13hrr.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13kexmodes.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13kexmodes.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13kexmodes.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13kexmodes.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13messages.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13messages.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13messages.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13messages.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13psk.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13psk.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tls13psk.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tls13psk.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tlsextms.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tlsextms.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_tlsextms.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_tlsextms.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_verify_extra.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_verify_extra.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_verify_extra.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_verify_extra.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_wpacket.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_wpacket.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/70-test_wpacket.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/70-test_wpacket.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ca.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ca.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ca.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ca.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherbytes.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cipherbytes.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherbytes.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cipherbytes.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherlist.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cipherlist.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cipherlist.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cipherlist.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ciphername.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ciphername.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ciphername.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ciphername.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/bad_signtime_attr.cms b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/bad_signtime_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/bad_signtime_attr.cms rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/bad_signtime_attr.cms diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/ct_multiple_attr.cms b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/ct_multiple_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/ct_multiple_attr.cms rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/ct_multiple_attr.cms diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_ct_attr.cms b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/no_ct_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_ct_attr.cms rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/no_ct_attr.cms diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_md_attr.cms b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/no_md_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cms_data/no_md_attr.cms rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cms_data/no_md_attr.cms diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cmsapi.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cmsapi.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_cmsapi.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_cmsapi.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ct.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ct.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ct.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ct.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dane.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dane.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dane.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dane.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dtls.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dtls.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls_mtu.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dtls_mtu.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtls_mtu.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dtls_mtu.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtlsv1listen.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dtlsv1listen.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_dtlsv1listen.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_dtlsv1listen.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ocsp.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ocsp.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/cert.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ocsp_data/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/cert.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ocsp_data/cert.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/key.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ocsp_data/key.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ocsp_data/key.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ocsp_data/key.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_pkcs12.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_pkcs12.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_pkcs12.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_pkcs12.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_leaf.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/large_leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_leaf.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/large_leaf.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_policy_tree.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/large_policy_tree.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/large_policy_tree.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/large_policy_tree.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_leaf.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/small_leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_leaf.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/small_leaf.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_policy_tree.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/small_policy_tree.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_policy_tree_data/small_policy_tree.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_policy_tree_data/small_policy_tree.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_new.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ssl_new.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_new.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ssl_new.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_old.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ssl_old.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_old.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ssl_old.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_test_ctx.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ssl_test_ctx.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_ssl_test_ctx.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_ssl_test_ctx.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_sslcorrupt.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_sslcorrupt.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_sslcorrupt.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_sslcorrupt.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_tsa.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_tsa.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_tsa.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_tsa.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_x509aux.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_x509aux.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/80-test_x509aux.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/80-test_x509aux.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_asn1_time.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_asn1_time.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_asn1_time.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_asn1_time.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_async.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_async.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_async.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_async.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_enc.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_bio_enc.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_enc.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_bio_enc.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_memleak.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_bio_memleak.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_bio_memleak.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_bio_memleak.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_constant_time.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_constant_time.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_constant_time.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_constant_time.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_fatalerr.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_fatalerr.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_fatalerr.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_fatalerr.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gmdiff.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gmdiff.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gmdiff.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gmdiff.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/gost.conf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/gost.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/gost.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/gost.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2001.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-cert2001.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2001.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-cert2001.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2012.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-cert2012.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-cert2012.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-cert2012.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2001.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-key2001.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2001.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-key2001.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2012.pem b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-key2012.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_gost_data/server-key2012.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_gost_data/server-key2012.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_ige.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_ige.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_ige.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_ige.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes1.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/conf-includes/includes1.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes1.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/conf-includes/includes1.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes2.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/conf-includes/includes2.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/conf-includes/includes2.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/conf-includes/includes2.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-broken.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-broken.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-broken.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-broken.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq-ws.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-eq-ws.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq-ws.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-eq-ws.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-eq.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-eq.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-eq.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-file.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-file.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes-file.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes-file.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/includes.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/includes.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes-file.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/vms-includes-file.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes-file.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/vms-includes-file.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/vms-includes.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_includes_data/vms-includes.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_includes_data/vms-includes.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_memleak.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_memleak.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_memleak.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_memleak.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_overhead.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_overhead.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_overhead.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_overhead.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_secmem.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_secmem.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_secmem.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_secmem.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_shlibload.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_shlibload.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_shlibload.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_shlibload.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_srp.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_srp.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_srp.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_srp.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sslapi.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sslapi.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi_data/passwd.txt b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sslapi_data/passwd.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslapi_data/passwd.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sslapi_data/passwd.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslbuffers.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sslbuffers.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sslbuffers.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sslbuffers.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_store.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_store.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/ca.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_store_data/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/ca.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_store_data/ca.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/user.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_store_data/user.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_store_data/user.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_store_data/user.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sysdefault.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sysdefault.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_sysdefault.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_sysdefault.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_threads.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_threads.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_threads.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_threads.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_time_offset.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_time_offset.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_time_offset.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_time_offset.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13ccs.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_tls13ccs.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13ccs.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_tls13ccs.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13encryption.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_tls13encryption.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13encryption.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_tls13encryption.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13secrets.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_tls13secrets.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_tls13secrets.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_tls13secrets.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_v3name.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_v3name.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/90-test_v3name.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/90-test_v3name.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_boringssl.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_boringssl.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_boringssl.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_boringssl.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_krb5.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_krb5.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5_data/krb5.sh b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_krb5_data/krb5.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_krb5_data/krb5.sh rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_krb5_data/krb5.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_pyca.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_pyca.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca_data/cryptography.sh b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_pyca_data/cryptography.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/95-test_external_pyca_data/cryptography.sh rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/95-test_external_pyca_data/cryptography.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_ecstress.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/99-test_ecstress.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_ecstress.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/99-test_ecstress.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_fuzz.t b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/99-test_fuzz.t similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/99-test_fuzz.t rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/99-test_fuzz.t diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/ocsp-response.der b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/ocsp-response.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/ocsp-response.der rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/ocsp-response.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recipes/tconversion.pl b/src/openssl/openssl-1.1.1w-chevah2/test/recipes/tconversion.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recipes/tconversion.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/recipes/tconversion.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/recordlentest.c b/src/openssl/openssl-1.1.1w-chevah2/test/recordlentest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/recordlentest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/recordlentest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rsa_complex.c b/src/openssl/openssl-1.1.1w-chevah2/test/rsa_complex.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rsa_complex.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rsa_complex.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rsa_mp_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/rsa_mp_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rsa_mp_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rsa_mp_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/rsa_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/rsa_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/rsa_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/rsa_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/run_tests.pl b/src/openssl/openssl-1.1.1w-chevah2/test/run_tests.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/run_tests.pl rename to src/openssl/openssl-1.1.1w-chevah2/test/run_tests.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sanitytest.c b/src/openssl/openssl-1.1.1w-chevah2/test/sanitytest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sanitytest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sanitytest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/secmemtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/secmemtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/secmemtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/secmemtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/serverinfo.pem b/src/openssl/openssl-1.1.1w-chevah2/test/serverinfo.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/serverinfo.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/serverinfo.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/serverinfo2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/serverinfo2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/serverinfo2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/serverinfo2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/servername_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/servername_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/servername_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/servername_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/session.pem b/src/openssl/openssl-1.1.1w-chevah2/test/session.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/session.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/session.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/shibboleth.pfx b/src/openssl/openssl-1.1.1w-chevah2/test/shibboleth.pfx similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/shibboleth.pfx rename to src/openssl/openssl-1.1.1w-chevah2/test/shibboleth.pfx diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/shlibloadtest.c b/src/openssl/openssl-1.1.1w-chevah2/test/shlibloadtest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/shlibloadtest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/shlibloadtest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/siphash_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/siphash_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/siphash_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/siphash_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sm2_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/sm2_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sm2_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sm2_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sm4_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/sm4_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sm4_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sm4_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smcont.txt b/src/openssl/openssl-1.1.1w-chevah2/test/smcont.txt similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smcont.txt rename to src/openssl/openssl-1.1.1w-chevah2/test/smcont.txt diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/badrsa.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/badrsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/badrsa.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/badrsa.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/ca.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/ca.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/ca.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/mksmime-certs.sh b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/mksmime-certs.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/mksmime-certs.sh rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/mksmime-certs.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdh.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdh.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdh.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdh.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsa1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsa1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsa2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa3.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsa3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsa3.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsa3.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsap.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsap.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smdsap.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smdsap.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smec1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smec1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smec2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smec2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec3.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smec3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smec3.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smec3.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smroot.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smroot.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smroot.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smroot.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smrsa1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smrsa1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smrsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smrsa2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa3.pem b/src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smrsa3.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/smime-certs/smrsa3.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/smime-certs/smrsa3.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/srptest.c b/src/openssl/openssl-1.1.1w-chevah2/test/srptest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/srptest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/srptest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/01-simple.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/01-simple.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/01-simple.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/01-simple.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/01-simple.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/02-protocol-version.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/02-protocol-version.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/02-protocol-version.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/02-protocol-version.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/02-protocol-version.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/03-custom_verify.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/03-custom_verify.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/03-custom_verify.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/03-custom_verify.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/03-custom_verify.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/04-client_auth.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/04-client_auth.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/04-client_auth.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/04-client_auth.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/04-client_auth.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/05-sni.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/05-sni.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/05-sni.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/05-sni.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/05-sni.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/06-sni-ticket.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/06-sni-ticket.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/06-sni-ticket.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/06-sni-ticket.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/06-sni-ticket.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/07-dtls-protocol-version.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/07-dtls-protocol-version.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/07-dtls-protocol-version.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/07-dtls-protocol-version.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/07-dtls-protocol-version.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/08-npn.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/08-npn.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/08-npn.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/08-npn.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/08-npn.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/09-alpn.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/09-alpn.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/09-alpn.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/09-alpn.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/09-alpn.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/10-resumption.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/10-resumption.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/10-resumption.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/10-resumption.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/10-resumption.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/11-dtls_resumption.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/11-dtls_resumption.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/11-dtls_resumption.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/11-dtls_resumption.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/11-dtls_resumption.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/12-ct.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/12-ct.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/12-ct.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/12-ct.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/12-ct.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/13-fragmentation.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/13-fragmentation.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/13-fragmentation.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/13-fragmentation.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/13-fragmentation.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/14-curves.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/14-curves.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/14-curves.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/14-curves.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/14-curves.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/15-certstatus.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/15-certstatus.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/15-certstatus.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/15-certstatus.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/15-certstatus.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/16-dtls-certstatus.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/16-dtls-certstatus.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/16-dtls-certstatus.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/16-dtls-certstatus.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/16-dtls-certstatus.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/17-renegotiate.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/17-renegotiate.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/17-renegotiate.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/17-renegotiate.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/17-renegotiate.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/18-dtls-renegotiate.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/18-dtls-renegotiate.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/18-dtls-renegotiate.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/18-dtls-renegotiate.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/18-dtls-renegotiate.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/19-mac-then-encrypt.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/19-mac-then-encrypt.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/19-mac-then-encrypt.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/19-mac-then-encrypt.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/19-mac-then-encrypt.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/20-cert-select.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/20-cert-select.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/20-cert-select.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/20-cert-select.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/20-cert-select.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/21-key-update.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/21-key-update.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/21-key-update.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/21-key-update.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/21-key-update.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/22-compression.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/22-compression.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/22-compression.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/22-compression.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/22-compression.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/23-srp.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/23-srp.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/23-srp.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/23-srp.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/23-srp.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/24-padding.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/24-padding.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/24-padding.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/24-padding.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/24-padding.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/25-cipher.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/25-cipher.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/25-cipher.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/25-cipher.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/25-cipher.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/26-tls13_client_auth.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/26-tls13_client_auth.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/26-tls13_client_auth.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/26-tls13_client_auth.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/26-tls13_client_auth.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/27-ticket-appdata.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/27-ticket-appdata.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/27-ticket-appdata.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/27-ticket-appdata.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/27-ticket-appdata.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/28-seclevel.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/28-seclevel.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/28-seclevel.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/28-seclevel.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/28-seclevel.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/29-dtls-sctp-label-bug.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/29-dtls-sctp-label-bug.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/29-dtls-sctp-label-bug.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/29-dtls-sctp-label-bug.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/29-dtls-sctp-label-bug.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/30-supported-groups.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/30-supported-groups.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf.in b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/30-supported-groups.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/30-supported-groups.conf.in rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/30-supported-groups.conf.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/protocol_version.pm b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/protocol_version.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/protocol_version.pm rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/protocol_version.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/ssltests_base.pm b/src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/ssltests_base.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl-tests/ssltests_base.pm rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl-tests/ssltests_base.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_cert_table_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_cert_table_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_cert_table_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_cert_table_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_ctx_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_ctx_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_ctx_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_ctx_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.tmpl b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_test.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_test.tmpl rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_test.tmpl diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.h b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.conf b/src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx_test.conf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssl_test_ctx_test.conf rename to src/openssl/openssl-1.1.1w-chevah2/test/ssl_test_ctx_test.conf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sslapitest.c b/src/openssl/openssl-1.1.1w-chevah2/test/sslapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sslapitest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sslapitest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sslbuffertest.c b/src/openssl/openssl-1.1.1w-chevah2/test/sslbuffertest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sslbuffertest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sslbuffertest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sslcorrupttest.c b/src/openssl/openssl-1.1.1w-chevah2/test/sslcorrupttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sslcorrupttest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sslcorrupttest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssltest_old.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssltest_old.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssltest_old.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssltest_old.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.c b/src/openssl/openssl-1.1.1w-chevah2/test/ssltestlib.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.c rename to src/openssl/openssl-1.1.1w-chevah2/test/ssltestlib.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.h b/src/openssl/openssl-1.1.1w-chevah2/test/ssltestlib.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/ssltestlib.h rename to src/openssl/openssl-1.1.1w-chevah2/test/ssltestlib.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/stack_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/stack_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/stack_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/stack_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sysdefault.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/sysdefault.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sysdefault.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/sysdefault.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/sysdefaulttest.c b/src/openssl/openssl-1.1.1w-chevah2/test/sysdefaulttest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/sysdefaulttest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/sysdefaulttest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/test.cnf b/src/openssl/openssl-1.1.1w-chevah2/test/test.cnf similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/test.cnf rename to src/openssl/openssl-1.1.1w-chevah2/test/test.cnf diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/test_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/test_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/test_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/test_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testcrl.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testcrl.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testcrl.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testcrl.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testdsa.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testdsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testdsa.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testdsa.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testdsapub.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testdsapub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testdsapub.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testdsapub.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testec-p256.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testec-p256.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testec-p256.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testec-p256.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testecpub-p256.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testecpub-p256.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testecpub-p256.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testecpub-p256.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tested25519.pem b/src/openssl/openssl-1.1.1w-chevah2/test/tested25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tested25519.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/tested25519.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tested25519pub.pem b/src/openssl/openssl-1.1.1w-chevah2/test/tested25519pub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tested25519pub.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/tested25519pub.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tested448.pem b/src/openssl/openssl-1.1.1w-chevah2/test/tested448.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tested448.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/tested448.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tested448pub.pem b/src/openssl/openssl-1.1.1w-chevah2/test/tested448pub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tested448pub.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/tested448pub.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testp7.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testp7.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testp7.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testp7.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testreq2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testreq2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testreq2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testreq2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testrsa.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testrsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testrsa.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testrsa.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.der b/src/openssl/openssl-1.1.1w-chevah2/test/testrsa_withattrs.der similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.der rename to src/openssl/openssl-1.1.1w-chevah2/test/testrsa_withattrs.der diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testrsa_withattrs.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testrsa_withattrs.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testrsa_withattrs.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testrsapub.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testrsapub.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testrsapub.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testrsapub.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testsid.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testsid.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testsid.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testsid.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil.h b/src/openssl/openssl-1.1.1w-chevah2/test/testutil.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil.h rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/basic_output.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/basic_output.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/basic_output.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/basic_output.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/cb.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/cb.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/cb.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/cb.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/driver.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/driver.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/driver.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/driver.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/format_output.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/format_output.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/format_output.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/format_output.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/main.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/main.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/main.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/main.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/output.h b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/output.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/output.h rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/output.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/output_helpers.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/output_helpers.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/output_helpers.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/output_helpers.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/random.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/random.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/random.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/random.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/stanza.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/stanza.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/stanza.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/stanza.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/tap_bio.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/tap_bio.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/tap_bio.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/tap_bio.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/test_cleanup.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/test_cleanup.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/test_cleanup.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/test_cleanup.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/tests.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/tests.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/tests.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/tests.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/testutil_init.c b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/testutil_init.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/testutil_init.c rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/testutil_init.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testutil/tu_local.h b/src/openssl/openssl-1.1.1w-chevah2/test/testutil/tu_local.h similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testutil/tu_local.h rename to src/openssl/openssl-1.1.1w-chevah2/test/testutil/tu_local.h diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/testx509.pem b/src/openssl/openssl-1.1.1w-chevah2/test/testx509.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/testx509.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/testx509.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/threadstest.c b/src/openssl/openssl-1.1.1w-chevah2/test/threadstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/threadstest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/threadstest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/time_offset_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/time_offset_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/time_offset_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/time_offset_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tls13ccstest.c b/src/openssl/openssl-1.1.1w-chevah2/test/tls13ccstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tls13ccstest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/tls13ccstest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tls13encryptiontest.c b/src/openssl/openssl-1.1.1w-chevah2/test/tls13encryptiontest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tls13encryptiontest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/tls13encryptiontest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/tls13secretstest.c b/src/openssl/openssl-1.1.1w-chevah2/test/tls13secretstest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/tls13secretstest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/tls13secretstest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/uitest.c b/src/openssl/openssl-1.1.1w-chevah2/test/uitest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/uitest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/uitest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/v3-cert1.pem b/src/openssl/openssl-1.1.1w-chevah2/test/v3-cert1.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/v3-cert1.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/v3-cert1.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/v3-cert2.pem b/src/openssl/openssl-1.1.1w-chevah2/test/v3-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/v3-cert2.pem rename to src/openssl/openssl-1.1.1w-chevah2/test/v3-cert2.pem diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/v3ext.c b/src/openssl/openssl-1.1.1w-chevah2/test/v3ext.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/v3ext.c rename to src/openssl/openssl-1.1.1w-chevah2/test/v3ext.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/v3nametest.c b/src/openssl/openssl-1.1.1w-chevah2/test/v3nametest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/v3nametest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/v3nametest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/verify_extra_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/verify_extra_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/verify_extra_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/verify_extra_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/versions.c b/src/openssl/openssl-1.1.1w-chevah2/test/versions.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/versions.c rename to src/openssl/openssl-1.1.1w-chevah2/test/versions.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/wpackettest.c b/src/openssl/openssl-1.1.1w-chevah2/test/wpackettest.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/wpackettest.c rename to src/openssl/openssl-1.1.1w-chevah2/test/wpackettest.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/x509_check_cert_pkey_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/x509_check_cert_pkey_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/x509_check_cert_pkey_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/x509_check_cert_pkey_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/x509_dup_cert_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/x509_dup_cert_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/x509_dup_cert_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/x509_dup_cert_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/x509_internal_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/x509_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/x509_internal_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/x509_internal_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/x509_time_test.c b/src/openssl/openssl-1.1.1w-chevah2/test/x509_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/x509_time_test.c rename to src/openssl/openssl-1.1.1w-chevah2/test/x509_time_test.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/test/x509aux.c b/src/openssl/openssl-1.1.1w-chevah2/test/x509aux.c similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/test/x509aux.c rename to src/openssl/openssl-1.1.1w-chevah2/test/x509aux.c diff --git a/src/openssl/openssl-1.1.1w-chevah1/tools/build.info b/src/openssl/openssl-1.1.1w-chevah2/tools/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/tools/build.info rename to src/openssl/openssl-1.1.1w-chevah2/tools/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/tools/c_rehash.in b/src/openssl/openssl-1.1.1w-chevah2/tools/c_rehash.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/tools/c_rehash.in rename to src/openssl/openssl-1.1.1w-chevah2/tools/c_rehash.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/add-depends.pl b/src/openssl/openssl-1.1.1w-chevah2/util/add-depends.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/add-depends.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/add-depends.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/build.info b/src/openssl/openssl-1.1.1w-chevah2/util/build.info similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/build.info rename to src/openssl/openssl-1.1.1w-chevah2/util/build.info diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/cavs-to-evptest.pl b/src/openssl/openssl-1.1.1w-chevah2/util/cavs-to-evptest.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/cavs-to-evptest.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/cavs-to-evptest.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/check-malloc-errs b/src/openssl/openssl-1.1.1w-chevah2/util/check-malloc-errs similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/check-malloc-errs rename to src/openssl/openssl-1.1.1w-chevah2/util/check-malloc-errs diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/ck_errf.pl b/src/openssl/openssl-1.1.1w-chevah2/util/ck_errf.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/ck_errf.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/ck_errf.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/copy.pl b/src/openssl/openssl-1.1.1w-chevah2/util/copy.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/copy.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/copy.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/dofile.pl b/src/openssl/openssl-1.1.1w-chevah2/util/dofile.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/dofile.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/dofile.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/echo.pl b/src/openssl/openssl-1.1.1w-chevah2/util/echo.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/echo.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/echo.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/find-doc-nits b/src/openssl/openssl-1.1.1w-chevah2/util/find-doc-nits similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/find-doc-nits rename to src/openssl/openssl-1.1.1w-chevah2/util/find-doc-nits diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/find-unused-errs b/src/openssl/openssl-1.1.1w-chevah2/util/find-unused-errs similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/find-unused-errs rename to src/openssl/openssl-1.1.1w-chevah2/util/find-unused-errs diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/fix-includes b/src/openssl/openssl-1.1.1w-chevah2/util/fix-includes similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/fix-includes rename to src/openssl/openssl-1.1.1w-chevah2/util/fix-includes diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/fix-includes.sed b/src/openssl/openssl-1.1.1w-chevah2/util/fix-includes.sed similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/fix-includes.sed rename to src/openssl/openssl-1.1.1w-chevah2/util/fix-includes.sed diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/indent.pro b/src/openssl/openssl-1.1.1w-chevah2/util/indent.pro similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/indent.pro rename to src/openssl/openssl-1.1.1w-chevah2/util/indent.pro diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/libcrypto.num b/src/openssl/openssl-1.1.1w-chevah2/util/libcrypto.num similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/libcrypto.num rename to src/openssl/openssl-1.1.1w-chevah2/util/libcrypto.num diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/libssl.num b/src/openssl/openssl-1.1.1w-chevah2/util/libssl.num similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/libssl.num rename to src/openssl/openssl-1.1.1w-chevah2/util/libssl.num diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/local_shlib.com.in b/src/openssl/openssl-1.1.1w-chevah2/util/local_shlib.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/local_shlib.com.in rename to src/openssl/openssl-1.1.1w-chevah2/util/local_shlib.com.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/mkbuildinf.pl b/src/openssl/openssl-1.1.1w-chevah2/util/mkbuildinf.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/mkbuildinf.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/mkbuildinf.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/mkdef.pl b/src/openssl/openssl-1.1.1w-chevah2/util/mkdef.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/mkdef.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/mkdef.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/mkdir-p.pl b/src/openssl/openssl-1.1.1w-chevah2/util/mkdir-p.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/mkdir-p.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/mkdir-p.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/mkerr.pl b/src/openssl/openssl-1.1.1w-chevah2/util/mkerr.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/mkerr.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/mkerr.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/mkrc.pl b/src/openssl/openssl-1.1.1w-chevah2/util/mkrc.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/mkrc.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/mkrc.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/openssl-format-source b/src/openssl/openssl-1.1.1w-chevah2/util/openssl-format-source similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/openssl-format-source rename to src/openssl/openssl-1.1.1w-chevah2/util/openssl-format-source diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/openssl-update-copyright b/src/openssl/openssl-1.1.1w-chevah2/util/openssl-update-copyright similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/openssl-update-copyright rename to src/openssl/openssl-1.1.1w-chevah2/util/openssl-update-copyright diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/opensslwrap.sh b/src/openssl/openssl-1.1.1w-chevah2/util/opensslwrap.sh similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/opensslwrap.sh rename to src/openssl/openssl-1.1.1w-chevah2/util/opensslwrap.sh diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Glob.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Glob.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Glob.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Glob.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Test.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Test.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Simple.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Test/Simple.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Simple.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Test/Simple.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Utils.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Test/Utils.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Test/Utils.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Test/Utils.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Util/Pod.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Util/Pod.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/Util/Pod.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/Util/Pod.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/copyright.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/copyright.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/OpenSSL/copyright.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/OpenSSL/copyright.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Alert.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Alert.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Alert.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Alert.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Certificate.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Certificate.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Certificate.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Certificate.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateRequest.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/CertificateRequest.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateRequest.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/CertificateRequest.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateVerify.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/CertificateVerify.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/CertificateVerify.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/CertificateVerify.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ClientHello.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/ClientHello.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ClientHello.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/ClientHello.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/EncryptedExtensions.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/EncryptedExtensions.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/EncryptedExtensions.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/EncryptedExtensions.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Message.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Message.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Message.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Message.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/NewSessionTicket.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/NewSessionTicket.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/NewSessionTicket.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/NewSessionTicket.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Proxy.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Proxy.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Proxy.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Proxy.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Record.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Record.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/Record.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/Record.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerHello.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/ServerHello.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerHello.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/ServerHello.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerKeyExchange.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/ServerKeyExchange.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/TLSProxy/ServerKeyExchange.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/TLSProxy/ServerKeyExchange.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/checkhandshake.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/checkhandshake.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/checkhandshake.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/checkhandshake.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/perl/with_fallback.pm b/src/openssl/openssl-1.1.1w-chevah2/util/perl/with_fallback.pm similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/perl/with_fallback.pm rename to src/openssl/openssl-1.1.1w-chevah2/util/perl/with_fallback.pm diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/private.num b/src/openssl/openssl-1.1.1w-chevah2/util/private.num similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/private.num rename to src/openssl/openssl-1.1.1w-chevah2/util/private.num diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/process_docs.pl b/src/openssl/openssl-1.1.1w-chevah2/util/process_docs.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/process_docs.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/process_docs.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/shlib_wrap.sh.in b/src/openssl/openssl-1.1.1w-chevah2/util/shlib_wrap.sh.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/shlib_wrap.sh.in rename to src/openssl/openssl-1.1.1w-chevah2/util/shlib_wrap.sh.in diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/su-filter.pl b/src/openssl/openssl-1.1.1w-chevah2/util/su-filter.pl similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/su-filter.pl rename to src/openssl/openssl-1.1.1w-chevah2/util/su-filter.pl diff --git a/src/openssl/openssl-1.1.1w-chevah1/util/unlocal_shlib.com.in b/src/openssl/openssl-1.1.1w-chevah2/util/unlocal_shlib.com.in similarity index 100% rename from src/openssl/openssl-1.1.1w-chevah1/util/unlocal_shlib.com.in rename to src/openssl/openssl-1.1.1w-chevah2/util/unlocal_shlib.com.in From fff9f2219bac5537eba7ca7e9ef8747cb10361ea Mon Sep 17 00:00:00 2001 From: dumol Date: Thu, 15 Aug 2024 14:54:16 +0000 Subject: [PATCH 34/42] Updated OpenSSL 1.1.1 version to build to 1.1.1w-chevah2. --- chevah_build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chevah_build b/chevah_build index 427fc1522..6b8d86aad 100755 --- a/chevah_build +++ b/chevah_build @@ -22,7 +22,7 @@ LIBEDIT_VERSION="20170329-3.1" # As of November 2023, security patches for OpenSSL 1.1.1 are private. # More at https://openssl-library.org/news/vulnerabilities-1.1.1/index.html. # Some fixes can still be found in the OpenSSL 1.1.1f sources from Ubuntu 20.04. -OPENSSL_VERSION="1.1.1w-chevah1" +OPENSSL_VERSION="1.1.1w-chevah2" SQLITE_VERSION="3.46.0" # Python modules versions to be used everywhere possible. From c01cfeff3babb5b97b6f33b104256d891fc71891 Mon Sep 17 00:00:00 2001 From: dumol Date: Fri, 16 Aug 2024 08:54:10 +0000 Subject: [PATCH 35/42] Patch CVE-2023-49083 for cryptography 3.2.1 the same way as for CVE-2023-23931. --- .../CVE-2023-49083.patch | 35 +++++++++++++++++++ .../hazmat/backends/openssl/backend.py | 5 +-- .../tests/hazmat/primitives/test_pkcs7.py | 6 ---- 3 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 python-modules/cryptography-3.2.1-patches/CVE-2023-49083.patch diff --git a/python-modules/cryptography-3.2.1-patches/CVE-2023-49083.patch b/python-modules/cryptography-3.2.1-patches/CVE-2023-49083.patch new file mode 100644 index 000000000..0611cb56d --- /dev/null +++ b/python-modules/cryptography-3.2.1-patches/CVE-2023-49083.patch @@ -0,0 +1,35 @@ +diff --git a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py +index b7757e33..235414b8 100644 +--- a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py ++++ b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py +@@ -2673,9 +2673,12 @@ class Backend(object): + _Reasons.UNSUPPORTED_SERIALIZATION, + ) + ++ certs = [] # type: list of x509.Certificate ++ if p7.d.sign == self._ffi.NULL: ++ return certs ++ + sk_x509 = p7.d.sign.cert + num = self._lib.sk_X509_num(sk_x509) +- certs = [] + for i in range(num): + x509 = self._lib.sk_X509_value(sk_x509, i) + self.openssl_assert(x509 != self._ffi.NULL) +diff --git a/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py b/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py +index 8b93cb63..148a1e1e 100644 +--- a/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py ++++ b/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py +@@ -80,6 +80,12 @@ class TestPKCS7Loading(object): + mode="rb", + ) + ++ def test_load_pkcs7_empty_certificates(self): ++ der = b"\x30\x0B\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x07\x02" ++ ++ certificates = pkcs7.load_der_pkcs7_certificates(der) ++ assert certificates == [] ++ + + # We have no public verification API and won't be adding one until we get + # some requirements from users so this function exists to give us basic diff --git a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py index 235414b81..b7757e333 100644 --- a/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py +++ b/python-modules/cryptography-3.2.1/src/cryptography/hazmat/backends/openssl/backend.py @@ -2673,12 +2673,9 @@ def _load_pkcs7_certificates(self, p7): _Reasons.UNSUPPORTED_SERIALIZATION, ) - certs = [] # type: list of x509.Certificate - if p7.d.sign == self._ffi.NULL: - return certs - sk_x509 = p7.d.sign.cert num = self._lib.sk_X509_num(sk_x509) + certs = [] for i in range(num): x509 = self._lib.sk_X509_value(sk_x509, i) self.openssl_assert(x509 != self._ffi.NULL) diff --git a/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py b/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py index 148a1e1ec..8b93cb633 100644 --- a/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py +++ b/python-modules/cryptography-3.2.1/tests/hazmat/primitives/test_pkcs7.py @@ -80,12 +80,6 @@ def test_load_pkcs7_unsupported_type(self): mode="rb", ) - def test_load_pkcs7_empty_certificates(self): - der = b"\x30\x0B\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x07\x02" - - certificates = pkcs7.load_der_pkcs7_certificates(der) - assert certificates == [] - # We have no public verification API and won't be adding one until we get # some requirements from users so this function exists to give us basic From 4a73fb1991ce0ae0f5f3736554d6e9f92a8e2cf9 Mon Sep 17 00:00:00 2001 From: dumol Date: Fri, 16 Aug 2024 09:04:12 +0000 Subject: [PATCH 36/42] More changes after own review. --- chevah_build | 2 +- src/openssl/README | 14 ++++++++------ src/python/README | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/chevah_build b/chevah_build index 6b8d86aad..7cf2f6325 100755 --- a/chevah_build +++ b/chevah_build @@ -21,7 +21,7 @@ BZIP2_VERSION="1.0.8" LIBEDIT_VERSION="20170329-3.1" # As of November 2023, security patches for OpenSSL 1.1.1 are private. # More at https://openssl-library.org/news/vulnerabilities-1.1.1/index.html. -# Some fixes can still be found in the OpenSSL 1.1.1f sources from Ubuntu 20.04. +# See src/openssl/README for details on where to get them anyway. OPENSSL_VERSION="1.1.1w-chevah2" SQLITE_VERSION="3.46.0" diff --git a/src/openssl/README b/src/openssl/README index 581259c5d..446ab4e87 100644 --- a/src/openssl/README +++ b/src/openssl/README @@ -1,9 +1,11 @@ -# OpenSSL 1.0.2 sources are patched with latest security fixes from the +# OpenSSL 1.1.1 tree is patched with security fixes for the 1.1.1f sources in +# Ubuntu 20.04 at http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. +# E.g. see debian/patches in openssl_1.1.1f-1ubuntu2.23.debian.tar.xz. + +# OpenSSL 1.0.2 tree is patched with the security fixes from the # CentOS 7 sources at https://git.centos.org/rpms/openssl/blob/c7/f/SOURCES. # Latest patches are at https://git.centos.org/rpms/openssl/commits/c7. -# If not found above, latest patches for OpenSSL 1.1.1 are in 1.1.1f sources for -# Ubuntu 20.04 at http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. E.g. -# http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.1.1f-1ubuntu2.23.debian.tar.xz + # Until 2023, Ubuntu Server 16.04 source updates for OpenSSL 1.0.2 were -# available at http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. E.g. -# http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.0.2g-1ubuntu4.19.debian.tar.xz +# available at http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/. +# E.g. see debian/patches in openssl_1.0.2g-1ubuntu4.19.debian.tar.xz. diff --git a/src/python/README b/src/python/README index f3d5a7602..8f46bd496 100644 --- a/src/python/README +++ b/src/python/README @@ -15,7 +15,7 @@ to apply to our Python sources tree, then issue something like: patch -p1 < ~/Downloads/CVE-2020-10735.diff Python sources are currently patched from upstream Active State branch up to and -including fixes from Aug 9, 2024 for ActiveState Python version 2.7.18.10. +including fixes from Aug 13, 2024 for ActiveState Python version 2.7.18.10. Patches that can be applied on Windows as hot fixes (see below for more details) are saved as diff files in the current directory. They are also applied on From 83ac9498b07ec112f1cee3ff46b60e8343c5a100 Mon Sep 17 00:00:00 2001 From: dumol Date: Fri, 16 Aug 2024 10:05:18 +0000 Subject: [PATCH 37/42] Updated documented external deps sheets. --- external_deps.csv | 48 +- external_deps.fods | 1124 ++++++++++++++++++++++++-------------------- 2 files changed, 630 insertions(+), 542 deletions(-) diff --git a/external_deps.csv b/external_deps.csv index 415065297..3c68a06eb 100644 --- a/external_deps.csv +++ b/external_deps.csv @@ -1,44 +1,44 @@ OS,AIX,,,Amazon,Alpine,Debian,FreeBSD,,HP-UX,macOS,OS X,RHEL,,,SLES,Solaris,,,,Ubuntu Server,,,,Windows, -OS Version,5.3³,6.1³,7.1+¹,2+¹,3.12+¹,5.0+²,11.4³,12.2+³,11.31³,10.13+¹,10.8³,5.11-7.x¹,8.x¹,9.x¹,11SP4+²,10u8+³,11.0/11.1³,11.2³,11.4³,14.04/16.04¹,18.04¹,20.04¹,22.04¹,"XP, 2003, 2008³","2012r2, 2016, 2019, 2022¹" +OS Version,5.3³,6.1³,7.1+²,2+¹,3.12+¹,6.0+²,11.4³,12.2+³,11.31³,10.13+¹,10.8³,5.11-7.x¹,8.x¹,9.x+¹,11SP4+²,10u8+³,11.0/11.1³,11.2³,11.4³,16.04²,18.04¹,20.04¹,22.04+¹,"XP, 2003, 2008³","2012r2, 2016, 2019, 2022¹" OpenSSL⁶,"1.0.2v-chevah2 (statically linked with stdlib “ssl”) 1.0.2v-chevah2 (statically linked with cryptography)",1.0.2k (from AIX Web Download Pack Programs),"1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”) -1.0.2v-chevah5¹⁵ (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)",1.0.1u,1.0.2s,1.0.2h,"1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)","1.1.1g (statically built for stdlib “ssl”) -1.1.1g (bundled with upstream cryptography 2.9.1)","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)","1.1.1cFIPS / -1.1.1k FIPS","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)",1.0.2n (from upstream Oracle patches),1.0.0x,1.0.1h," -1.0.2o","1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)",1.1.0g,1.1.1f,"1.1.1w (statically linked with stdlib “ssl”) -1.1.1w (statically linked with cryptography)","1.0.2t (bundled with upstream Python 2.7.18) +1.0.2v-chevah5¹⁵ (statically linked with cryptography)","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)",1.0.1u,1.0.2s,1.0.2h,"1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)","1.1.1g (statically built for stdlib “ssl”) +1.1.1g (bundled with upstream cryptography 2.9.1)","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)","1.1.1cFIPS / +1.1.1k FIPS","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)",1.0.2n (from upstream Oracle patches),1.0.0x,1.0.1h," +1.0.2o","1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)",1.1.0g,1.1.1f,"1.1.1w-chevah2 (statically linked with stdlib “ssl”) +1.1.1w-chevah2 (statically linked with cryptography)","1.0.2t (bundled with upstream Python 2.7.18) 1.1.1g (bundled with upstream cryptography 2.9.1)","1.0.2t⁹ (bundled with upstream Python 2.7.18) -1.1.1w (built from upstream sources for cryptography)" +1.1.1w-chevah2 (built from upstream sources for cryptography)" Python,2.7.18+patches,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.8⁴,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18¹¹,2.7.18¹³ -SQLite,3.34.1,3.34.1,3.43.1,3.43.1,3.43.1,3.43.1,3.30.1,3.34.1,3.34.1,3.43.1,3.30.1,3.43.1,3.43.1,3.43.1,3.43.1,3.34.1,3.30.1,3.34.1,3.34.1,3.43.1,3.43.1,3.43.1,3.43.1,3.30.1 (we overwrite version from upstream Python at build time),3.43.1 (we overwrite version from upstream Python at build time) +SQLite,3.46.0,3.34.1,3.46.0,3.46.0,3.46.0,3.46.0,3.30.1,3.46.0,3.46.0,3.46.0,3.30.1,3.46.0,3.46.0,3.46.0,3.46.0,3.46.0,3.30.1,3.46.0,3.46.0,3.46.0,3.46.0,3.46.0,3.46.0,3.30.1 (we overwrite version from upstream Python at build time),3.46.0 (we overwrite version from upstream Python at build time) Expat,2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.1.0⁵ (bundled with Python 2.7.8),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python) -zlib,1.2.12,p/o,1.3,1.3,p/o,1.3,p/o,p/o,1.2.12,1.3,p/o,1.3,p/o,1.3,1.3,p/o,p/o,p/o,p/o,1.3,p/o,p/o,1.3,1.2.11⁸ (bundled with Python),1.2.11⁸ (bundled with Python) +zlib,1.2.12,p/o,1.3.1,1.3.1,1.3.1,1.3.1,p/o,p/o,1.2.12,1.3.1,p/o,1.3.1,p/o,1.3.1,1.3.1,p/o,p/o,p/o,p/o,1.3.1,p/o,p/o,1.3.1,1.2.11⁸ (bundled with Python),1.2.11⁸ (bundled with Python) bzip2,1.0.8,1.0.8,1.0.8,1.0.8,1.0.8,1.0.8,p/o,p/o,1.0.8,p/o,p/o,1.0.8,1.0.8,1.0.8,1.0.8,p/o,p/o,p/o,p/o,1.0.8,1.0.8,1.0.8,1.0.8,1.0.6 (bundled with Python),1.0.6 (bundled with Python) -libffi,3.4.4,3.4.2,3.4.4,p/o,3.4.4,3.4.4,3.4.2,3.4.2,3.4.2,p/o,p/o,3.4.4,p/o,3.4.4,3.4.4,n/a,n/a,3.4.2,3.4.2,p/o,p/o,p/o,p/o,n/a,n/a +libffi,3.4.6,3.4.2,3.4.6,3.4.6,3.4.6,3.4.6,3.4.2,3.4.2,3.4.2,p/o,p/o,3.4.6,p/o,3.4.6,3.4.6,n/a,n/a,3.4.2,3.4.2,3.4.6,p/o,p/o,3.4.6,n/a,n/a libedit,n/a,n/a,n/a,n/a,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,n/a,20170329-3.1,n/a,20170329-3.1,n/a,n/a,n/a,20170329-3.1,20170329-3.1,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,n/a,n/a pysqlite,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,"n/a, upstream sqlite3 is used","n/a, upstream sqlite3 is used" pip,20.3.4¹⁴,9.0.3¹⁴,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,9.0.3¹⁴,20.3.4chevah1,20.3.4¹⁴,20.3.4chevah1,9.0.3¹⁴,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4¹⁴,9.0.3¹⁴,20.3.4¹⁴,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4¹⁴,20.3.4chevah1 setuptools,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,41.6.0¹⁷,41.6.0¹⁷,41.6.0¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷ pycparser,2.20,2.20,2.21,2.21,2.21,2.21,2.20,2.21,2.20,2.21,2.20,2.21,2.21,2.21,2.21,2.20,2.20,2.20,2.21,2.21,2.21,2.21,2.21,2.20,2.21 setproctitle,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10 -cryptography,3.2.1¹²,2.9.2¹²,3.2.1¹⁶,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,2.9.2¹²,3.3.2¹⁶,n/a,3.3.2¹⁶,2.9.2¹² (wheel includes OpenSSL),3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,n/a,n/a,n/a,3.2.1¹²,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,2.9.2¹² (wheel includes OpenSSL),3.3.2¹⁶ +cryptography,3.2.1¹²,2.9.2¹²,3.2.1+patches,3.3.2+patches¹⁶,3.3.2+patches¹⁶,3.3.2+patches¹⁶,2.9.2¹²,3.3.2+patches¹⁶,n/a,3.3.2+patches¹⁶,2.9.2¹² (wheel includes OpenSSL),3.3.2+patches¹⁶,3.3.2+patches¹⁶,3.3.2+patches¹⁶,3.3.2+patches¹⁶,n/a,n/a,n/a,3.2.1¹²,3.3.2+patches¹⁶,3.3.2+patches¹⁶,3.3.2+patches¹⁶,3.3.2+patches¹⁶,2.9.2¹² (wheel includes OpenSSL),3.3.2+patches¹⁶ six,1.15.0,1.13.0,1.15.0,1.15.0,1.15.0,1.15.0,1.11.0,1.15.0,1.15.0,1.15.0,1.11.0,1.15.0,1.15.0,1.15.0,1.15.0,1.15.0,1.11.0,1.15.0,1.15.0,1.11.0,1.11.0,1.11.0,1.11.0,1.11.0,1.11.0 ipaddress,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,n/a,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,n/a,n/a,n/a,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23 cffi,1.14.5,1.14.0,1.15.1,1.15.1,1.15.1,1.15.1,1.14.0,1.15.1,n/a,1.15.1,1.14.0,1.15.1,1.15.1,1.15.1,1.15.1,n/a,1.14.0,1.14.5,1.15.1,1.15.1,1.15.1,1.15.1,1.15.1,1.14.0,1.15.1 asn1crypto,n/a,1.2.0,n/a,n/a,n/a,n/a,1.2.0,n/a,n/a,n/a,1.2.0,n/a,n/a,n/a,n/a,n/a,1.2.0,n/a,n/a,n/a,n/a,n/a,n/a,1.2.0,n/a enum34,1.1.10,1.1.6,1.1.10,1.1.10,1.1.10,1.1.10,1.1.6,1.1.10,n/a,1.1.10,1.1.6,1.1.10,1.1.10,1.1.10,1.1.10,,,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.6,1.1.10 -idna,n/a,2.6,n/a,n/a,n/a,n/a,2.6,n/a,n/a,n/a,2.6,n/a,n/a,n/a,n/a,n/a,2.6,n/a,n/a,n/a,n/a,n/a,n/a,2.6,n/a +idna,n/a,"2,6",n/a,n/a,n/a,n/a,"2,6",n/a,n/a,n/a,"2,6",n/a,n/a,n/a,n/a,n/a,"2,6",n/a,n/a,n/a,n/a,n/a,n/a,"2,6",n/a pyOpenSSL,19.1.0,19.1.0,19.1.0,21.0.0,21.0.0,21.0.0,19.1.0,21.0.0,0.13.1⁷,21.0.0,19.1.0,21.0.0,21.0.0,21.0.0,21.0.0,0.13.1⁷,0.13.1⁷,0.13.1⁷,19.1.0,21.0.0,21.0.0,21.0.0,21.0.0,19.1.0,21.0.0 scandir,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0 -psutil,n/a,5.6.5,5.9.5,5.9.5,5.9.5,5.9.5,n/a,5.9.2,n/a,5.9.5,5.6.5,5.9.5,5.9.5,5.9.5,5.9.5,n/a,n/a,n/a,5.9.2,5.9.5,5.9.5,5.9.5,5.9.5,n/a,5.9.5 +psutil,n/a,5.6.5,6.0.0,5.9.6,6.0.0,5.9.6,n/a,5.9.2,n/a,6.0.0,5.6.5,5.9.6,6.0.0,5.9.6,5.9.6,n/a,n/a,n/a,6.0.0,5.9.6,6.0.0,6.0.0,5.9.6,n/a,6.0.0 subprocess32,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4 bcrypt,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,n/a,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7 pywin32,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,227,228 @@ -56,8 +56,8 @@ Colour codes:,DARKGREY: Tier 2 platforms and their problematic dependencies,,,,, ,,,,,,,,,,,,10. https://www.openssl.org/news/openssl-1.1.1-notes.html,,,,,,,,,,,,, ,,,,,,,,,,,,11. https://github.com/ActiveState/cpython/tags,,,,,,,,,,,,, ,,,,,,,,,,,,12. https://cryptography.io/en/latest/changelog.html,,,,,,,,,,,,, -,,,,,,,,,,,,"13. On Windows, the upstream Python 2.7.18 packages are hot patched for all known issues except CVE-2021-3177 and CVE-2020-10735",,,,,,,,,,,,, +,,,,,,,,,,,,"13. On Windows, the upstream Python 2.7.18 packages are not patched for CVE-2020-10735, CVE-2021-3177, CVE-2022-48560, CVE-2022-48566, CVE-2023-40217, CVE-2024-0397.",,,,,,,,,,,,, ,,,,,,,,,,,,14. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3572,,,,,,,,,,,,, ,,,,,,,,,,,,15. Corresponds to upstream OpenSSL version 1.0.2zg from 07 Feb 2023.,,,,,,,,,,,,, -,,,,,,,,,,,,"16. Both cryptography 3.2.1 and version 3.3.2 have been patched for CVE-2023-23931, but not for CVE-2023-38325.",,,,,,,,,,,,, -,,,,,,,,,,,,17. Versions older than 65.5.1 are vulnerable to CVE-2022-40897.,,,,,,,,,,,,, +,,,,,,,,,,,,"16. Both cryptography 3.2.1 and version 3.3.2+patches have been patched for CVE-2023-23931 and CVE-2023-49083, but not for CVE-2023-38325. Other issues might be present.",,,,,,,,,,,,, +,,,,,,,,,,,,"17. Vulnerable to CVE-2022-40897, CVE-2024-6345.",,,,,,,,,,,,, diff --git a/external_deps.fods b/external_deps.fods index 3752d24ba..e0b577a3d 100644 --- a/external_deps.fods +++ b/external_deps.fods @@ -1,20 +1,20 @@ - LibreOffice/7.6.2.1$Linux_X86_64 LibreOffice_project/56f7684011345957bbf33a7ee678afaf4d2ba333151PT9H17M48Spython-package - external dependencies and associated vulnerabilities2023-10-10T11:39:47.776983843 + LibreOffice/24.2.5.2$Linux_X86_64 LibreOffice_project/bffef4ea93e59bebbeaf7f431bb02b1a39ee8a59166PT10H10M16Spython-package - external dependencies and associated vulnerabilities2024-08-16T13:03:52.122804347 0 0 - 49331 - 24070 + 41189 + 23386 view1 - 3 - 2 + 0 + 1 2 2 1 @@ -103,7 +103,7 @@ false Generic Printer false - 1gH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAwgAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luYWRqdXN0bWVudD0wLDAsJzAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleHREYXRhClBhZ2VTaXplOkE0AER1cGxleDpOb25lAAASAENPTVBBVF9EVVBMRVhfTU9ERQ8ARHVwbGV4TW9kZTo6T2ZmDABQUklOVEVSX05BTUUPAEdlbmVyaWMgUHJpbnRlcgsARFJJVkVSX05BTUUHAFNHRU5QUlQ= + wAH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMArAAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luYWRqdXN0bWVudD0wLDAsJzAsMApjb2xvcmRlcHRoPTI0CmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4dERhdGEKRHVwbGV4Ok5vbmUAUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmYMAFBSSU5URVJfTkFNRQ8AR2VuZXJpYyBQcmludGVyCwBEUklWRVJfTkFNRQcAU0dFTlBSVA== false 1000 1000 @@ -133,63 +133,63 @@ - - + + - + - + - - + + - - + + - + $ - + - $ - + - + : - + : : - + : - + @@ -403,7 +403,7 @@ - + @@ -462,93 +462,109 @@ - + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -556,40 +572,47 @@ + + + . + + . + + - - + + - - - - - - - + + - - + + - - + + + + + + + - + - + @@ -597,434 +620,492 @@ - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + + + + + + - - + + - - + + - - + + + + + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - + + + + + + - - + + - - + + - - + + - + - - + + - - + + + + + + + - - + + - - + + - + - - + + + + + + + - - + + - - + + - - - - - - - + + - - + + - - + + - - + + + + + + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - - + + + + - - + + + + + + + - - + + - - + + - - + + - + + + + + + - - + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - + - - + + - - - - + + + + - - + + + + + + + - - + + - - + + + + + - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + + + + + + - - + + - - + + - - + + + + + + + - - + + - - + + - + @@ -1032,65 +1113,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1099,7 +1180,7 @@ - + @@ -1126,61 +1207,61 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1192,46 +1273,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + @@ -1253,7 +1340,7 @@ ???(???) - 00/00/0000, 00:00:00 + 00.00.0000, 00:00:00 @@ -1287,23 +1374,23 @@ - - + + - - + + - + @@ -1369,8 +1456,7 @@ 6.1³ - - 7.1+¹ + 7.1+² 2+¹ @@ -1378,7 +1464,7 @@ 3.12+¹ - 5.0+² + 6.0+² 11.4³ @@ -1398,9 +1484,9 @@ 8.x¹ - 9.x¹ + 9.x+¹ - 11SP4+² + 11SP4+² 10u8+³ @@ -1410,17 +1496,16 @@ 11.4³ - - 14.04/16.04¹ + 16.04² - + 18.04¹ - + 20.04¹ - - 22.04¹ + + 22.04+¹ XP, 2003, 2008³ @@ -1431,19 +1516,19 @@ - OpenSSL + OpenSSL 1.0.2v-chevah2 (statically linked with stdlib “ssl”)1.0.2v-chevah2 (statically linked with cryptography) 1.0.2k (from AIX Web Download Pack Programs) - 1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”)1.0.2v-chevah5¹⁵ (statically linked with cryptography) + 1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”)1.0.2v-chevah5¹⁵ (statically linked with cryptography) - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) 1.0.1u @@ -1454,17 +1539,17 @@ 1.0.2h - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1g (statically built for stdlib “ssl”)1.1.1g (bundled with upstream cryptography 2.9.1) + 1.1.1g (statically built for stdlib “ssl”)1.1.1g (bundled with upstream cryptography 2.9.1) - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1cFIPS /1.1.1k FIPS + 1.1.1cFIPS /1.1.1k FIPS - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) 1.0.2n (from upstream Oracle patches) @@ -1476,7 +1561,7 @@ 1.0.2o - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) 1.1.0g @@ -1484,73 +1569,73 @@ 1.1.1f - 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) 1.0.2t (bundled with upstream Python 2.7.18)1.1.1g (bundled with upstream cryptography 2.9.1) - 1.0.2t⁹ (bundled with upstream Python 2.7.18)1.1.1w (built from upstream sources for cryptography) + 1.0.2t⁹ (bundled with upstream Python 2.7.18)1.1.1w-chevah2 (built from upstream sources for cryptography) - + Python - + 2.7.18+patches 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches 2.7.8 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches 2.7.18¹¹ - 2.7.18¹³ + 2.7.18¹³ @@ -1559,60 +1644,54 @@ SQLite - 3.34.1 + 3.46.0 3.34.1 - 3.43.1 + 3.46.0 - 3.43.1 + 3.46.0 3.30.1 - - 3.34.1 - - - 3.43.1 + + 3.46.0 3.30.1 - 3.43.1 + 3.46.0 - 3.43.1 + 3.46.0 - - 3.43.1 - - - 3.34.1 + + 3.46.0 3.30.1 - 3.34.1 + 3.46.0 - 3.43.1 + 3.46.0 - 3.43.1 + 3.46.0 - 3.30.1 (we overwrite version from upstream Python at build time) + 3.30.1 (we overwrite version from upstream Python at build time) - 3.43.1 (we overwrite version from upstream Python at build time) + 3.46.0 (we overwrite version from upstream Python at build time) - + Expat @@ -1668,7 +1747,7 @@ - + zlib @@ -1678,14 +1757,14 @@ p/o - - 1.3 + + 1.3.1 - - p/o + + 1.3.1 - - 1.3 + + 1.3.1 p/o @@ -1696,20 +1775,20 @@ 1.2.12 - - 1.3 + + 1.3.1 p/o - - 1.3 + + 1.3.1 p/o - - 1.3 + + 1.3.1 p/o @@ -1720,18 +1799,18 @@ p/o - - 1.3 + + 1.3.1 p/o - - 1.3 + + 1.3.1 - 1.2.11 (bundled with Python) + 1.2.11 (bundled with Python) - 1.2.11 (bundled with Python) + 1.2.11 (bundled with Python) @@ -1804,7 +1883,7 @@ 1.0.6 (bundled with Python) - 1.0.6 (bundled with Python) + 1.0.6 (bundled with Python) @@ -1812,23 +1891,23 @@ libffi - - 3.4.4 + + 3.4.6 3.4.2 - - 3.4.4 + + 3.4.6 - - p/o + + 3.4.6 - - 3.4.4 + + 3.4.6 - - 3.4.4 + + 3.4.6 3.4.2 @@ -1845,17 +1924,17 @@ p/o - - 3.4.4 + + 3.4.6 p/o - - 3.4.4 + + 3.4.6 - - 3.4.4 + + 3.4.6 n/a @@ -1869,14 +1948,14 @@ 3.4.2 - - p/o + + 3.4.6 p/o - - p/o + + 3.4.6 n/a @@ -2024,7 +2103,7 @@ - + pip @@ -2049,7 +2128,7 @@ 20.3.4chevah1 - 20.3.4¹⁴ + 20.3.4¹⁴ 20.3.4chevah1 @@ -2093,7 +2172,7 @@ - + setuptools @@ -2101,13 +2180,13 @@ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ @@ -2115,17 +2194,17 @@ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 41.6.0¹⁷ @@ -2133,19 +2212,19 @@ 41.6.0¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ @@ -2283,32 +2362,27 @@ 2.9.2¹² - 3.2.1¹⁶ - - 3.3.2¹⁶ + + 3.2.1+patches - 3.3.2¹⁶ - - 3.3.2¹⁶ + + 3.3.2+patches¹⁶ 2.9.2¹² - 3.3.2¹⁶ + + 3.3.2+patches¹⁶ n/a - 3.3.2¹⁶ - - 2.9.2¹² (wheel includes OpenSSL) - - 3.3.2¹⁶ + + 3.3.2+patches¹⁶ - 3.3.2¹⁶ + 2.9.2¹² (wheel includes OpenSSL) - 3.3.2¹⁶ - - 3.3.2¹⁶ + + 3.3.2+patches¹⁶ n/a @@ -2318,17 +2392,13 @@ 3.2.1¹² - 3.3.2¹⁶ - - 3.3.2¹⁶ - - 3.3.2¹⁶ + + 3.3.2+patches¹⁶ - 3.3.2¹⁶ + 2.9.2¹² (wheel includes OpenSSL) - 2.9.2¹² (wheel includes OpenSSL) - - 3.3.2¹⁶ + + 3.3.2+patches¹⁶ @@ -2702,13 +2772,13 @@ n/a - 2.6 + 2,6 n/a - 2.6 + 2,6 n/a @@ -2717,7 +2787,7 @@ n/a - 2.6 + 2,6 n/a @@ -2732,7 +2802,7 @@ n/a - 2.6 + 2,6 n/a @@ -2750,14 +2820,14 @@ n/a - 2.6 + 2,6 n/a - + pyOpenSSL @@ -2785,7 +2855,7 @@ 21.0.0 - 0.13.1 + 0.13.1 21.0.0 @@ -2805,7 +2875,7 @@ 21.0.0 - 0.13.1 + 0.13.1 0.13.1 @@ -2911,16 +2981,16 @@ 5.6.5 - 5.9.5 + 6.0.0 - 5.9.5 + 5.9.6 - 5.9.5 + 6.0.0 - 5.9.5 + 5.9.6 n/a @@ -2932,22 +3002,22 @@ n/a - 5.9.5 + 6.0.0 5.6.5 - 5.9.5 + 5.9.6 - 5.9.5 + 6.0.0 - 5.9.5 + 5.9.6 - 5.9.5 + 5.9.6 n/a @@ -2956,22 +3026,22 @@ n/a - 5.9.2 + 6.0.0 - 5.9.5 + 5.9.6 - 5.9.5 + 6.0.0 - 5.9.5 + 5.9.6 n/a - 5.9.5 + 6.0.0 @@ -3200,7 +3270,8 @@ 0. Dependencies above are listed as per the current build process, not necessarily for the latest released versions of python-package. - + + @@ -3214,10 +3285,11 @@ 1. Tier 1 platforms, fully supported and tested - + + - + Colour codes: @@ -3229,10 +3301,11 @@ 2. Tier 2 platforms, partially supported, still built - + + - + LIGHT GREY: Tier 3 platforms and their problematic dependencies @@ -3242,10 +3315,11 @@ 3. Tier 3 platforms, supported at some point, not built any more - + + - + GREEN: no known vulnerabilities for Tier 1 platforms @@ -3255,10 +3329,11 @@ 4. https://www.cvedetails.com/vulnerability-list/vendor_id-10210/product_id-18230/version_id-92056/Python-Python-2.7.html - + + - + BLUE: possible vulnerabilities found upstream, but no released version has them yet @@ -3268,23 +3343,25 @@ 5. https://github.com/libexpat/libexpat/blob/master/expat/Changes - + + - + ORANGE: minor vulnerabilities found - + 6. Unless specified otherwise, OpenSSL libs are linked against dynamically - + + - + RED: major vulnerabilities found @@ -3294,10 +3371,11 @@ 7. pyOpenSSL 0.14 and newer is a major rewrite, so it's not clear to what extent their vulnerabilities do apply - + + - + MAGENTA: vulnerability status could not be established @@ -3306,92 +3384,102 @@ 8. https://cve.report/CVE-2018-25032 and https://cve.report/CVE-2022-37434 - + + - + DEFAULT COLOUR: maintained upstream or not applicable - 9. https://www.openssl.org/news/openssl-1.0.2-notes.html + 9. https://www.openssl.org/news/openssl-1.0.2-notes.html - + + - 10. https://www.openssl.org/news/openssl-1.1.1-notes.html + 10. https://www.openssl.org/news/openssl-1.1.1-notes.html - + + - 11. https://github.com/ActiveState/cpython/tags + 11. https://github.com/ActiveState/cpython/tags - + + - + 12. https://cryptography.io/en/latest/changelog.html - + + - 13. On Windows, the upstream Python 2.7.18 packages are hot patched for all known issues except CVE-2021-3177 and CVE-2020-10735 + 13. On Windows, the upstream Python 2.7.18 packages are not patched for CVE-2020-10735, CVE-2021-3177, CVE-2022-48560, CVE-2022-48566, CVE-2023-40217, CVE-2024-0397. - + + - + 14. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3572 - + + - + 15. Corresponds to upstream OpenSSL version 1.0.2zg from 07 Feb 2023. - + + - - 16. Both cryptography 3.2.1 and version 3.3.2 have been patched for CVE-2023-23931, but not for CVE-2023-38325. + + 16. Both cryptography 3.2.1 and version 3.3.2+patches have been patched for CVE-2023-23931 and CVE-2023-49083, but not for CVE-2023-38325. Other issues might be present. - + + - - 17. Versions older than 65.5.1 are vulnerable to CVE-2022-40897. + + 17. Vulnerable to CVE-2022-40897, CVE-2024-6345. - + + From bc14df653523c97d236c7b8d6552c0c880fee8a9 Mon Sep 17 00:00:00 2001 From: dumol Date: Tue, 20 Aug 2024 08:09:54 +0000 Subject: [PATCH 38/42] Cosmetic changes for external deps sheets. --- external_deps.csv | 4 +- external_deps.fods | 497 ++++++++++++++++++++++++++------------------- 2 files changed, 294 insertions(+), 207 deletions(-) diff --git a/external_deps.csv b/external_deps.csv index 3c68a06eb..e195f7101 100644 --- a/external_deps.csv +++ b/external_deps.csv @@ -35,13 +35,13 @@ ipaddress,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,n/a,1.0.23,1.0 cffi,1.14.5,1.14.0,1.15.1,1.15.1,1.15.1,1.15.1,1.14.0,1.15.1,n/a,1.15.1,1.14.0,1.15.1,1.15.1,1.15.1,1.15.1,n/a,1.14.0,1.14.5,1.15.1,1.15.1,1.15.1,1.15.1,1.15.1,1.14.0,1.15.1 asn1crypto,n/a,1.2.0,n/a,n/a,n/a,n/a,1.2.0,n/a,n/a,n/a,1.2.0,n/a,n/a,n/a,n/a,n/a,1.2.0,n/a,n/a,n/a,n/a,n/a,n/a,1.2.0,n/a enum34,1.1.10,1.1.6,1.1.10,1.1.10,1.1.10,1.1.10,1.1.6,1.1.10,n/a,1.1.10,1.1.6,1.1.10,1.1.10,1.1.10,1.1.10,,,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.6,1.1.10 -idna,n/a,"2,6",n/a,n/a,n/a,n/a,"2,6",n/a,n/a,n/a,"2,6",n/a,n/a,n/a,n/a,n/a,"2,6",n/a,n/a,n/a,n/a,n/a,n/a,"2,6",n/a +idna,n/a,2.6,n/a,n/a,n/a,n/a,2.6,n/a,n/a,n/a,2.6,n/a,n/a,n/a,n/a,n/a,2.6,n/a,n/a,n/a,n/a,n/a,n/a,2.6,n/a pyOpenSSL,19.1.0,19.1.0,19.1.0,21.0.0,21.0.0,21.0.0,19.1.0,21.0.0,0.13.1⁷,21.0.0,19.1.0,21.0.0,21.0.0,21.0.0,21.0.0,0.13.1⁷,0.13.1⁷,0.13.1⁷,19.1.0,21.0.0,21.0.0,21.0.0,21.0.0,19.1.0,21.0.0 scandir,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0 psutil,n/a,5.6.5,6.0.0,5.9.6,6.0.0,5.9.6,n/a,5.9.2,n/a,6.0.0,5.6.5,5.9.6,6.0.0,5.9.6,5.9.6,n/a,n/a,n/a,6.0.0,5.9.6,6.0.0,6.0.0,5.9.6,n/a,6.0.0 subprocess32,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4 bcrypt,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,n/a,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7 -pywin32,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,227,228 +pywin32,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,227,228 ,,,,,,,,,,,,,,,,,,,,,,,,, Abbreviations:,n/a: not applicable,,,,,,,,,,Notes:,"0. Dependencies above are listed as per the current build process, not necessarily for the latest released versions of python-package.",,,,,,,,,,,,, ,p/o: provided with OS,,,,,,,,,,,"1. Tier 1 platforms, fully supported and tested",,,,,,,,,,,,, diff --git a/external_deps.fods b/external_deps.fods index e0b577a3d..a83054cd7 100644 --- a/external_deps.fods +++ b/external_deps.fods @@ -1,20 +1,20 @@ - LibreOffice/24.2.5.2$Linux_X86_64 LibreOffice_project/bffef4ea93e59bebbeaf7f431bb02b1a39ee8a59166PT10H10M16Spython-package - external dependencies and associated vulnerabilities2024-08-16T13:03:52.122804347 + LibreOffice/24.2.5.2$Linux_X86_64 LibreOffice_project/bffef4ea93e59bebbeaf7f431bb02b1a39ee8a59172PT10H25M55Spython-package - external dependencies and associated vulnerabilities2024-08-20T11:02:45.442494389 0 0 41189 - 23386 + 23574 view1 - 0 - 1 + 18 + 20 2 2 1 @@ -103,7 +103,7 @@ false Generic Printer false - wAH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMArAAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luYWRqdXN0bWVudD0wLDAsJzAsMApjb2xvcmRlcHRoPTI0CmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4dERhdGEKRHVwbGV4Ok5vbmUAUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmYMAFBSSU5URVJfTkFNRQ8AR2VuZXJpYyBQcmludGVyCwBEUklWRVJfTkFNRQcAU0dFTlBSVA== + wAH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMArAAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luYWRqdXN0bWVudD0wLDAsJzAsMApjb2xvcmRlcHRoPTI0CmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4dERhdGEKUGFnZVNpemU6QTQARHVwbGV4Ok5vbmUAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmYMAFBSSU5URVJfTkFNRQ8AR2VuZXJpYyBQcmludGVyCwBEUklWRVJfTkFNRQcAU0dFTlBSVA== false 1000 1000 @@ -138,6 +138,7 @@ + @@ -155,7 +156,7 @@ - + @@ -552,18 +553,21 @@ - + - + - + + + + @@ -658,8 +662,8 @@ - - + + @@ -678,15 +682,15 @@ - + - + - + - + @@ -737,10 +741,10 @@ - + - + @@ -751,7 +755,7 @@ - + @@ -791,6 +795,11 @@ + + + + + @@ -806,10 +815,10 @@ - + - + @@ -821,10 +830,10 @@ - + - + @@ -846,10 +855,25 @@ - + + + + + + + + + + + + + + + + - + @@ -861,6 +885,11 @@ + + + + + @@ -881,6 +910,11 @@ + + + + + @@ -940,10 +974,10 @@ - + - + @@ -955,16 +989,36 @@ - + - + + + + + + + + + + + + + + + + + + + + + @@ -985,11 +1039,6 @@ - - - - - @@ -1013,10 +1062,15 @@ - + - + + + + + + @@ -1033,6 +1087,11 @@ + + + + + @@ -1048,10 +1107,15 @@ - + + + + + + - + @@ -1063,6 +1127,11 @@ + + + + + @@ -1073,6 +1142,21 @@ + + + + + + + + + + + + + + + @@ -1083,20 +1167,15 @@ - - - - - - - + + - + @@ -1207,10 +1286,10 @@ - + - + @@ -1219,105 +1298,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - + - + - + - + @@ -1340,7 +1413,7 @@ ???(???) - 00.00.0000, 00:00:00 + 00.00.0000, 00:00:00 @@ -1464,7 +1537,7 @@ 3.12+¹ - 6.0+² + 6.0+² 11.4³ @@ -1486,9 +1559,9 @@ 9.x+¹ - 11SP4+² + 11SP4+² - 10u8+³ + 10u8+³ 11.0/11.1³ @@ -1496,7 +1569,7 @@ 11.4³ - 16.04² + 16.04² 18.04¹ @@ -1522,7 +1595,7 @@ 1.0.2k (from AIX Web Download Pack Programs) - 1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”)1.0.2v-chevah5¹⁵ (statically linked with cryptography) + 1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”)1.0.2v-chevah5¹⁵ (statically linked with cryptography) 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) @@ -1541,11 +1614,11 @@ 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1g (statically built for stdlib “ssl”)1.1.1g (bundled with upstream cryptography 2.9.1) + 1.1.1g (statically built for stdlib “ssl”)1.1.1g (bundled with upstream cryptography 2.9.1) 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) - 1.1.1cFIPS /1.1.1k FIPS + 1.1.1cFIPS /1.1.1k FIPS 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) @@ -1569,7 +1642,7 @@ 1.1.1f - 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) + 1.1.1w-chevah2 (statically linked with stdlib “ssl”)1.1.1w-chevah2 (statically linked with cryptography) 1.0.2t (bundled with upstream Python 2.7.18)1.1.1g (bundled with upstream cryptography 2.9.1) @@ -1614,7 +1687,7 @@ 2.7.18+patches - 2.7.8 + 2.7.8 2.7.18¹¹ @@ -1635,7 +1708,7 @@ 2.7.18¹¹ - 2.7.18¹³ + 2.7.18¹³ @@ -1658,7 +1731,10 @@ 3.30.1 - + + 3.46.0 + + 3.46.0 @@ -1685,13 +1761,13 @@ 3.46.0 - 3.30.1 (we overwrite version from upstream Python at build time) + 3.30.1 (we overwrite version from upstream Python at build time) - 3.46.0 (we overwrite version from upstream Python at build time) + 3.46.0 (we overwrite version from upstream Python at build time) - + Expat @@ -1703,7 +1779,7 @@ 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) 2.2.8 (bundled with Python) @@ -1747,7 +1823,7 @@ - + zlib @@ -1775,13 +1851,13 @@ 1.2.12 - + 1.3.1 p/o - + 1.3.1 @@ -1799,7 +1875,7 @@ p/o - + 1.3.1 @@ -1808,9 +1884,9 @@ 1.3.1 - 1.2.11 (bundled with Python) + 1.2.11 (bundled with Python) - 1.2.11 (bundled with Python) + 1.2.11 (bundled with Python) @@ -1883,7 +1959,7 @@ 1.0.6 (bundled with Python) - 1.0.6 (bundled with Python) + 1.0.6 (bundled with Python) @@ -1978,7 +2054,7 @@ n/a - + n/a @@ -1993,22 +2069,25 @@ 20170329-3.1 - + + n/a + + n/a 20170329-3.1 - + n/a 20170329-3.1 - + n/a - + n/a @@ -2026,13 +2105,13 @@ 20170329-3.1 - + n/a - + n/a - + n/a @@ -2098,12 +2177,15 @@ 2.8.3 - + + n/a, upstream sqlite3 is used + + n/a, upstream sqlite3 is used - + pip @@ -2128,7 +2210,7 @@ 20.3.4chevah1 - 20.3.4¹⁴ + 20.3.4¹⁴ 20.3.4chevah1 @@ -2172,13 +2254,13 @@ - + setuptools - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ @@ -2188,41 +2270,41 @@ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ 44.1.1¹⁷ - 41.6.0¹⁷ + 41.6.0¹⁷ - 41.6.0¹⁷ + 41.6.0¹⁷ - 41.6.0¹⁷ + 41.6.0¹⁷ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ - 44.1.1¹⁷ + 44.1.1¹⁷ 44.1.1¹⁷ @@ -2238,7 +2320,7 @@ 2.21 - + 2.21 @@ -2262,7 +2344,7 @@ 2.21 - + 2.21 @@ -2277,7 +2359,7 @@ 2.21 - + 2.20 @@ -2376,12 +2458,15 @@ n/a - + 3.3.2+patches¹⁶ - 2.9.2¹² (wheel includes OpenSSL) + 2.9.2¹² (wheel includes OpenSSL) - + + 3.3.2+patches¹⁶ + + 3.3.2+patches¹⁶ @@ -2392,10 +2477,13 @@ 3.2.1¹² - + 3.3.2+patches¹⁶ - 2.9.2¹² (wheel includes OpenSSL) + + 3.3.2+patches¹⁶ + + 2.9.2¹² (wheel includes OpenSSL) 3.3.2+patches¹⁶ @@ -2490,7 +2578,7 @@ 1.0.23 - + 1.0.23 @@ -2562,7 +2650,7 @@ 1.15.1 - + 1.15.1 @@ -2655,7 +2743,7 @@ n/a - + n/a @@ -2667,7 +2755,7 @@ 1.2.0 - + n/a @@ -2676,7 +2764,7 @@ n/a - + n/a @@ -2718,7 +2806,7 @@ 1.1.10 - + n/a @@ -2771,14 +2859,14 @@ n/a - - 2,6 + + 2.6 n/a - - 2,6 + + 2.6 n/a @@ -2786,13 +2874,13 @@ n/a - - 2,6 + + 2.6 n/a - + n/a @@ -2801,10 +2889,10 @@ n/a - - 2,6 + + 2.6 - + n/a @@ -2813,21 +2901,21 @@ n/a - + n/a n/a - - 2,6 + + 2.6 n/a - + pyOpenSSL @@ -2855,7 +2943,7 @@ 21.0.0 - 0.13.1 + 0.13.1 21.0.0 @@ -2875,11 +2963,11 @@ 21.0.0 - 0.13.1 + 0.13.1 - 0.13.1 + 0.13.1 - 0.13.1 + 0.13.1 19.1.0 @@ -2974,7 +3062,7 @@ psutil - + n/a @@ -2983,7 +3071,7 @@ 6.0.0 - + 5.9.6 @@ -2992,13 +3080,13 @@ 5.9.6 - + n/a 5.9.2 - + n/a @@ -3019,10 +3107,10 @@ 5.9.6 - + n/a - + n/a @@ -3058,7 +3146,7 @@ 3.5.4 - + 3.5.4 @@ -3136,7 +3224,7 @@ 3.1.7 - + n/a @@ -3184,62 +3272,61 @@ pywin32 - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - - + n/a @@ -3289,7 +3376,7 @@ - + Colour codes: @@ -3305,7 +3392,7 @@ - + LIGHT GREY: Tier 3 platforms and their problematic dependencies @@ -3319,7 +3406,7 @@ - + GREEN: no known vulnerabilities for Tier 1 platforms @@ -3333,7 +3420,7 @@ - + BLUE: possible vulnerabilities found upstream, but no released version has them yet @@ -3347,7 +3434,7 @@ - + ORANGE: minor vulnerabilities found @@ -3361,7 +3448,7 @@ - + RED: major vulnerabilities found @@ -3375,7 +3462,7 @@ - + MAGENTA: vulnerability status could not be established @@ -3401,7 +3488,7 @@ - + 10. https://www.openssl.org/news/openssl-1.1.1-notes.html @@ -3409,7 +3496,7 @@ - + 11. https://github.com/ActiveState/cpython/tags @@ -3432,7 +3519,7 @@ - 13. On Windows, the upstream Python 2.7.18 packages are not patched for CVE-2020-10735, CVE-2021-3177, CVE-2022-48560, CVE-2022-48566, CVE-2023-40217, CVE-2024-0397. + 13. On Windows, the upstream Python 2.7.18 packages are not patched for CVE-2020-10735, CVE-2021-3177, CVE-2022-48560, CVE-2022-48566, CVE-2023-40217, CVE-2024-0397. @@ -3486,13 +3573,13 @@ - + - + - + From 59929ef91ab4031ae2acb10d6acb37ab12652c96 Mon Sep 17 00:00:00 2001 From: dumol Date: Tue, 20 Aug 2024 08:16:58 +0000 Subject: [PATCH 39/42] More changes after own review. --- chevah_build | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chevah_build b/chevah_build index 7cf2f6325..89f8508d2 100755 --- a/chevah_build +++ b/chevah_build @@ -44,7 +44,7 @@ PIP_VERSION="20.3.4chevah1" # * not at all relevant, e.g. those for cryptography's bundled openssl, # * not actually relevant for these old versions, e.g. 65647 for cryptography, # * patched by us, e.g. 40291 for pip, 53048/62556 for cryptography, -# * not patched: 52495/72236 for setuptools. +# * not patched: 52495/72236 for setuptools, 59473 for cryptography. # pip <21.1, click <8, dparse <0.5.2, wheel <0.38, safety <2.2, pywin32 <301. SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 54687" # setuptools <65.5.1, requests <2.31.0, certifi <2023.07.22. @@ -63,7 +63,7 @@ SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53048 -i 59473 -i 62556 -i 65647" # More at https://github.com/pypa/setuptools/pull/1955. SETUPTOOLS_VERSION="44.1.1" # Version 3.2.1 (with patches) from python-modules/ is used with OpenSSL 1.0.2. -# Our patched versions fix CVE-2023-23931 and CVE-2023-49083. +# Our patched versions are not affected by CVE-2023-23931 and CVE-2023-49083. CRYPTOGRAPHY_VERSION="3.3.2chevah2" # bcrypt 3.2.0 requires at least Python 3.6. BCRYPT_VERSION="3.1.7" @@ -803,7 +803,7 @@ command_compat() { execute pushd build echo '##### Running chevah.compat tests... #####' execute rm -rf compat - execute git clone https://github.com/chevah/compat.git -b py2-support + execute git clone https://github.com/chevah/compat.git --depth 1 -b py2-support execute pushd compat # Copy over current brink stuff, as some changes might require it. execute cp ../../brink.{conf,sh} ./ From 24221b40da870b7cc3d0186dd720004fea9e7da0 Mon Sep 17 00:00:00 2001 From: dumol Date: Mon, 9 Sep 2024 13:50:41 +0000 Subject: [PATCH 40/42] Fix CVE-2024-7592 for Python. --- src/python/CVE-2024-7592.diff | 107 ++++++++++++++++++++++++++++++++++ src/python/README | 2 +- 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 src/python/CVE-2024-7592.diff diff --git a/src/python/CVE-2024-7592.diff b/src/python/CVE-2024-7592.diff new file mode 100644 index 000000000..245d12acb --- /dev/null +++ b/src/python/CVE-2024-7592.diff @@ -0,0 +1,107 @@ +diff --git a/src/python/Python-2.7.18/Lib/Cookie.py b/src/python/Python-2.7.18/Lib/Cookie.py +index 10823637..a6ba4a92 100644 +--- a/src/python/Python-2.7.18/Lib/Cookie.py ++++ b/src/python/Python-2.7.18/Lib/Cookie.py +@@ -323,9 +323,13 @@ def _quote(str, LegalChars=_LegalChars, + return '"' + _nulljoin( map(_Translator.get, str, str) ) + '"' + # end _quote + ++_unquote_sub = re.compile(r'\\(?:([0-3][0-7][0-7])|(.))').sub + +-_OctalPatt = re.compile(r"\\[0-3][0-7][0-7]") +-_QuotePatt = re.compile(r"[\\].") ++def _unquote_replace(m): ++ if m.group(1): ++ return chr(int(m.group(1), 8)) ++ else: ++ return m.group(2) + + def _unquote(str): + # If there aren't any doublequotes, +@@ -345,28 +349,7 @@ def _unquote(str): + # \012 --> \n + # \" --> " + # +- i = 0 +- n = len(str) +- res = [] +- while 0 <= i < n: +- Omatch = _OctalPatt.search(str, i) +- Qmatch = _QuotePatt.search(str, i) +- if not Omatch and not Qmatch: # Neither matched +- res.append(str[i:]) +- break +- # else: +- j = k = -1 +- if Omatch: j = Omatch.start(0) +- if Qmatch: k = Qmatch.start(0) +- if Qmatch and ( not Omatch or k < j ): # QuotePatt matched +- res.append(str[i:k]) +- res.append(str[k+1]) +- i = k+2 +- else: # OctalPatt matched +- res.append(str[i:j]) +- res.append( chr( int(str[j+1:j+4], 8) ) ) +- i = j+4 +- return _nulljoin(res) ++ return _unquote_sub(_unquote_replace, str) + # end _unquote + + # The _getdate() routine is used to set the expiration time in +diff --git a/src/python/Python-2.7.18/Lib/test/test_cookie.py b/src/python/Python-2.7.18/Lib/test/test_cookie.py +index 40419012..efd2ed3c 100644 +--- a/src/python/Python-2.7.18/Lib/test/test_cookie.py ++++ b/src/python/Python-2.7.18/Lib/test/test_cookie.py +@@ -1,6 +1,7 @@ + # Simple test suite for Cookie.py + + from test.test_support import run_unittest, run_doctest, check_warnings ++from test import support + import unittest + import Cookie + import pickle +@@ -156,6 +157,44 @@ class CookieTests(unittest.TestCase): + self.assertEqual(dict(C), {}) + self.assertEqual(C.output(), '') + ++ def test_unquote(self): ++ cases = [ ++ (r'a="b=\""', 'b="'), ++ (r'a="b=\\"', 'b=\\'), ++ (r'a="b=\="', 'b=='), ++ (r'a="b=\n"', 'b=n'), ++ (r'a="b=\042"', 'b="'), ++ (r'a="b=\134"', 'b=\\'), ++ (r'a="b=\377"', 'b=\xff'), ++ (r'a="b=\400"', 'b=400'), ++ (r'a="b=\42"', 'b=42'), ++ (r'a="b=\\042"', 'b=\\042'), ++ (r'a="b=\\134"', 'b=\\134'), ++ (r'a="b=\\\""', 'b=\\"'), ++ (r'a="b=\\\042"', 'b=\\"'), ++ (r'a="b=\134\""', 'b=\\"'), ++ (r'a="b=\134\042"', 'b=\\"'), ++ ] ++ for encoded, decoded in cases: ++ # with self.subTest(encoded): ++ C = Cookie.SimpleCookie() ++ C.load(encoded) ++ self.assertEqual(C['a'].value, decoded) ++ ++ @support.requires_resource('cpu') ++ def test_unquote_large(self): ++ n = 10**6 ++ for encoded in r'\\', r'\134': ++ # with self.subTest(encoded): ++ data = 'a="b=' + encoded*n + ';"' ++ C = Cookie.SimpleCookie() ++ C.load(data) ++ value = C['a'].value ++ self.assertEqual(value[:3], 'b=\\') ++ self.assertEqual(value[-2:], '\\;') ++ self.assertEqual(len(value), n + 3) ++ ++ + def test_pickle(self): + rawdata = 'Customer="WILE_E_COYOTE"; Path=/acme; Version=1' + expected_output = 'Set-Cookie: %s' % rawdata diff --git a/src/python/README b/src/python/README index 8f46bd496..0cfb8e210 100644 --- a/src/python/README +++ b/src/python/README @@ -15,7 +15,7 @@ to apply to our Python sources tree, then issue something like: patch -p1 < ~/Downloads/CVE-2020-10735.diff Python sources are currently patched from upstream Active State branch up to and -including fixes from Aug 13, 2024 for ActiveState Python version 2.7.18.10. +including fixes from Aug 22, 2024 for ActiveState Python version 2.7.18.10. Patches that can be applied on Windows as hot fixes (see below for more details) are saved as diff files in the current directory. They are also applied on From 7832120300ff884552a61e77262ea7951319502b Mon Sep 17 00:00:00 2001 From: dumol Date: Mon, 9 Sep 2024 14:15:55 +0000 Subject: [PATCH 41/42] Fix CVE-2024-7592 for Python, take two. --- src/python/CVE-2024-7592.diff | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/python/CVE-2024-7592.diff b/src/python/CVE-2024-7592.diff index 245d12acb..07e64bea9 100644 --- a/src/python/CVE-2024-7592.diff +++ b/src/python/CVE-2024-7592.diff @@ -1,7 +1,7 @@ -diff --git a/src/python/Python-2.7.18/Lib/Cookie.py b/src/python/Python-2.7.18/Lib/Cookie.py +diff --git a/Lib/Cookie.py b/Lib/Cookie.py index 10823637..a6ba4a92 100644 ---- a/src/python/Python-2.7.18/Lib/Cookie.py -+++ b/src/python/Python-2.7.18/Lib/Cookie.py +--- a/Lib/Cookie.py ++++ b/Lib/Cookie.py @@ -323,9 +323,13 @@ def _quote(str, LegalChars=_LegalChars, return '"' + _nulljoin( map(_Translator.get, str, str) ) + '"' # end _quote @@ -48,10 +48,10 @@ index 10823637..a6ba4a92 100644 # end _unquote # The _getdate() routine is used to set the expiration time in -diff --git a/src/python/Python-2.7.18/Lib/test/test_cookie.py b/src/python/Python-2.7.18/Lib/test/test_cookie.py +diff --git a/Lib/test/test_cookie.py b/Lib/test/test_cookie.py index 40419012..efd2ed3c 100644 ---- a/src/python/Python-2.7.18/Lib/test/test_cookie.py -+++ b/src/python/Python-2.7.18/Lib/test/test_cookie.py +--- a/Lib/test/test_cookie.py ++++ b/Lib/test/test_cookie.py @@ -1,6 +1,7 @@ # Simple test suite for Cookie.py From 6962bb973213bec485bfe0144eeab1d3cd37e1c2 Mon Sep 17 00:00:00 2001 From: dumol Date: Mon, 25 Nov 2024 11:54:05 +0000 Subject: [PATCH 42/42] Actually remove compat tests GitHub workflows. --- .github/workflows/bare.yaml | 16 ---------------- .github/workflows/docker.yaml | 7 ------- 2 files changed, 23 deletions(-) diff --git a/.github/workflows/bare.yaml b/.github/workflows/bare.yaml index 93a5d00bf..14ad5458b 100644 --- a/.github/workflows/bare.yaml +++ b/.github/workflows/bare.yaml @@ -66,11 +66,6 @@ jobs: cd $CHEVAH_REPO ./chevah_build test - - name: Compat tests - run: | - cd $CHEVAH_REPO - true ./chevah_build compat - # Upload using a (per-OS selected) sftp command, then show final links. - name: Upload testing package run: | @@ -138,11 +133,6 @@ jobs: cd $CHEVAH_REPO ./chevah_build test - - name: Compat tests - run: | - cd $CHEVAH_REPO - true ./chevah_build compat - - name: Upload testing package run: | mkdir -pv ~/.ssh/ @@ -206,12 +196,6 @@ jobs: cd $CHEVAH_REPO ./chevah_build test - - name: Compat tests - shell: bash - run: | - cd $CHEVAH_REPO - true ./chevah_build compat - # To use an RSA key with SFTPPlus, install upstream OpenSSH package, # which is more finicky in regards to file permissions. # Beware the commands in this step run under PowerShell. diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index cf7658199..32dff4d1e 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -96,13 +96,6 @@ jobs: cd /home/chevah/$CHEVAH_REPO ./chevah_build test - # Compat tests must run as regular user with sudo rights. - - name: Compat tests - run: | - chown -R chevah /home/chevah/$CHEVAH_REPO - cd /home/chevah/$CHEVAH_REPO - true su chevah -c "./chevah_build compat" - # Using `~/` is problematic under Docker, use `/root/`. - name: Upload testing package run: |

      u(+ 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.Lg*4}J@lV;C`YM^^Z8TplETp0Ua7$$mi{Fr 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 t&u@CZMXJ_|)mvzTw{!ow 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%0A>R{fjPiozyjb1U=eUE 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

      >ZePbSyqWWR(1f9X20 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%0AuP7 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≷({(y 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 z z-UG)}a1HvHkwY<=vJd`D9U67in0G1rA3;GeqSkq}P3}w3&S-1?$el=QP`3lXqey%) z!&N-JD|lGDaC(=%+9*nLAz>!hDt`@b+YI~h3CfikjJ`V66p(%~12Chh9-;L(2*L+$AuC$v&xYwJWp3HrU z7VIISouO^I{Swd)YSr_-=1xzzF=pM}De~Y$3S0k5%9wko)vA3MzEGww$SN>VOKZ$$ zeBsI1{fK&!5Px%B-qaVYZLj^Ab(t%3Qy#cyJaE%LJcr2P=@!<1zrS09I)0RjEbbG zYP*1!Hr^{@V}5lRE2x0x)Fk1K)kaY({X&sQ5~sm*JjWG^AwyZ}ZQ@2-SK(^aCq;hA zHH^eC8U7EsRs%f{`IdU@N|VQH?dx>8ZswX%%R&iel69FklMdgcK3(ez&k*fx3H^K6 z4A#*vBm7mv?p~3aBQ`h%3ZaSi(5-XwW&NFM9T~J!^RXIUjpUUy1!8{(EVrfdoeXX6 zHtNE`u<~90)C{%K{~~!JXUj=IYd(B|Y?|SARn}#vycUb>;*nv>k!UvPGKLvIXzn7_ zofoapmpI&o?l=(nk^P<3QwCy^2M?a$tJ(HfZILC;R~`0OZISELS59B%sJFYU0*Xfr zr#>4^`^)8cnn%1in}#;hyer(>0yoZx~4U_=M0 zECJ_?c`a7lZN3nlZqz6FZnPHpQs0QuO(#ahFLeSs*qslZKuk3wDYh{L@NWCCp*`2}ykR4#KE z6p)N;IInMoYkg)=HWGCzxV7taV7FhLsw%1TVY|+|rA~Gz^%hA5Of?S0waX%NX@Egl zUmNpbEHYiSCVZ%xS*8@_e+h@lBv}@jT>(g$UVCmYR6VU|i;S>8RD12Fww_odi3f~c zkOR#=Y+e7P9QZ39j=WBcb$Nn0A)vJ{z(ISjw7>3m!YJ&C>PCHv2$wviM5Y`iewiQjmt5c_Vc$hc^g682^}Ho?)sM{sUJ}P8 zDi3nYLaw#Q%-n5>R3+2CjO`t(>IYT_-=XR^b{GOBqhHCZ>ezeGtmLMfKllbz(*?q{ zA(iW9bMKp?5@VVpQ#2bLYZCQb7TGfBThX!Loj5v{MV1i_bT}@IqoXTtheyY<$O07^ zGqhd|i`Pp57So10T1@}N%&ac7JV6pn*()CvT@XL+^2qBo4YSk;RNU*`NWK-3S=w9? zW7tWcsJBq81Zd-QsZ&?I@LU&WPSxw#W4@+)cjkP~SNQ=eUaceyE?4tqetoH|Zet`a z1Edh<(Pam0S;#*^^230ouShn%MfBLb_Dk3%bAe@%r%#d^Twv*vB`YXuWs}8!@j}SwKOow;ZFhhFt#C5bbj6bSYSb`! z!Z!c6qvz3X3Ox_=(}td3^JV^xNvEKPHS;mc1jet&3wm0i1Qg%jI@Y8JJ2T6wZ5Y_Gv!Vd@q zN2&LDgA0}xBcY-((yGi8h3}+V?SzSYYm#5n1H&EuZpGckHAmJ;Tsw@XdP9%Oux2Cu zfmb>c<%MeW_@P88ka>eI30w-*4YNiEyoJpv=L9Dewnk4#ER7r|`A`z=pjEA;Lj;Cn-TaL7 z400FDsGW1PRO2N1B90v+e|+=myB$qo|$@uOTT98EO=yC&W}GQSlnefFB$Rz z*YxDeOM{Y;FE5&4KOBFX4%O(**42NHb}QBAwO?*OnU-6c(4I9E~P z3Z#`UBNMW25P6t95ah{#AemyAe;L;ylR24!s*LuD$5@G*A{CthxSzDNg)35eNVbct zpr**FRuJ>-IAf}?f|e;rHG)Ab=x}kKl|9x4JvouRRKcn(Nd?f8?HpCICPL%M=32>+ z(Ma~Hl}ylUW3#xrH74`B#|Z%hycuVdF3&tk1u_1sAZtnnS_lrCX(}unxt=hHS5cBTAb5v}l9izp=x-}&;&sXHCM#0DgqL34< zm2M6~&1YqzvQ!x%Nt>VV5MoB#(%;SxUO;wIOsY-!kyMpWdMsyH+V~bE;Y{f8Ve}sDH%e& z#-lPFWD3qf|I*D%c8W4VtDWkQ=v&OqeHqQWua-}<|8Ip)NvHIU9~x$kfG+kVF@)_k zwh)zUX>ja$GlOF%*NmNl>Hbc9vb1}{HDmMm+QL_kH+TX%S}X*y*bhGEkY4EmDrtPw zu5U_lTGlRzL8)Oe*xq8sR(;8LOv2F$Y%xDOau*;7kYOJtevRVy4slcw?fg=m2UWka zN_m76C#-ryDTtcJT*RUFwKOx^YB}OJ)RL@54PCFQ=srp7<)(gmX;7zr`s5mYiXO}t z6wjs}v$MRx>8=_*j|H-v_%!@<3KYQz5V6SJVio{)`)cNOs@BvL0T-JBdm6vzSc}cG z+SpSyg*mnzgui~sf^b9v!l8Q)3nS1m>RM0&A+JElr21~Mw~FJVT9pM+RI~_TbVSUS zK5d8@AjKL=q!3217wo9U_kbV|2=bH$Js`+4xyCa^8s0;Jrz1qr;5T!{slAEVC_dSL9E4$Jb6e z%r(>A6jc~wH_N{gXmPPxF=a6)G4GUq&`Ccbs5_q&!b>U(2KcYnR=Sf$@2$#m*W@`; zeA7IYi;k0F)Dig)$z!c{H<$)39|=%*ho=BNJ;(sa-DRrC0#FC{wFy=_e(W zk*@q?JyvIqI}y(I4xW;&u^>a?_(76MNm83Lw|&EU4Fj00wkS?sbp@P!naW2E&Fxe> zkqd<}Lp(u(t*WGmYcMn4kL(tK%TtFAl^iu4r&p}Wx~AK{M$-Z_OeKt709q|DU~f|ZvL5YYZQ=L zKzF90pjGpeNYhbq>ChU9&AY7Z!jV@9p{y`vEu}0aXynMI5B6joVS>MM71 z>*#FMPZ*}Z)dz+8Ejdqca3F6q)X^-n3#0*5)d&HxbGwiaog35Xun# zs6GbrQCV=aR(%XFao(*3()n7KIwU%weR0dAxUXJ~1H-44;rp5GGJKN{mElHS+A{nz zU+YqbqA`zMRn&dZAYjxh2{tg~w`F4%4UvnNQm#JTxO;rp#??e3bh|FgCB zJUaW=*i=aMPA-+UW**iPpxQ6F_Xb`S@K1UwE8d(0!w^$9M*2~|%7SP7nKe+*cD=r? zMTx8_M@81Fm|LxOhHA`LMIC8JAZm~}k4wK-3^CoTT-SjR_q^7b;72{H2(c-01F2-X z=!(o}m)_km{j-vuH503R2#BtcZx$()s3KWeG?||h`7+t=;-By$ZAup(m_`?WR|2eg zuD?_`gCOXgzkG=jF$^nqru;#0#?b8S!kcJ?mA!$vtXzR<^@`VeOC}BGT40a7$Ojwr zbz{EEUtx36b6%BA<8njLm}Qj(&-%tokxG6QZiGCKts$kDclX>S>`a6k(Mt&|H=tOQ z8X{|`n=r)hV*I2_Mvk+gr#$~AH;0|-*H-C=@Wp~QB$zC3^#8H1gyBb=R(M2KHtnUGK7xBRv z1sT*?t1cx^K5}Gj`{SU0i;;n00eHgrVe(E{f-KC}?%E-}J~YdJ=BQ@n5DJM}je#fiaT~qu?q~bz>H-W@YloF^8Wh>Y}p*1DebN zQr9`|WYSR1G}O7bx9rcV5 z!h{BT)NVY@zm-4=B$tejEiL2-CtqLBVlT63#(KqG)6Lc0cg3Qzq9ho9nhzptRnx$T zny|CpJyEQIS!JUIvKF5cZzONJmqjI7&%S zyTm4+{FfA|G(}D$tWz8IkuV`Yi@U4!#hl2)qy!4Bs*ab)A9(RX5hE24r-q zd~fqeJI_ceVHVQBCB^kIzZSI~dLN6X8BGrClnHvdAiJ$(^Dh`EMb>L7XBkOr9|BiI zF<(|{L0P)BSkNipy+y3qzteugS`}M-Y2C9i^!8KZRVTI!a#?3VRN<>FC1}Lc~Y|E z$^LUIpeeE|U1gv^S`${ex+2?@r;s4h(Cd6qf041FgV0N&S0Eeni_;Ip#E1z3QYsr* zm>yE=;D!=e;qL4rR0U!PLkAX}OMwx{QiF?iQ+OVD0+F)Ho@suOn0aZpms4n|@yl7# z7lc~f3L;rSUM6L`p1@%9Wc=#K$gOaWNDl8Zoa99M@&>Ymp2g_Is_-&Z#I|$AYy+%) zp4K6b5_eUMd7 zxMTHDH7A&nX0%$44>yg5+QYJ%P_37b&vNm}gY5aqG52MCLFcS=tf~Q&)erN~N*Z)y ztvfDUTFnlZ!#x&QD zX<96?a`030-keCL6^ziWPbHf0(Q>uwZ@o{Ae9=RtC%`>5vWpK9=VABH^;EMZ(XE@i zMuC)#5|Q~@nl+2sE`Bdse)DX7W>um+1Yb~!LQa8hAy)9iRX1ufS|bZI z3LZgLzZ+!yQrM47N#r#Vp+H${kx|%2w>6WMjN+-eQd{*ta?CL=zd~iC6hP@JqXiae z&|oVn$!;ldl^G{^4a$=Q?$<@#VhZOS8JBeDV6lvDnRCEmJ~jBtRB=-Y_Sojue|}8# z)~Hhk`Gcj#>*(b2JnKr5I6({@q7sKTnNK|i9|~TxG-5EJPpAd2K_yy&EF@~d=`@+B z?Y1TXplOjF(YI5)0*X1!xc4+i-R^O)B} z&oWk5nqVfMO5fQlK29jD=T%==k`Aikecd{a2jk37p0mdTnOQUuyw07J64}BF9GQ;Q zqRt^M4xLkL{%*Wtke0dvIYFf8aE+c6`5o`DBI$RLd#!h5H%Ejc?XW^U70SetjP@4w zZ*bwOo&x_*wCV<8&>rSB#(rg4zlv|r$|N?+Yy2cbbjF@Sf8L@69wQdmm*fe=x_GoQ zrRVI$(yTPg8|H6fVwUea2`LIL6UIPmi(ausR&sR1o5bOubp_@vr^`@-nv!D@(mk>I zlA?uqw>~MOG$+zgGjVt zgr!d4{E?L~?R8_1Mb5Jl-yn&9p%M!ZcK-HCIpTMGxRyyc`Wy(C+!D0Q9nTQqSFyjx zBGXhF%R2BJG4DGU4^e}vHM(UFz{^J9LwmR+2l%S_3-LU$eY8FMP{e0;iuSH}%K9vv z4?bwAH;-(=Gn&f$&bUJ?Z6rfa@*ToC$$l^#snvY+BjVH(r+vb6-^FuYXx%%uqrm;sIOy@3W>);rG%d?9_QmBlL8qZ z)T*^C?ZeoWO%P*=3>rk{TvL~MY@w_kDSKbh7FYEpt!Lf1Q8dY0mVvJ~c-^b!6A!8b zA5im4DQ1RjYYy9AZ}U}VoQTlscNQC;auHj7JtINP-ai(r_Y@2p;oryMaWb7`$z4%i zpMzhZRFZCd^&OJ8;v(s46^TyQU^c$Z{x2XbGhVmLnL{~fXfRfiv-6TuJ;6J&1mT7A zbgk;Lu7dh0(^tzmMIt5j7pYr_g~NzAqew5z@M-FNqB`q*q746+V80eUH(hLkUS_1~ z73e$MIc4mBQ}mz0dKvPPFuJ$8vH|8R%u%KG!!=GtsuY-p~CaISeM`XNuY3dRgtx}xH0d&`d?R5mE5_{pK z`O>W@=gzNbjP9%D(|o5&IH{~0`qI@33*)WDKr0vh#Nj)wZCL<);x`{FhH^$be!1B! z{Os?rR1}fxnd4xdDb`3!y}{d{&~)>XUkkrXEv~sCPsMqhIPicIlOhjDY!G3Qc2#;@ z|809qV~Ff|jTO)oxyA~x1znf<$XYanD2G5jBd5nLO`t^3(L~e(3tAjL?p{UGP!sud zb2P&T@fpa~JX48wM@m#>wmY{)O0(t-L2T25^Rkrs(NY%JQh4lZR#IgliJHL+&Cldp zl$2ZG-!QHgD43N|)K(m_*=7vfTVxINK*4$ByC59-oy^qZlKoRw9^r`5mdCPaDmjVf zPcdoL*VWEh^OQPKi>5{{BeJsm&WBH07Aixxi7+>rHU)Jo|6XJ^z9Ny?JCaXqF@{rX zm8}xY=t6Z71M*e!cuMmjD@jx28<}#GgveB^fdpZc$|`{|rd7I0o{Uh^TduOw(EgIf zQg*r`vfmbIZ8wq_3l2ely_Ug78L{P)WB-&Khrg0)O4`EiAZ*>397klKL=p>f65MFL z@0Rx&)_a#4gun}VSFNrlM(pTg0;Stz&=M(<&^VS$9+bvc1kw^Yo)Bq4wVtAl* zRfkaT8x|)zgoqZ%74Z(iZ$hHreL8No)~m9T9M-vWp0M&ChiHL`%b$fah_XKp!P*Bz z8X)9R6{4m~;m9xf=m<)*wGEU}0*dg168P&6hK07uP(@>JB3-Z))@u`f4YF8hf3ulTRIS*1Vaz_UO8~(>?1_a_^5`C}*D?#~CrP z#5&awzLFAOxzRHbUy}TC)nh!43+~hw$K~%Mhct?eQMAlbWL6COk~7>mXd$x)+)Qc5tOGm@7?}4OQBCVkIPv!KO+AH_CD(B?MKGrIa`v&%rhEmSw z@Yc2L{;4XJt+JlvuwK!?`9QMOv{da;4fQ;qtuh-~UYo{2>obFFd<~B7qAz}}nan+x zU3}@xb3+2ai8OobFv+Ma5=bBa7DN&xVgBcxUt8x&l#7}KiknC=f%yy zJ(rv92=IID0N}+*nXTik-+TG~`Os{~ulQcZdo6AY?j77N+&^(&4as)I`0YkMlGaIl z@e|nk;3u$T^LsY#R@}WfiT5$TpX20L(tabq1G62OILSleoWlFHxI1whaY-j+JI=zL zhZB5OooM|o<@bHuguHA=4eoy1Nj zVYcH^+!waX9G>kMhuee8D9U!+fcq(~4)+dj+z4nIH*jROV-)Tg+`8{@9}>0?SAI5a zjoXDw9+mAl9ybcN6xV9IC)~h+6Z{FzhVdJJU&{NX#nc109Cvp~wxbbOLOpK8#qlZi z6n8&Co9DxDB{CZKrs_Kdx(8wqrOh zp4WKZFU8HlRpIW({Smhfw+okkE;NEW6E_a`n+ecJJNG5;;zpE%JKVXrDY!3i2XUFu z@u|2exZ80Xa80=M^RpdUxFXzDxCe1k??!(AhKv91v%h;&?_+Rzwj0K;;KGf&e{!~C zKEHc$$&<1je)6BoZ(?))k1s!B;71Jnh=Ct5@FNC(#K4aj_z?p?V&F#%{D^@cG4LY> ze#F547Z~Vt9;tN_W`Lz{brNQ&u?Nkpsl9lB(=Ib^%F&ID=J2OPmE1!V#p-ZOgX2Dv z&F7zv#i9eWjIOI5L>W9YcvY9=dXGBjkn50I*@EMmsg13lDQit~NM_q1pn>l^F7pr^ zx1HC?H4Eyv)C*bh+E`iO@EwizJB{-l%vs0E(!wa64%bj~m z@_LqqhMnc>Rcw@C-dH?%E$b$xa{~(>#`cn$6F3;ncz0`b=DzKmr8_h5VM;LN^qGN; zuA1T@sWUyvJ4waLcbzF7PHkmL0l!_jkwts4q+sS?PQnZa$MrFPKI7xq%;2;mjFMq` z^15~7dV=_IQ?(b@O1rx8;&VESAl>Da17*wko<$bJ)P12dV+}Kd50 zGKx0~C#CjVyqba&4}Nl?fgbFW#OJTirKX!+ZVzDR20hF-_mkviVJ4knS0>)p*X~JF z#%)*TJjye3?8-=E7YNkt8oPlAROWcAGItM<%FO3!Rb~!vQWI52kF0ZUAi+WuWcem;NIH>4aC|SvfLNxnaq%%*bcb`(BdG zM8Y>=ky|hmh-K~&fBMr9J#Z!GKItJZ41k(p+1{W|d%)U8Jg3V?p4iEgZ7lOimE9$| zv!H1Acbw$BX_I^61#M7NsASIx6hp;2$hync*c{6|&xWJ04USm?$MiNhxNE|jJG&zs z{Ye(9$87D^XB8xueJ_KTzEWm*;H?`^OmTR9Tl zv)7U0HMVle5@$JoA|~?z;|r!tUEXx!h5b>na=ij+Yk9@(yk+(?)Nf z;WdsKm;pk|inh<~JJYlH14m0)=m7^CY&`3d#n;cKVA3)kz$jkJ_`&?AUHL_6!Bow` z$z64I88i3Q#bW-XwR+w9jL65o?OY`xkPNX8$&zNzz`Sm~_DHc&$9eL_#x~F5mg{{p zuJtVb{Hp6`lolHsxshkRCp0Fhq(`Inh-dMhaWk&>2UBuOdTb@16l1?|1UN%a|HXPB zZEaW05gXVtDyHf6&Zqbg`+qwEK9zR$}l?Ajc~A^oeOmRnB{umPmlct-$%}1&^07I&%b%{l=-nj-GonF^-u# zm+X@oImSIl@6l+VqXMJozjpXq{}jWyh1h`xSH1HUUKrUNLFdc7dG@Z&@f8Fba_XIr z^NGn80gv*w3R}0v;sH&?MNNJPmz;8&M>PA>0%=u*x`W5w!jDJWB@f4 z+qZk`)aPsvemH1sInBP;z`inon+?2jJ*zpWu{nmBN0k_8m@Th2$CijKliU4bQefoq zj2hU@y-rZQvlk!Iq~?JKB!zE+d61rKPI!dJ(Q9DR?Av+T1+Pr|#gi_Fx$W6zEJFMz znP;q3(Q`zO{(}mixQy_hP*lD1Wf;E*4(=hbB^%8ziR!M3`A3;UULiv+4hSHeGu||q zyPj6LV4%A$etNWSBzujt6I{I^Gb*^w$u>ZcDQOaMLXL)7CO(Iv*s!yqkg*c5?zF*WuB{Kh!*i z<~64x1euS$*c=NC{3HGjP_Y|~4&CNnvc>!-_Ap$TXFd-~xYzRus}dK0s-@pw3(iQ_ zgHt)6!kuNGm43k#&Pr$eD>Yh-1CRi-5Unut>*F=YZK*@Ukx#);XtZ3VIFBP_ovkI^ zWgzr-XE@JS$n6u$e6DLRhoKB)#h_{hDQFeTzV&1dXm1PpRr{c4mjk~_B?d`nlIakV zStg735{5M(lx#l9CDs&tn^mw6yH+bsEOP|KGF@^8V#$7YqQu&-+e-AEM9LByPIC z7Ws-(H+gUCqe4tMrADjqHrFS^4E#>>gjzYtzFsar!jLmT*a4=$k)uIZC%Sb{){Rdj z7dk(oZ&FS`swn10wKJI%5tplbszCvLT@c&Tx-tJ zhw?tOBtsusr>_><(6*v_0k1c64Dm=OPtsKM6YR(fXJmxlH;IwD?B4muN1rb zl!baCz=X4qsFX)nj@Pa%3#F`&W_gU#o_f*NIXygv$CX^C7d6h|rrNr^GS1HaaA=ru zr0#Gn82J)#C`gPtPgqrU5jvT|B<|3qNIki3aY1PIB)rtD%EM`FaRHdBS{N>{C}{*A~(FyR*r;Wpr5+Vc@#M&nYB!4%_GRp z##bLRv|4?1BZpnT24lNBBE*K!(tlKreDi3AI%9|bCxQJ*^R70hKc<>6ulgN7H<_fp zLa6yxg927+u};40)wl0dT4(4??FQ#bqu{N9h8QPHJ3~aEPydo1`IKKif6LE0=T$tD z6fo$zR*QsaW&(WzW#9Qiy%9U=?4IDf_qOJkf4*Lk*1!uwO||?aZ&+NY`o*+WR=@CM z`6qb?ui@gKK6+qHmY%#-d(or%rZ?1+dtLkFmKJUGWf|x6^cL04>CUm3$#vYeG>5*t zCNH`Zr5^*cP+_0IExC?`^46U`(UspWs*7ZG>T%y*1qMH!v+fARJiN~mMW4qr;uHh)iZ0z))%iFUtD<{cB+I<3ISt|Vgo-a)5%^|z3K zCI=gY(prw9_1=b;N%=5ihBCRjreh{lK@W_4m#A!~xo8<^HMWv=6CRP@kk+oEqVJc4 zW$tS_I=rtbrr4u}4tVU}hT8l#FmN>~ZQjdR*@vxWL96U2dkwR0YrIvR^2D1D*c_h zXv^I6ykN;nfre!|Vp=(;Pq_J=B;r~u^IY;YnnbfqkZd+^>mde9Ui4UIHz|;k+_B8P z?+Ff=9C5+0E2JlzPpy=!AIxn8Q`k@o!v3{!^4lr0V+gGw)sk9*2NdD6%rD`n>MNG{ zOW@jDoO?;qDs~t;W@;tW5^y9%rydY-hZK!4vZ*mgFgl&o(j&xzJ?MCHJu!qu4rbi$Hyz;lW44}#vdQ+mDZXAXB zdvQ_4-0PbC#{?E+rTF_A6LUhhHy^n6<3MYdn=%(4aJcVJlI>kEdS(v7;MbZ*{(@|S zOk1b9%o?~o@8*eC1v`R}_)5%0a@b1nr=RzrWk)W*yN4rs1T!T;Lf2Sk>jCf)SnJY@ zcFu`dBa137k%|4%A+NwMR9;p0bj<7NADGt~rll-AAZX)4nUn93+?<>5<}k)wTDJ|MMu8JF1c_)Rq#a@AcZb1unB2Zy-;PcK?C zkL^Xy(*;y8&?Tm3&h2xsKBJU$RmuA95E$se!zhJk$3@7N6 zJcxHjTf8}k!~-ECrHsK1!2g`oesCkCP_#k&CDd&F>362>=|fp@sZA;i_ClF~Dv1w2 z4Of;Hg>UMISBrRsoL8xw4u|A;p7A_Jb<6`2%6!_&V_=6o4%Z0e6>oBDRfzk%;SMf$*3FBT#AIe-CWQ0&HbgvyK{XRZ77#c2g7N3H0 zD;`Mxv4I!8m4T-267{@HJ*TVZ73z7Vdd^hOS?YPUdS0uZ*Q@7j^_-)gKJ~mwJ?E?E zE$VrzdM;AWO7*;5J*(974)v^2&n4>lQ}w({J(sHI-RgOddj3*9?^DlTtLKC2`5X0o zSUn$6&&SmB3H4m2o=>Xh)9U$0^<1u=E7bFO^<1f*tJJerJzrMOSJX4Co@>LQ_TZ=UJVu3z)HHoL*W z_A@?w3}&;p^0;Axe7Up>8fI#5Z5`0)&nXRrGsNGH=u)xmaI}TZ+RNKY(QFnR!EJFU z(GNR|vk5v**D@Xf2>>Ejj-i`)0?iz_{y~c;utE02dAI{?`v)^MUl)J~dj_oW_eK)U z5D08PSlmCfm&1DUn#kku;lRkEmUM153dsR+R9*5h8p@2Oy7yhBfe%}HG)M^^W6ezM z`Z{uNU-M+jXi~*l2w0=A;}h>j&wyCVI$2 z;_i_6TphjLSi7%j0D86ojU;P}4{u{gb+Kpc6-UvUGOf75Ba8jJxW>z~H>~-00XEP{ zV+^lwxaX#ME7q4KH`t%PSEU)EA9O_If8ne1ywEerGud7>ccb$ulPO|DsbPAJ-R5FO z{xahy?BzbI)RSx*j=r_pn5Y4Rp>H@g~(*&|9Q z{!DZ^?7--Q_Fs^(a%zNkpMeGm$#2p7va&`rL~ zPpNT3PU+xJBERLGn+wa5*N;xrHi(~mNpvo%5P&v%lAcz4idXYINTjKCC zx39#`D8%`D$ZJntd-_t@Q;4c$Q&Dd}vvC$W1*_2g`oM^_T!3JttR<~KTk`jx7(FsH zj@|Bm@dU@|#gfIdNoC2ed18&R`eGwl>{o7|Ocm6);0xe|Op82T^gP|HDe2jx-~Rl7h9t$X~2i^}gPIFEy0@rkBVm$aqWDZ;&&i;7jbo zRKNE8P+10oNEssM-LPx#?%h)z&4lprc_MeJS73A4Ud67=y-<` zr4q8}x8&6Uj*ssCepthYkAw8aVW5FE-LQ4)hCH{#HN0nrzdHm~wch_Z(!$YUmfPae zovaBXDbfQrZM9^f-nuNeHkg-7_UNfmjQpb$$~Nh>0|)f4`sl&WHzKNZiyp}mQR%AZ zWafv{hc=dKe`@5I*(FKnXg-uVcb$nkcTHQNf-wHP#=E7#i#ZbEnvBxm+^i`bc~X+> zcHhlnfjWStdL7y8q4T=UWR{udU<&Kpf!beAs!D6%r8GEZ74u;;^JfCL9EYG))kqSC zL3QWcuvE^ppjV>8oq+13p|UW?-_u=lx*l7v2h1e@XWZqA*+f}}`7qiz`~GMTLy0)_ZY?KT9yzsRBO2k#PTtffqQ_G}*qu(U*vuug2(jrU@ia~m_@8~elp zE%WD+;TAJZ{jU38>5(G;n-|iE3BBSppjCRsuIP@wU9V_L!^`>}a%j6rh03oMZCN|* zn)pFg-Oc{wX#QzYhd|m_rIFIwrBO0FI^LhuU}HiAeQ}}U_Y(s*GfBl7Am@}E=P!<8 zjyjKV$&)Wlc9zaUKO#skJ^4JA)=KltGW0^xoak|T9T`x&!P(dbJN4JgbQXgjcLw_V zPn5u|A3}7B@~np*`@mWQvFFVDtF|%P7)ROj=H6=FoMwzkfOJ!*>2faWS6S&&^W`J0 zk34hlLW?D|E2-_3ZmE|26aC%XiE^2XGNwkm>4p7#%p1;^LkIkyhenGw8D2Fs9NpWN z0dIOR?K*4#EWT3F1^sy7mK4XWeZ3Xur05mrbLK_r;^6DSZ8-z0Gp~Dlk9avB+hP;x(qTmeO8PFi3#r@IKwR zm_upQ$J9LY>s!C0<~Fa%ha*z9X`(Bp+BwwK2QZ^mOXo|2g5=ROD6!nF(Hv20$xi&V zU+-lZ#X7)o5~o%iL;7H{%$8ou{|-wNMT56WS%ENlB`8|?UupRxYjpJYTK=*$A6LSt z_{UiFv)T@86kyk?Lc(Q?Bh>q1-WLy71buVh76^K-F*-p#oT5NAy~g|U9bv38o zb<)&GUd{_852e(tQrXn`@)FsoG+twLhPTK~Mm$|Nb-`3mE`{Q^GjtvMkTbSRa^3-P z4zhF3C+87r4GPB3&=<@6ia4qiy=a^Qb(~#7kt*Rk)L{vvCU^x3)nJbxN9NFHjwg3) zc?!C7^AJ;uSh&FD-z#D#mQNeag)Ab;@ZC|^v2$eXJYxisbMQP`3Vw+NjfHT+|BbSC z-1%K)$sAB73>g-a4LNIzx^oT}N6=96=U}h2q7ejs(gj`p-y3XT@i+N&s{zLrQj}Hfgt|7CtYjdQVh0?|+QGsHS zu4ooU$=>+gMpXlP7Hviom*eJVU|Sze7de~5t&*cDK#}}INW8;b_I!pu79`QO1QKuuC`wgoWy-|?KRU2}(O@rB;m2G887L>&k{~!fru2rjgJH`8| zQe(K|-l|k|8@;T3Eq(wSOz_4Z1p9<k31~ww=i?~HrRV~fc?%h{yVTU+3yH{ zKAN>PXyq@;$I9j;Ic(S1qg}*-*VuUGy*IN|TeQdAc@Oezm=?MDYXr)QCf170YnNc| zmiHbhb4aP;$r3U)Fx)^f38p6o($-DNDCLAz;_9Dyh^ z4M>c^)>8U@+q)<`;&D3G6Z}ZffxzW1hi6HPh|9)~C0#J+yg|Xb!99GP?_~4{%;ql| z*4;6>lH))9J@+|RAK-vz)C#^ckZ{l`=s``X6}Vq(qj}%&q;jcCTvh845(p2bx`%J} zQJ6ja^ricBiDpzTAhYhgC#eC6(eYmt8WO$5da-2)Ya%06vM(52gy?mI*+oHhIMK@* zo3XkGdWdP^@{qjD&6o)tDsFVb=g@axF+tf%wqH2q*w92VSNZ*Zc=p4HV_r_^(C?kS+bcgzRz4^ny+KD!d^4KD z)DPt+aI(_jcLOf7ZU@>cu0a0qM^1lQzZL}Ju(xHtk8pTwCVL4Fe!dRl*Y=GGZdK`vOseR1Z zZyyy^ZEV>BGw{x0+?|an==_8&_<>Txlso+PNTwcRkIHv8`FaBBvC`0GQ^h!Ayj7fN zvM3HN931&O6ah8P-}4MQpHa`Jc$UJBgCiI6W*J`xkG)*IqqPX0ag%ygr_!G?N4>Ln z;SHW~ro8{_<2^M4Pj#nuchtnEP;qh=b{2AWwNXgd?6zdI>*OvYl5V2E(IeV=zC|X1 zQp9KGV+owgtc+;!y&?;06(hUv=TDr0eLya(Gj?!gov^5pp$mjXr2wY+&Fy4C zg>vwC=M-v~aedxsEF;k{ekh zU`$|o5>078ZpAw<;%2vbg93$2KZ}c!ZtGiG5rzlUfxaX?*ag$p;AmI0Z{P}-W8G-R z7?=H)tOxo-fQRb3mv~$-5nEo7sW1vPmfSeiAM+z~G6;bkD-ol?{6y)Am55P)IKjg1 zQ&uj4=_Up44@_@imZqCzY5w#+D>uoSEX@bMCqJpP8ea~9YaVUg2G^wT$;YNQQNg}# zAqfr&p4d8Keu`jwDAly-8xEJ|@tOZx8qbnO^9q@%9cHrrU9jx}U;j!P5A|ue`S59k zPLgdB@eB@A`!;Gw;5eu9W)~HfdG2i&1#WRU7EO|MC4XO`#JE5q9d#v;MGLIs)LG}) zL*J=GpDumpNZrs79IqYJ-C<0DW6+6omu$B%8fDzN)9&J;wG|HcLxfWcM;2^r1h$a^ z6>#{EmSM7o_DZ?StVbH=x`1FWHsHa{qDM)PCP8%ao@Ud0f}Q3)HHSw}ynCtNj`(md zQTWgqi;ERDuoSScVZMaTdh|3k3xZ?RVFF;*vf3bMV1AcYa8h@NyGB?B$X2y~bdFX0 z537AA*{WUR%;4l_s&$!OcsjPF3$F%@^R-t-yI|+tAcE*TJUnr@P7=8K+i)Rzr8$7> zaI7r~D`W1UAU#D1=>H;Pv$5E|z3j&F4Y4G!n+5^);J|_8d0frIFzPIZPT1onoKFs? z&b*Rub2+0bjrE1h@(QZ_BECzGyG>x>DAq_EXkKTTFXdT6Fue}BSq}w z7+h0wS@B=v3Yc9GXI+E>OC5&eveI*S+iHdP$?Tts+iQfb&27PWRgN$=oOk^roof^R zG1wX6#bf*pWu)#k4g^bPF^?=UzVu?G;WlGeHFG?@Caa?BeZ4&U#<^tsTYbq?@^JW5 zii6ipU97g)_%n)w*Spq@b#?IuPmQo`#IZPbkgYfV6QH0Y^18FL^4i>~T-G7dc)6%7 z7-GuJ5lrqQ5I?cMk=QhRx`(6xgJWHh9e5WTyJ{Vn7kd_en*Oy0?ziTWm>uZu4s3S;6+RYuTcV*KC1$J}bKBTm~>1&eX1J2{9Kl z@%JKEltYnIy{M_(QOz7g`pWsPq(v@mr~pX&Gf7!=p9;;u&cs3-So7`F z0BR@gDavhfGEZSG#7IL8>@e!;%;X+*Te%>7S&~+jK@Qa$wQ9M<>5%p@|H{C^#YKQE zXBeo~`H)e>vm7Z=cF8MD_;0i-=oZ}!pqpVe(724LaDQNt#`3%>ROZ3nr(O}6=Vcnq zqB4*1x^_?9zIw-WDCwTChbuHn>cmuFH23Ei&I!9ADzlpfZ7RKkOguEu{$gVv?aoHd zk^wEA#RsMPkWW0hZz||1kZqnI`Wmn$IHn3VmQ-b?+gQ5BZgZ;w#4r!4mZH^tkT?<~_zQ zA%!+zZj1xd0SxSjBZ8S!3p1JYLyE%w2=uH7d-|`T6VN+GxVgsXo;98Ubyk!_P!n3&G%3R%-Te1iT{{* zK8xGMeb|b-EFLx^9%k_qY4O=AN^$P|IDA@lm4eoW5u)?mWH_JX5;tax7gtWElAjBd4j@#0t8-B{A z)PfAv@QRi5R@Q9usQS6mf+fopj};bmF=_?R@{`-~;eTACqAa!8aEnlLhg7+3^g5SeGR`#{vh1jdVN&5~x|B5A2In7YF02Z7n_o{s zJ2f)*qjX1-|A^wkkw^08?`D+D3Oal8D(R-1XOm(@-eHL9Zwz4_i7L8S@XdircJ0hX z%sdiRyNlB7p-u5w|1k;nBP@a$(d4ic={B#Fn9iF&v_YsddkX{i^)dTi*)G4ci51N= zyWnSW<6~5h?2F11ZY;g>jUEjGx0?}Gw<_aPL~2+6n+v3vBif2_sbY>c-D)(kW4$G@ zVBy6}zKWh<4kV~}$*pw5;a~gus{)U)*uTvN#O}w9==hZ|gJ_C`Sw%m?%v%y2s}f;+ znBW`#u=vKc2yw|s#q8(*Kt`=D)~NOOeH_E0L<6{qR`o8Q!sOkh!LGVdQt1g^<}xmw z9=Qe_a)XtHzyZL_*mf%eKX<%VKM17?bB20nf$2r|`)uABN|gU}sCvFF^C^OHn{~4~ zNPX8_FI`9ao=AO@8_jQ+(F>tcFr<=pZeO83;mi_A#4KXU;-F1=bCHuGw<8BihjPnx zP_NCyXEr`U2VWz#AOakb2z>-T8#$lQb`p_7gCd@n97jmV>z-E}y_8VXNjPG+^g zIKGI*7OxT3JK!y?>NNl*Ggd7=EWvenPDO%T-5xviO4;e^)`I28}&ehh9?d{t9GDlS^vmJ6r+{WLifw&r@}PB$njssovjC?Db6`@>hMViGhLyOdn2YU3p!+79w>E z^DUKW{vmZxNKrDkqOHS9+d>=zg`S*3E!FkDi}yLVzh{r@3BlD5REKHi_+T*b5P(*x zRgca{Www|x_gtYH!3DKF<-7BJ^m!s^VFeU0t>-cx?b z9sD*ZKdpn`O67M%2fs&@AHq$${O-a}=4A=5O@{Lp6%VCG!qafh#BZSRUj>}uyg+@U zWl-N};K#S=do8_udbmS!JwTSPw2ufd$#N?cU zH=1Df<@qyYxrKpYSZ^6{lA@Q3+?j(9YiGRWIaZutj*!6)k9>1Nn;f2FcJ;~_=r5TLoT z&*2!d9tdhE5(u=aQFv7rT%=W<$qQ5Fl%ad0=VJ3QuT&3UZp@(|0~{+(R=}`CG=rh7 zZB^wOGBK~5VKuC*s(hez=UPP9$!)7DWlU}W^csKJWNvcL!lzQ_VO1w%pM*h`~l+%Xoe1&Z@jIc}@FGz&JtbVp8En?X_ zEyOnq4?b*2MEux@7EQfLu8YW3FC2M0QT!b+y<|L=L0Z+@sEnc~Vg!_Q+wp=2(#Rw! z(*xz2GMk8YS6d3rPn1r^$4Q#j62)}dsr-j5oc)J9$kOp!=Vu9duKJ5jo>R4|&%m*2 zQbD%T54?zsVw7PyLEWnF6ko%62Pq0Ne78aczUzqY(}ELSV*I2Bdq>`uI5AACCzC|I@1y8rVM#cMs@(7P9f5(~87pXLsdJe5Z?slX2%jq!(#ZA1G?(H3->h}VPMNSn;$rmR{48tl zb7i-|`sy&=l^}N?W*DeW0{* z*;{4~bMF#%<3gh>tK!itxCl+&7x@#ZWvPwD2j8IjlFzK^y>r6T-GqvF5oZ^a%x~FS zLe0C(jZD;|mmBM1n;BZC0nzfU>FCD`d=r&g@<{Xa%Y?W9MH1}-md`{d`5Tfc^^pQ# zm-$C%%Cj5-n|vbCQq9q5!cWB|)5gK4GZ<#|BJ&WS?9CXO4&Zs1dT=+fRyah zY9l>7!E@R7*){U8;GUeNRH=}+aJcW{6?x`*mc`X^$13?QbB7Q|$azrljhI4Zuw)-) zrh>zLHarTCspk32uk9V-7HFoIY7^(I=y5A9Hm@h^L@+kwRO@6b{6s+;6rUlr;zR{h zEB7#Xc|#B83XNc4#y;vC_E58Rd;$BZ)jsO~A)eEbdjGwz_Tx%9d`pp0i@Ey(g^gya z-l%2Bxn(8I=Jrda&S@jJ&}Z4V>zk#FZPQNSdqlo3f5Z@9=7=-=)7uL&kt(b4TFloO zL@g4-FlIDVTu@&khfUG6&MC=?Yg5`}8A4R4LhsGyJ7{#H_HKSaF&_dh(%Jpw7b)MC z?orY~M~xz2l{6t=wI8nk)8^>JC%nN~ITo)_r&~_<8qR*3g*#)Yy}v|TSx{2Nv0>Hd zvRRP`b7gWkFr$Hm5?Kr^8M4gc*f5=$gwH~J0{f@= z&L|DJ*-qqqVUrB|tcL7|oJ0*KyNk-g!O0ESFlg0Nh>j_EaEdE(BH7Ro`6X3*eci!7 zD4$PakFnVkIC!phXR<?k*7jO`*Z6Z)Qsud^X}EJ;=PVyd5qkH^Y(zMWAJ&jTWJL3mw-plnSdh8X~i( zfpw6D;ByZ1ipcHc7>Jbmh6)tf^61wFPZQMum}jKuvIJ~*$)_jrd4qfo;WI%dBgH32 zGTuK)yYnW6i_3ThA`^U5BzLzwAi*SGrmFXBs~o?i`#bNRRV>m<$z#OlulQJ4DVEQA z6~S)Dy9Pm9FW|Epc^ez)8DWR?1>NXtjHU4=HwR11!2W~&X)no;2X7Vt{Dm=%yD$G3RuOPZ{jIlD_)r7D{8ZPc%0gh&z%y7S|}cCQJaH--x3TU z$_De7GHEwNMrZxE#AH=B%KSa^0qUe`2X4mArdpM;F}_nhp>Z!Q+wbek*ED~Hr}EPh zPvt?^ybC>h*CqKUQrt1IZcG?VL1DB9-%pbbi_NBh(5|JFpx$iy8Bu9*u!R12af+3YPOLA;r?<1ugyf7VGp7x`7nK~8a|Mrpm-y8q`UrUu3d#$|!mNl~2G*_4m zxaK=W2(P!IlJQ?e+_=isCd2(4)CTsNx!skync zAPQdeSbgOPbUynyIaLXl9CmANW+FpIec5WjNkLomqK$L9b1Jy+7`^C?Im0k3WR=FP zZs-yFbD3tc(Mva+MXFTG5I>fg`J~tnwun+}Q!(~{5@>L4cIFqaGqrhcB8)06Njy6Rl~egR+fgoqn$Ln0djk6ZMvh(c%Kt-q=jgd{j%82hNu1oSz6U_ zs$5yX4HL_V$F>9hdu+dEAeJX4-@>5b%goh$@ zZMX%T9IO9dDU?KeT}847PG*mq>>(YzB2Wj{IIAAW}8N7bF5ZQbf5v3 z%RG0esQDOanX*XTrc*jo7hcTE8Mbs~UnGjs*{lxFANo#Y7}>@%XpD5>s|0husxKgt zb;Y^ICq=U2Uhm_zJSozXZ^Jph9b|i@cotR5Ey$V$vT}2e4rJB<&tdRDc0ZuTK>|XD zHK`KF>aF>(vgIKukWGzTPG^oM&oD0~t;$wmTTmRQ)LJy5(K*_S&X?-a9X*`S@w82@ zt`KYuwqVM!uyv`xWEuCAahnrpNq1H=K zU@!6J9$zDhY{Pj1g`=^l!3W_yi!Y(Nao`QA^A9=$ zvmbgnX~o%=kh0XAahO!sdM8~>u zt}c-@YBp1w`<_b=o$<_pZoDsQ0cCfsR>be@`cEV+?A7Qu4p|a+Tb0gJZ)KIpdO~Tv z&utF`>UZ-AHKUhUB+8?&TkGkZhw`du8y!AT;Z&MCIwYLD)VyA$iyI!~MXyFNud6Nx zM#T_U4D&3!jv*?;BP9Ek#aN^y!EST}&A8_ktDI9*IX6-crazTmCHu0K<<3!Jxf8ea zv`+bvq{JcZ3#3*1dXIw$mdVGY+~eI#*lAtEi|7PO$frrSaej}81&Rh(Au#@G zzJ&o_T&v&L0#Y)Ds)eGDk0$e>axq*hH|)k&QMz$(G>wm0V2JtZ14EeqA3|Lzn!LD zWj@m}+w%{bt(%#&2Ve{AToaTkiKmMN6ZB&B#XOr_|Hy>5Q;#ezxHb29mCqMnSkQ@B zprHHqd}bb+&nsdqZMU6Py_GyljS|>+SgQ)~;V~|CRlnz-SXMY9*H?Ckm8UrY(kbHt z8{sTMQRU{P%-Y*=is?$lRVKOtZ0wm>jZ_Nq#^}Y|NY!I*s={{kl0$R;5}P@aMYC1W zMTbUsQ$=WB^arxy7KbFyyyrC4-|_`j{e8!+I9pMSqI)q>%{T8R2UO@!+;Bz4)G(MJjeX&>B7Zi0#)95ub9YJ-2Gr_jY-28&}a_3LgG7{ zUc{ndeSu4>dWn8lSuo1Cpt4}9nC@Zk%YydH$ZqQRS+z)pk|*eVoFsZ-S))IX*_EYm zbAH1G!Mdnh5W^EH#vTYGk=x0Zc$SjLx$qx$Jf=i#5kHVM53I4v)M6cTq%zYhQzh2q z6dXjR+*2r*ikqM0OKc`ZWsPcKrztW)lzg0jzK3pIW-2&Hj*^EeY&TDuY+(jwG#m6x z|F88`g;(Jr+`@PzH$AB{jKT8aPb#T2h>kfQS}9A;0iIfIbK2a~wAz-mpmQ$YY5`=q zxokA&r_`P@9Ur(PcJ8u}u!^~0eIw4<8E_Zo|j>U4iOAKDmD&!>ORvvfn7=N z%7aOZdU%6FgL7Sx#}&JDE+Xf>j#ss+4+R+l;elcx3@luZ(t8Vjl_Rewio>^XopXk~ z&|b@F?yxG|hq{4%8s4D)VPm!{=wAk{o=hxdTk>-&$FR9fa#W>msNf0|fsg>} z_6;)lLuE>X8df?#OJBF#tQG1<`xnh8MgDiEXjZ`2SScFG=3yCWx1SGsW^+7TKEMf> zSY`Wq3Z_!E+E2UTx!O^w=6OD6k3D=UOYa>r15(DOpKH~d_@G*opSNVwequ3^E~{F~ zS_1nR^sF)GnFLp7x_SC?DZ`&#y$AaqQE3++KSNZQg0N<@1`TWE7RfQhw3VJa4-X6& z$VRec8Lg{i3u%O$+dmZ)CCAbZJ}1-cwKB*7E5eDjq*!KD{6Day_`R&Yqh5nuxU+NO zT#$`Ds4eJTO)JnOE&1HDN~^&t|w3?nxyrdZZU-)H{wtjuAkOVcOa998Q}wUTvvcTgWrU~cY$-ld&7 zIs+Le3mGS;Of4>d_+Mj}9oh?+E(IpoO=ZC}|Cq}8Nz?pn@t2Ls&SC)_0Md#TaYj%C5+_lHhY@Pk zwl1$&ZL8H+)t){Hr?!eVJW6{fTeGJG^vvar@` z&sGvG6ZLxK^2AZpRwQMA&!_L@<<%vxNJ|Ua-_NB1dLJp|#wE4|nxu-7X*o)!_(OVq zbiEXp34NNL&`m^j!;^pYt1Sl?taQsBtBVvoop&3{q$zn&R)N<+O4y%h)kfjm-UIN= zm&gaDp^2g~KU03Z@>3x{=gQBa^3xAhI_7w%Ix^b5ZAVL)xz-p1D7a=r|Z-? zz%ou*2FQh2-2VWs6|5H{Q3>P*WDuB${7N>2=MmXkUHVuX8iml|#jJ z4dgx+eTiHw2bFjn?pd6yrFffi5l%alq-q(H#<%R`j*pE)`V{XnL2aSmRE+SBNhG?A9}m);Mb7~SJ@l!R^8Mpa;K!e zZ6Xi;8xfit(}&L59lM`KHBe)Jer5M+?1k|tq5)$_Xf&-ngxAE8wL3)Q20*w5S{u@C z`%5mS!^rniBDcFmAkHdajbCm&`9Ysxv}g2ecj8iT>3Nc}f+o)Qt;v$bDUr{B7!8-O zAox~iKqXv%{4MyGY)q8$A$+*c+Q)Hd(nm~E`jbs|KZ%}Be!#j=G6;i?JQYGVhgT7= z?s9qlSFbXAUtj0G=IoBWjMx~Z?Czht4?W_l69kbqivFgT87az$RJ-NkX?y|Vt8#;C zJ&w;vYfI@oW~YS8fQ*=86Z8^9nx%!gZ~#1uxR3HMM}E^G?CQrxPix$9Mfr55E=PmczDuhh6l}-`2YMf0(d-XVl0RE%|F0CiYaq`m9(pdHS#6pJ-#hz zC)er7^WmEywG075uWf1|E3JRwD(%Z_y&6F6iE|@g_`)ZCZg>zHkp3ysclSyfNY(W2 zZ#rsvmGQ*SXX0lI8N2)&-+_yyyOqyx;Rv0ukYZNDMRREB9ABi>qNko94oOQ{qP^dK zRK5kiiZD>lCZ_CZJN(mVo7$xUVqxSyVuq?;%fh$AUp6RwSTJ_n+P8%hxbzb?aGP01 zHp{tvgoRt!SH>S@b}!64;`m|NSLW81Pcj;QL4@)2F_Djtx0j&XDJ$~zpzxuT7J68J zfl-&m=~}+TMt&(wYM;pZWFj~6b+&Q+MDj$kIwDgtTr} zN9qkSDJa~k{3Ke5vr^Z4zY<&Cl2B0csmYA2$bT=@01#lv8ZE~oY)-7Fz(u_`!YMdq zZu=4uLS+Q*RcjK(Qmf94y>SYf>Oq~Ta;tSdhIG=Z{AtupFGWHjfSSnbLQN32(!*h1 zqv2R2?Uw6w;z@yH2@)O43(Eve#OV1_IiKt}m@w*ZCKsY2YLw=W$8MMAi>2|JgQaqjmj>x-ZHOk>8vRSSV@1c@d)!{bLGU}tmswZgj&fr+3sfg^|Y;e57 zyw-50x4OQSM5KYEnntlBxs=r7rO}24;t(2DJNJ`J#DJb^u+uQ@!eI>v zkQku)lLnDZcIbP$WKZ{!tICh&0C9;8)G7^B)r_{*>9Gxh7ZI=9jsXtW5SaP{8v-2_ zrO3q{ce4=QqQ#TiChRFM z$~vsGlt)OEC|0wHs-3%`V-T#W4K}paiys2Up=yI}_9usQX1z+vcilkw@~KJLE(nIG zKOqlIHF7*@z|S?5C+go5-Uk`T`&HRmMo{vO*Zo?D$63-e4@F8zx>CYn=CS|iA82?CY}V}-)4(T*jyST+s%r% zt{A3WtC!Dv_~ zQ9ePrB0F2}kb$zebd0RT?b?xaLU$IDY!->h-dW4geJee390>7pV^iv%+#l*LJLFPnbPjpM+1~ z{6Q3o9L|=&x?;m$NDN_U69YLWT!vI|m@(@}A3k+`k;Z3?r&sv18*Mh@v)e_STf4&> zeid<;9rqS-&D_WaP&%-?D{MOU1vXz9j8>HoKgP^I}kdEw-9$PJr~+ne)`ByuCL-bqhVk2u=hBFN%+AKGh2LY z&S(VU?2EaQv6U&`uT^akmc^2tGUregTNgw%7~7G`^=69<&#pu@CPW>oPuFZw&Ht9` zLfZV+coqK*h0t$AnsZx3e7HaF)Y-0bj$-x=YnV%1>Xl17L&0NB+5VJj+LLI<>v=9Gklxz z^oV3c^)YK&5qoH_wlUY|PXVXwR@Lipwvh`&=Il()KJg0>zRI_gwkgEAl(hAu^_Ri(psst$ZhI!6at*X<}_m-EMyy{BHfPn zq2PtmVoRKTAKRHOn!Bp?gexDFV_T#x-xBN=$y4atr> z*`ecl5}l-FlHCqt)&E77)hFNSWklX26yKp6I?kx?%Nw9H>Yt$|9e6Aikfl(^Y$5>k zjr!YCpKc@&+1|rwc$jj!V9#B**w|wli(dvLp~E9_U+7R7tj@91tMvX7SD-t2sV;=E zYs`s1?}X`OBkzJe$YQV^Pl0{|BMOx*rykO@W0(;hq)yydBJD-3UoV}YkOb(B!v_Vj z5rVjKc}?_H=QH(F2@|>clnwx(B-cG_siW&suXR>!Y9nkC$kQk&S@DISWWcBoriN;S z9SHd~sE$iTACVftCE&H-8iu8WY<#=sX7Fu@(GU`xM<)0-6exZbMLS5>+R^hBPjvSD z70sWyP9d{M+>H9;r05sK&Jr7P=tgh7m2@3U0=v`wbkc<{Af9_oXgt(bVDZ&W!lB67 zOwQzNjQ?my=R7Qkzq&2;hCgblJ@UcM7}t#Wj6rxr3c~oD^7}F8G-ATJUJGF3zopdL z?WM+|#q^6iVO!0}4wn(BlecVc1`#6T+Lv`x=!}eZ=b|~qF8wS@*M$q0AnmRsLURD` zF=T>1CGwND2plhMm)T*x21#gCCQ~6kfQHB$%fBGVGBrddh*0AfHOGzGK#pj&sHgW& z;YO?4(9=otVAnLarlq+*m1berG*_mjxt=t7DQZ`RMJcg>u5D~ustZY_S^p~5%GcC! ze2V{QI~V8Lo-XfzEZTa5cG}&h3i#g1d$g(x^|-ghUEo|-M(w|E|AoLm2?FW*S1)V9 zy-Q?K>EgDc;aOQyGvmu;h3#@^@cSwzY7m)(UxVECirl6q=7>~BWzL^VfoD^oEZ~=; z1;EvaUZ$fipHw4WOJc4YoArvV=LEuD$KA*eD7cfO+|sYJ^e?g{>`E@S%iYh`F0}K? zVhC%1eVIOM)WtoG?7p<{9#Q?@txdIM5cZi=(Q2>rNQ=74L+mu#xZ-tn-_8kk(!-9G z-pVx<1p{?gUPo)$=I6Ao@pLcQ(ToFfoS-)9>llVe{GiZCInU~0p%G)K2~bXbR#{e- zV0q7w(Q%k~%SusicNi{gG;_t&pEF7MRNq3>pLphr3M}i>MSHWnuKB&y4=oq>boJ&@kAK5<6 zSlmjp?PIypn|d+{OEFclxQGX|?5)YZ&$4vLzrE^hN0i_^rZU-3KqYP?aPg!Y*$WU)5pAC*ud|Pu&5w3WQ7p z*lJ$YFT_s8Dp*KX-xKUcGve!ncZ#23duEaj3>VIJKxBKi(eRPeCaE&&8ZY(rVLKCl zfQ-5+QI}UY5%GOCzy^A8`>+kojJk^D8or2W0j&TWFw1F8RBtb7arZS{9W?#jQ|F(w zitWDGo#z>AN3$jPAx0+F4lyvf0zBZ-CoC9%H0HtKi|s|_Hc3~GMdA3ia0yG*)@MXL zwGr(W3!)g`iZO7jXr{QJem@3yltw7mtR|gKlnf}6Q4s= zZP~=I++1wq40)vQnd*H=m5_u$Hc`$ zCs;55fh{-rl}HmO7c+By>>}*xG?cZhXVoax#}Q34_ejLq}j&3vvq0z z7P!|^twK;O1Pf-`w{2@1^s)j43)?goy-59X8aj~jCDhK_GvIh1Ix7obD z1sr0&b*NmAuf+w&F+pn`#_L70Ffk65oK*fe3obE|L^>&^Wb2Kauybox{WBP@p&Gli zK&e&T(4UJ&$`20hZyVyU0M0xtIvs>ioZrr`2F18U^VJ!U z2y`>EJ&9~hV_P*og;Bss<2sr%(rM0Ai5*`%cVp)K)6DYoTf_YxE;6I%>s&NMorG#3 zaa>AJH9~3~=F|!{Zi^kz}RP`&vD9o5^S9%55B(k(iAZs9-#FZREv z@Bf{=3fX*ua1r%xnL_DYL^s?^v+te3BKGxlB6Gvc7iJCReS;uJve93LX!R<>wPk)| z@eGNKx?UnF$3G(<`|NeCnRl(RAIW#_x#LxI#OP-c)`geLLE(e=!qCV@>ptYzzSvo! z;%!&^^`Vur)8dO`*wm)xl0w8|H-b{u*IPFo_O-Q!lgRjZ*_Ii;0>s*Z&;^51A)KIA zBWp=x0xWX9rQpqN0x;-y42#{RR?Ns)) zpxYpgZgT0NmQ5^E%QWwic9&k5`AJ~4Fm2kJ8mrRp?m@+0i(VQx*9A$Av6cQGegAj*EN;P z^5IH4>`v1&h|Y3dz_ik+=h z$Er^U=!~tj(H5bglctrwjtK2N#c24Ly3N>FII@Bpi4#Uv`0s~_hTk*lOLbs>qdv@B z(So&ubqox}!4k9GEyC(5ulj@5{oh^iqYO{L? z4Ohsq4VocbQBfjaLsz$iCcssfP~BO8;O=Yn-pXkB5zK=?GF(eXYMC+%)NO~SYS7!a zs#rKgrtAWE3+PMTc z{9F`1OAsI13Lk0y617wdcu@V`ESnvoGSo4$sK;(@<2^17@GbMA^Bh6>d|s-4DAFVD zF?xiBjq`2=l8tdF)!1)eM-Yp(6YHSv3UB4>WJhY6IVU~vA+wJh&A zaGl7IELFXcHzvjaZ`n_4c(3F;JrjmO-R{y26lOHBk4C_%BJi(4N00YNWz@4;FxcvZ znZIlnSUyP0JzZgngY1O%0feC|(*`>6L#A`suw8EtwCZEB8!i064Igj5xvg^zVrX{wk@3t z?*BnZ@0ny-Ncp9~MqI8G*RGIl908Hkg$QCW;Ct~Q^&YOpq z;ECe?;7mb{GeLP6Q_=WN*rwJ-f_)vfu&zvs z7V?F$w9NU>=Asq|Nlp5ES<3x09;UHL$&Z~bn}2l`#UxJCe$ryDW%ycinz5|28NyF2 zqnTP|u*`&2Q8PN)(k5+rN^iG2+mcS^IZ$MuO!+5_nI03dOYv%2nx8?B#jp^k+8AIn zr#3-wSp^bfhQ2uLl(5&f0eIsYnd#yd_d;2ewIQ;+J0>hg$||-F3Za2bG@AwW25S;# z3(VIe^+K*qUhxjScQ&ry>P&Ce7Gc$QeWus8C(4llgBXyT$J zLLSNTQm|&VIENDh6K`R%;BNA-W`Wd~D`&6H%J|mTBX?kg*g=JdJs~0l|KJt=il(_- z$K8VPAygEM<$wJsvKZ@y;9z`atr)@0m%at!=Q0raAT!)<)-;*f0*#$-Jbv!EKt<~n zZj7oHWXWN@&LjY*1XC$mzBW|oSXg-+fF=vpT>xNUYAx=}>}qG#fo}p@xjR|P5ZDMj zeoD3=JAb@>;g0q+s06LT_-Z)l|3b1Lq)Wv$f^C%3(f9N~&^p~M0KgKeAb)7C8XRWBG##G!FB8iXj@Tk~Ice7r}0WKZ=|qK2-OW#vN2CKkP}>-lIRdYy?^ zaC>U?K$MaS?-06axh`_53>~uYg@xka4+T9vmMb=&@CvV}5-5-W#TnZ|{% z0tf{Yhui7*liFYei$qZP_giYEkHF61!7unL*7=Ro)>Ycb@M^O8uPM zHltyz?!%kn?+aR62enF4>!sT5#oK$mk_f% zdeUe9SJ>aNO=e7) z#dYpMoQeU9B9oiSdaiaoOqNXi78?yifCYT+$*f!4?=gR*BNi)hXF7- zmiu7XTIe(G%px1>L_UjqhB+y#J>U7h^ZuiDaKbyW9|{#0YJ^JD8O#7)$Da-WhGGaK z`b|!4A;HZba=EPdu=4^%xQzS(L|E;SZ6l4vlR-bDekH$=ZO0pnKW6NW`ZxI%O^vM#__Aa+&G{k&JuD`tbMJOSLh3+gQz&npFVu zi0Jr-A8lf9(I_8eYcZc07;n?t^bP6&*4X$<@)C0$dcWu(Z4VTU&i7Kbm+?RFVy%zF zPq2Np`y%mN`-pytP^|Aowr6p1uan`+4{41!_LlyR6oq(La=$9CS*-r?sm`~a*vrNz zIxhz!+KJ1;7WsOtvAB=`ek%dC)H+J2V`k`7`57rc)Sr$2cJUD3NAly3{cbJU76+>F zjY1%#+k*kNNS%$vVtgm{%Tk~f=MN*@OoLPvh7A@DXisYUO>V{?Ju--K6R)e(<)WJK zMY_C0>6xB@;$`EVO}25xC?wi#NVK__JgvYl>38A?IUyO#&$*0={FQJjEJAYsEsM|* zV(04!vfI?=_D#vi$0I}Y1Z(>9W7NOsAkrloeO~8HH{nv2w^S3Z+H(`GN^3&hk7>fy zduqaDnxJdwomNBtJ=f4bt%gIShQdA7kd><8K9;#uA0B;s6UJC`saa!YlvOPe5Dt{# zJ8p+G$(8v_J+wV!Xum?#B^Yr!z9AT!G4eA)e*E%tikM=Ym?rr`3}ssQfEfCm+7ES< z780Nc;4X_UD;qv6K>EabyZ^d%XjRT`H2R{|uz7HZSS2U^#?wmKdF^+)C&Rx0A_ykb zA}!_q<4a*dyx{9b-!n-xzOYS}YsYjZE`xrU^{nr(4atIc#%o8QP<$s%XXY5r0KTNX{5<@$B%fkUYBcyCJ13bT;~u5*R}GAQDl(b z{U0`XV&`J3^=!iMDQs1|jd85qjv{4+AO%7-Rl;hw)pa_V1!F^#xt(mRl+=(6O<=w> zrlI~J2phVh{=s9k5QaPl>e`tB^Vkl6PS%=aK?Yw1!x1EaVyzw z|0Lf+Da`DYwWW>>iw`}=m!1+|dH@4;LK*)iBdKm=S>27iP09oV?wcme+&N)~nY)!& zTlU)|yjt2hB3rJMe-#OQPs(TxeUUTd;e7Z9p9QO*KZ!5+4axMyyw42V&$uoJHo;fB zjlF}=*dR_M@F8#_i7MIZ`mD9S$oAum#e<-il|$c@aQ!q1i-ENGArRGD!&?kwAZDU7 z%FiHY&}ynJ9~;qZ>pp_3vz zf<}Wj#nPRUIwjtJjE zP8(cv%CPeJryNm={WK?55oK}@#=!xrwGyYw_cZvF@c;RRppR9Dm6?%wO_ z)@EP`Wxc@JmVDoq6`6+r1z+Ty9-P>S?8pk`@tcDi5g?Y3<1alE6_It`#PPl@uOHC3 zb)!o+@23n|-MS160ul%D#GzfH;7PgLJJE+%?2ZyWcrIZ$HF$>5s`&Zj0b5#!xsB^Z z@@8|w{rQB1RF1365^zkDpY!C0qa=>);4u=?x616Rd9w{LVo%C7)A3x&d@^GOA%I3` z8lk`GP&J{14iyo4n-F*#7k+2xi*aFsv>Us4iw?O-^0XwW-B!-kj>)DczoI-4?y4y? zTp-Vv3j0gObp2(Ld|4=8a3S&H);H=_2w)O(fS6GkGoP`0S57Kxoek(F8_?Se=bmM) zcrt@Jd$;=Jhqxy@rVd=4fjay8tufx9pAc8}2anLJsc1NqGfdHCf-$8#hj zQLjWVe%*;2esg!0@}^dj|F@rAbpxj}tvB;`CtxqUJRgX*)`9KbbHjUH{9u35W zqdZ#mV7V@nY&GjyDD>geWWh*2p@)HZ8TH!nBg7Pfc$$_*%`66J{)d)S~ z4k6x|dal``lhtAXH47~c|E9mku zCz9~eulS$^F>imKmgMJ>guQ_znJY;w*Alzflr*}I*S(NN@9oXAJHs<2Q+M^(HDRmD z$OLN3e4)H(hkvs~B||1hl4XyAq$N=;C}|%_9`Or@FGG2dek%E_Phe)m)!2i#rMntq zSi8H`-KkOd42n|2&=(Vj4D*J5aDuK^4FsatoB^ zIfmPjqtt_Wopl~coydZ|&o}AV{K|!yfcXFzgbGKX{i$qBt^6EP#0Sd0E7>G>dggzA zfo=``*9k;K%_)daFe~5rSij}?&Zt`{9sife)l#~a*VT1ec$jYEn8I^J$atH}w1#7c z3IYpKi}|!Tyo|Z#-y(zG4Uye)4n$AUYZ(KF=YQ)3J#*pCS8bO_*T(bpa*$$Z*Yav} zz~7ASHg4MT@vaC;W4GIlrG3K?^E3-qTCPhdJu<}*N@3JrFL9A6Tj6!9wnnBT!55tC zM5grAh@(~ULOH&ERRj@5e3bo0f0YDxY(tk5#NHsNF&ZhoW342$jkjz2>O9>w4u8sf z%r)_5*@7F6)p<`!?9Udwr|ig}R~yu8A|$q4tI4+TG&XgVBz%r;?EO06HR>Ic@DtRL zB6E`F(<IrN9pE!X}%td4QgDg9)Yv$W~N49l)TQz z8OY*UU@$ASQU7B><(TWPn{@kOY#HoIY5(D=_8%Uvki)mo%{LeR?p%Q?d0x8n7e%XMMwxeL>|GyLEHtB)`S`45pM z7|nl@hx+0*HtPYv?yD`wicSl`UQ_vcuUKf!M(yvqk#v}8A0C~1w7z9HY}nwvn)rAN z=!dgi)Put3CRZpAaJA+lhdTf8`299+J`~Gk|FhP&d>=;F7kM_h5MQ$)<3tZf9%xgt zu`;_koG>2CH6F{TXn~QAxo#oLn#xW6$PkD$?F+4oxqg`{My}u4V-ZHfSAs{Z9dUT0~@!a7e zo;$>rQ5>)5t`^T-eUc-iIB2%y10?DV7z>e6G$#wr*|#QM5n^Bls$UvaM>gAT~>fEiBur-r58mIo(O#Q(f0B`2lwF{)r8hK$uGfk?MPf zzBx3>*wfdR2~3FnY%|2C2-C)%>K!PX9_T``ojuXCj{6CpA}8mDjuPY3K`C9+ABa^C z2s0(JL|jos!H$~m#YSi18!zgA)f0#w?2FEWbwtWob%KaL_a}8~T6Ic5vC5nDFCjhu zlzGbhsXN;?ze?$AF6X_2E4ExSc^xQtq~n-TV9UYGqtV2(fMFLb<|Hdvpvs6bD_)ox zUzXX7@1!p6MZ>>es$4TOKR*@5XHk>t9cjxXxeoWS!!W$%nZ`}J6ueHB=Q?4XCNC|0 zep=X_mN(RAD;yguLCCe7d7J8yF4z8sVyNpkUAB=bqgK2;{f{)jHZ=-o<9tS&4Y8Xa zc;1OA>n&+_UURCBl#LSg0H=PAl@i-7%#GMP4J2E4^Q2BcO+}WE&Cd3Q#;XqRa0x}G z_Hr^=r@6&)$u8zCVzQgXjS!oe-I^v@K2I|y5VQ6XYpYoPRZHMJaJVBDFDxdv^4d8@ zdS5B#XJZ-KS>xf1-!!9GkZq4n#NMjWsBZ;^T5eOQT{&* zVRUN?a04PYEGyK1tLwQlo!zad3;w_h@+vlwu4M#i+FkO{*?$d3m7ZOo2PYr~f%vkb zs#C(Raz4!)ZWS$VqOA)CfA^Pk{17Kbj57b8X5+~px_dJO^6cY0^PFcsPcwoGU6*{# z<;_lKINzaU+HMIS#cug1250@u!I(KUVsEC6%>o=-34f+@K8K&MGVW-GK4BJwNz)c5 zTJmYc_C?kv6CSa`gpy@Blx#(1c9T%DOyjX$gS(hX(Y6mw<8iF|wTU-lgNa4+W(H*6TiN8`pF~-|?suJ`mrLXwU6Wou^H- z@pChtRcEj>UV;anzm8*2t@>gy{AP?llGn(AS<@>ftrQQ{#6x$X$)mGmA^~MYXR8 ze2c(sH9_-^h&UKfef?-dqrQODFq^(f-VtQ%xOoBioH70^sTr$iO^?qaS?!JNrb%P8f8de8vJ^z_BO~K`eQ4JM>ufC0LH} zPZ2E5qT*VL9{Qq=f6tDeO*|8X(vFwXG~z`D4v{dZ7a4ejjs*jwu8&Wn1`-z$euJ=s zu2I+D$7k&a$XJNEX;f=l=HWJI&=-F1i4#g6Y#bv2vJVw=yT z>PSFYSZyZ~E&V}6I|Nl6<+P@rekOuMjj2y_m-)UR5R2?%z&be-zU=WUqVa8J<$ zS!{|TC!Iru7_2cTmoS@>1)KYNGOYYcV)2iCsL=k%x+F$M+y#8GU8dEZIN!=Yj1=ln z+DJWPo|Ksw8(pWe*j!loJ^3apJD=bQTGbby>16vbwhrJ->n*NePUKtpZyq5XRvSqo zoxAxZ3PA4MzK_fr5KnlmP6v&h9o@^2#&@Tymr<21S|6M&NP487=Mx32PkfVFaqqA# zSul%=VI(6-oRaw=02pHIf!(vmJC;9m?WUx<5NJhRy(luWEg2ffL9Jdvif>V0us;G8 zeb%@xCBjCWL{IgzrcKEqRF#ewscy+QTKP{8wy`5mU5Yp*lK(s2ZKO+gYHH&W%ww#e zobvVVFz+@qmbdQ7rC4;R#~XF^eUq-?d`>oVPr}TXmT@JF`VC)n3wDW2nuX1)1^?bT zl>v?AwJ^_q58RwaIyijLhkQ*OM6y2;NMZw`D{n~_+(z1D{`175i`caDWTBkSI_7oO zaYknyDR^`~r%p8vsR!LMQqAc2#DWrx6@2f(P02uHn_*lpmjqAcFO`0jwdmT6C8Zfv z+3S4Cx0{y)tt@M_+iyHRI?r!BHjcXwGNPt?sy}Mx`Jq3}eCHbp9vj_@Z&Uf`UtsoX zHXiRaHR^6&V)Y{L@ErNxBP#j4IehOS`BLSk6)D+BIy{TK{srEw&iWr4ooA;bcV4Pi zr$YVu*l11!XDl$?PSJMiW~Y9qYW@1y@El!w4lF`1jvY6{MJ{mjN!klkie~ly+_uS`LB04NSH#abUVbjBUiH=dT>eil;%B0lp9`yrUsy|So;NPFpSL#J&tJC5^Q-yM zTKoBvrS|g|jrQ}dHlAi(lV(`!R>&hzr|gH_@W^ad@v4|ftKV*`g6C^WxJFsG-|E$9 z@`f+@uJm+KuMCnAn!hO52@zM+5$A-6^LE5JA>yh#;+)WB!CtjeSTI)}ye+lg*wz1O~0QAThg80{CEBAzC`^S zynoaBdCT2wHj{6_xsE;fR~Fk;4LL@sCd1K*k@eCzbAcH(Q{?2PMf;n!w6 z4cJakI@>7;uDnXv{|^3NbH2u9<2(e;DdOj%Qk2`d{GaaOXJQdQ7nTw~+RM+lv68G> zlFi^lz$@v-O1f%EHv_&>>M-k8$OFF8e(086aT7cxO?tcC<|%W8r(D`G$E6$afWmsi z)7WoI>^FG`M`*vvgSTb&n>>U+wBO{xTdVyh58m4BH~pBNDGYv^zTw|s^6W(uI>)Pf zVw*oXe(9d(SKEK**WU3bwQr}*uiqh30@44o=U35|eg<5+q$b*@&#D0?pZ%ger zdGNN(ev=1pjrN;7cx$!at>kNB)9sZ#6%}l>-#Pyl&Oh2MX-1_ zBI?x~Psj{ft3<05oiI%_sEF%Cer<|U#kBgUpCXo119hH7#S3J~mYerPs7Q(8B$9e! zBT(|)V|onC;THn8c*@ZLa-3O@#=cNfV+n^i8Li z8+7OBZPc7C9p;?u>@HnB?Qyz#qORnh*Hztp`WuXzMZu_-aU9Edn(i|gN(SupNOcSP z6SIwPO8rhm>!_M1SQrn>MI}Gm-y^=Ny!0z0k%1D^3$$nKPGtq2?p-~V-Rn8}+t!1E z9`)|fM)bH*AHD~Cc~Kv>1da-JbtY&-*w$OfMcOucbbrSHQEU!%Hp1mTx2=s}-WeWX zWvyVoWZ8Lxazv?M>MumOxHiCTCkX2zZyTeHr|bKAUmKJ$eBq+L6L^|~Tdm<=zN7-t zv2Gs#|Au5FIZ%>*bFw15dgVw`t5+cE#q6fZ7d4B0$yDcdh3MVlw0vFklb`?xmbIka zx+>55%(UWIp%0EtN?Kp2-@we7v3|FK0@Y?LZ;4q`>A@tTVn)t9SH%qXydKDhUqR|_ zOZ%tew2Rp(h{2sq-6~9b1>ee;8ATbY`7z3mtSocJB;{i;eVtjjUl2b|3-IG95e0{!UloGs1nP%odA6^N|Ji4J#fY4)VO z=HY^-3V8aN!2 zXQbX!vID=NG;qHgQVT}!0f*ANkka>|s759GtQw54#y$%8h$!JvvEMA(nl8GMg;~X! zQoJ({QvRgmQeRWMJ=&q3f0)dout&kvu3i;2U#k>9$u2b9L)(Gm_$@OhrP^Pw7Gu}v zOoxu!$yF za6uq@lDp!PoOywYOWgDQ0i0v8{EK&b{9tV{GJ-WDJVVz8vvEb~w@%ITTORQi)ISg# z%Y}Mb0o07WG3bn}=;y0gJM$y?>A{6mzew~8SUJT~N1!ISz(dDarVW7*lw2cqwG54K z68`$moAm8ycM6uQ(Tsc`nkj(fLJ`XZfUr7wnSp37i(@((bzk>79H3|qYqmodpoPf; zF0B}C;8$t2TbJaiS5Tl=VzpqkGRyq@x4rLJv~DK>Va_;Ti}_@9`ukpUUH zMZLoG^jpTz7r{fLeuW+nG373J{wFd8M-^Jn`YYP6IlydEMFi&W)3DZh1NYqi*QHQh zpe(@26}uwc!NHBpL#Rg(%Qu^fktv0Mjm}7qk>6O0S_-U&zK;OZJXzbnZE%Sg$?<^fvZJZHyqh8zYY$i?(Sug4Xz1 zXs3^y#!b=Ucn({05Z3UR9;2^tWkp8cfQQ#oqpz=scQ5bqc`WZ<-m7^ZYj_saQZiB1 zM8W6QioFD{GmO4kpJqnuB!-F}Y8K|Aw;8QmY+9A4@w^j;XA;lf@P0PW$GO{hK2MC{ zhI_?)uY^De*VO$CCW4zQelI?FOU>x`X98kL#C+p=h7CoopYE3|c=}U={#6-b9sT8U zP_%Ak8};#}$SY>&O0@b`R!ZY~C=KQ=@V%hD6TY{zpZdqaH--L@i{w}v*4w@8*=1$I zOr}McH7m4-JmJHG7_A0l2l--53N{vO6w;Q4{TzmBKbui?mYOQk`J%q`wPsfdCD}`g zgsH_Qz`moml;~TysCQb49SKvbP2_5KhEoattPfzv4EyT-hIVz7@~zt?`=MQR0G1)A zqg36t=;_k&;!Ym1OSaB!lunkmjoMSPG>&r@$v6O;BO5baVv&`V0*kmhG#cWV`usB& z&=f*-d#3nU4#f3UM~F>l#e@l0^i~5TXqgidS=?O0DNyCn_MQ{qpwf@jb(E%g9L)!c zA?mv#AgY)>A$*+LC_!uN1hI8I+_cVdn-x1SbjE2A_G;fte54+i1W_rt!*)tt`J3Hw z0m8egdR->l!%lN39Y5WUpOzNi(LZ&XU5{q{IzEMrEI^cW6iBKu)Hm$oC`U~3ga8V0)1LOZsR7wVJF6qrf6kztk?J-c z?UCyDSXttcYLyYG{*ai7?$zFnNMpvj)nV!F|6Z#7`A+*arx4V>SaD3qf|$WZBHOI4 z#O!hkBPS9lXqy(-OfD`ZcxLeoZGCR{+$K`i^Xj>KSgD-LGGHMtDS{t_x_uXG)()9v zN_LrgcE~UtS*95H10$Z z$sSEhCT0Dvq~kD)q+4sJdr{KGx}|$X(&3#%(ly!X)=9c4-O@cT>ExIO>7KCDt&nsl zrKj6zU*YV;OzQ(CAqHAT{mr_Fla9KcjpPXd>-Mb^?l>xAiA=pbGx9~!(0=n0Q>v^- zwyKSTFs=+(>wU{bk(Ml28yDgxmYLz{$$~F78<;Ad9X`?@8_|A-oheC`CZGkvztJPcf|?KnrvzD`s|>)E!ll||_DLBOg{ z&Jd^tDpqq{D*%<Ns6^Cu0sy#p0*84XP&NnBE8J=Fo*4Jp`Osybjh zFIjLWolAr524H){Bw#xS#s*u^6l^hdJ+3p~NKU@d-ZL6#ZwG`|4X^ z?QXxO2k5wq>Nh2ae#EGJ?clQ9pCTfQiYBaZSH&BEdcb<*Ya5@r)+hz@?HYwNK9?m6 z2Gbvb`Kf}>ay53WVEOsLyyu@Z%#YRhOnkDSsUx49s}tPRHH+o84W`2PY~1W4%}9OT zSwe~Y%+y%^_iU7Q1)B~L3<%3^HV7%IXid%ifkPtB-2ZF$xi7e^=l)-Jn)}boXxnpt zCic(ocEL}9)uQu&)ti6pf}g*D?dM|fd<$6_czN3mFW13uKs2UNlqNuD6QJm7Df-+mlG+|0c~wWTi!(8B zcdFQzDt6H|yIkvaiamy6QZ(xzyX5an$(fW)nE;fv-)`^mX$8MXUw1Azt=#SBbkexL z5T?Z+^HBHg*s0vNaAuRL<43zJH=SR6gGN6^NzklV!5^g-heF;d#gC?V*hNm5&~kUO z;9AN~pn2S%a?^Omotv&>ob^5>YsD20m0c#4QLF0$0zxWd1(T&(A-L*|?R4iQgdkF1 zZ@;xVSztI-E(Yzsji7a>HtpVC;q0@d9oA=vPd~p0BDhml9kKiThG!p67Y4FhklOTZ zH^smuqC8ugj8Gx_Kojc{!^1aR-5Y&#k+dU3s$wB;iuVj%ZVbvyd{0}ybe3-n@_CFw zxw^z7F^1$V0$dr(XIUyP?hv90OvnHKGpjq7G3_C_CjO zS zK=zAf#Tzr-T1D3~Q;8m9UtcVcL}#i7&zjn5)5>0P>*Yj+rBHyxPrOY1tc~Sk^0uUveD@bT=hnOQkgt(rUfBtqH$6k$L^xMuYg~G0RUj>VGK#t4|j?CWCc-)yi8n1W^_irXVO2ZIo|ekK!C09IoB^da?<}2bkIu<@^*wZq0g5Gx)3&K8uLlNZh{pOa(60{SiInp|r{o`ZlRa?&yI-F-SR(6iOS zK)F>=kL%$QuraWD%ZQx69|a4+i#?&>pV*b{0tJ5|o&A<5I8%!1K*2lNV(*NCJ{ySt z5ET6Fjo{p`CGQ?6WKHj)P)nSA?Jtmk&eV^pzLRWrBZ}=ozTt z5|r#AYVD3>64w=>VRGZ@#b)emruLW;wLjD`XtkG5Dh%bR3~Xl1nn_IHjXu2>sgm=# zaMkP8gNuMTjxn8V@BT3@+gi*(oNS#Lez_1ZrLo=2aj)&K4de?6a!f)vBgdC^C zV$mQSp77-^J3J`8eED)-L)&s?jtkYF8;O_)uCPWw$OEkW(1+3>(g;udH(jGr(wrM?5+#;!2k^5-Z z7OjY})e~POnN*94H}VNVvQ@68-6TC5lUK!+16FlBMlAkA+iy5c!@0QmMi0LEdmrHF`TMwG^2Bur#kp3x&XU_ zatUu*3ykY;C8Ba@(qBG5&$v#mr?ncE(ovkOE!XOwSk*>x-$G}KxSmKwpAbuoD(+3c ztV!RUKGm4lh}}h1OGRb75t&N?errnW)POM$YXFRVF&k*Xmz7yF*5kvtF_u>wz^W%0 z%UOs8b`I=VFvAnAS|-JC_rp>jQtidUQF6ojyhg`x#aP@=P$7Ga+pdzrSD_JK5@`CU zs8URkKBL7xY^ks*qR=`D+GhFdJkd(Ga%oeTQ%mtam1EYN&I*e58vjG;Lsk;g;scRZ zo`<$hZdf~Sn0i^qbFXmF8o@_YNqEDm+6IjVsteRv3@FmLftdf|(Taj{k}Z@sxuJ3X zN?&qKWyM#ai?DH65*MNO!Uj1!4*Y^7XJjy=8()ihZNfsZgy&eG^K)qqR|YL5B_Xfe z@+47Zd|My^h*RY@39t+?3aSx;7Zm$xhRv5;>93g5Zd`lw*Ah9U*6KNsdJj2i00?Yc zyMrwA|Gdw zHD!)?fqWVN*lc0Shf$|Q7O4qn?h+?O=I3Qxc|z@uXvd~`)i}&dMJQ3&y0MMl{iE-I?QRE$?AhvfJlA-&vm9Ki7>mv( zJ(~izC_$(HXj3vYC{S}2Ea+Kj=IWV_SxaWRov>^QE4CT2@1>EPm9*bpk>!fOE-UhV zMA&qp;eQCKfwaRRIWvV$6v(@foID-qAUV@Y)Kw4f4Yj#JO4)$2Th9%sO|vMzh1xtx zAf4Jg|AS6y6CZ3-n;}ANavf?jJ1EqKtIs*pp%y@AQxvDRgW_D-o#IT9PjlNj1L>7d z4cf&8H>&Fuj(hR+)W+5kuUG1GiiF(UyA!!tP*K@vM3RiXRk=i{4c^V>)>6bY$jYcf zO+6q33o6zai;ooy!32^qSS%AiXpQke-&m-0+o5Z@>a95pdSy}N(D(e&$;Fc?Xgb26 z`t1yW;i<$7?!g%BBLn^L`Gmu--O6$+EPZKB}j=_>_K4U=IbJL z@!y1&%&o1mMlrSpwHH&bZKuywAGYzQbG)O&_Ol8bQD3K#=r^TH*=_AMovf;qSCnj$ zk^?bsj?coys#J1zF~nk81y|-=+ZUpTM9CXET^}i0ukK|O{wJ>4|88xTy)-Ag za7-xlz>~hWtoyJL1gI-#<$?ueOW78bqduP+_4~36sb}t#O~M1kB2@BQPjT6#P@SiW zi{u%Z?a2t8J9KTb;M6subK9tvklZYv;0aaMom_R=h_=v4btjJ-!SgtAGg(Hap!K{T zv;xVv@K9sftA4$gbhv5tH&8%KH*V53Rk|e=tOO!M;d+egenz~V1B0b%iqo7;rLeh+ ziiIIkU!n~#JoZcX6%q!v!rtc^5xK_Gk3e#^!rb-%wkO6pGBJj%v?sXP0_Zk$n$+ zQy(!GE6VbTIYzzgeaxE6bJR~+g@RT~FnhgyEiO7M!>pN=qps!yt8Nd`g*|J1UN#Yh zpX@WX^sEi_+ESUpWm=+IBYj^rM$#fltr^AI+b$Zy&sD3ALu*(mT0^tq)6l8qlX6Hr zU>Aw+CN4-yPV;zz*-V0w9{55S#^J_e{W1ox`XfV~ft{u8l--fKcO0@s++{kV_iqjDJ!f!a z@*QV`Q>O}LD7I<7fuV34^>XH(p>QiVyMM0x4Q6AMDauTHC@yoWPv+{OD6xkkp@-sG z5}2`BIa_)#9CVxEkkz;0BOv^Yq{ncs2Hrbc$#5i;kHS%+q5rXmBOW@fe3F~QH|oSP zb|iMjt{;g}rSA1`jFgrv%My_H-qOPzI#P_|q~5Q6GAu3`AjXDaA*jcu=kCVFyDR(I zJp=kXe%;+%L7;}=JF4;)d&;N-k^8H6MXdofuLa0Y41)iA^85TmW_vTjWp$^B3^-I; zZiGFN`GrQfk6AarTI9c>1Izn|3a#vcY_bkH=}=;3_S!O{n8Oi^8TBora;6&fqJtKm z#;Bh|T;wV3q=CK0rFM#<(D~*4!`w_VvPgW1BVn3uK?Ot*eF-TlMj(j3hyW)l#rocQ z6-~4{jV8yBAeJT_?8iW#YwgHzqNJ-hl^j~{X`NP*K&;rT%Y9xw3O$K$)vd|P2oF!S zTEu`e`$gsyWk66Svr58ZX%S#iDuwjRxb{!vv__4vI4o@S$Q6g^ci$Vm(ue zjvlg$bv@EpSoUPWiLYZr$zAL9I*n{*`402E+9`(ugij#f!g|g9vdJycdDSzUlgZ^k z2c|`z4xA1f4YxZ()bIGyUO84&a}S6A-AKeP*Oy6kXGKrDD^$Nme_34kn z^&b!=UG;Mm+nFKyg0ycgRXig2D_V@0+>nX%rX=wjEwX-v8q^io+sD__2bz!Y16eiF zarGdxtDI8-VPNRBt?nJA&ZR&)d*;P;bL{zXfr)she1@Cpv51Ym$cDO4kBz$U=RxZh zLL$FrdT9BDt<7_$$Fm*N18I1&;DA?C)1%eS?@W(1PB|1{PmgDr9#VxpJ;`M{YT za#KPrpEx{Q#PJp;pIphUk2`bJ`6n~~-6qH$XhXaVs~o;-+cz&=mZgR+v(DI?KfS4d zxs?kiknD)CjZl$V!Kko(e*sm7Biq#n$h^BTkhX2>hRXHKW>lP`AZPY@7I5zhhY$HL z<`gX|VxQL^4VdM_^YE%)GcGTX-HMFZJQD=qcwOh2zFkU(p$gG#GkOO5|1&&lOboS0 zRupZ-F3+{?3M6LDa8Cffi}qQ=^CWBMaev+NPPZ_8qQQl>#bQUV#3Gko$rrj{)Heak z&TiD5u~*%&4-(>T;B?P7bl5p^n6`=7C0v|jX`6^$Cgap(k?jlSbnOd94v+?l1%%z) z9_$KqdyKRFDuG4|I zG1pZ(*abUMHm)6Y9<<9k2TPs1#z)GH50<7#xpt*sybUiKe!KTK)E&N*b%#?{q{$s0 z1#hdzhxmrH_@g`GEsh@RNr|J2z8sGSK5{Z%Bl+mgGxj7CUq$=Kd2KCoOPq47l6z>XAK5)R5hSQ2w;y3|PC>tv*nRa9DpN5~g z>ep<=lNgJ3LkrG*>*Xi)?93B8oiDlS2f7hEt!>!Gy3N7EHRd>QzEN(%NDp(juiKQ7 z{F!_a8zSfZr_MW!q}x988*`m8D3=ax2Ql%JBm=zd>P<;;Ih6lop)7BhPmI<&8ad^Q zNOd>e);wCO%w$QoGVj@`%q^&Yon7i~%ZwlJdQvbup8baX?D?|&od2qRdeco|v|qCA zVxS>{OaFkUw16@=K=kCi2n(Tds5EFzLwke3Q*99;32p_5RzGx|ue>@eZp zO-&hbPUjU?US7xgI0RyBSmNGa`tnSl+2_2;>_nF0nzFR!%=E-)*!%qTa%OdHCsq~s?10e zTxl%sod5sI5c}s8mdQm&_X1mHi=+Jn&F(2~Cn`8#vY;7KME`>7TK|CRdj1#izli@O z{NJP&fG%JgJ2B8eU2VUCdwQ#8Bi=S$cqhIA^Z7u?#>5!}rb+VI)~MNFtRk^Bs*F&Z z&i1T2ryd9okb(sv3v~d5G;~!dgj}QkReu;G*1y?aJsb-$qSWCw*iD;8un16Vt5 zWj}-x<(pC0hnBGub?<`JR4qU^D5(1k0dTlPJw|}Gx6x4Au71O-!zl{}*R2#>0g1IH zv#ZnV`P?MNPvOZaBSPOBgD8Iu_u2i z8vB$-#xDKPP655953hYMeUQCEs+A&A<%iFcjQHN;jGlJqxN~ONKT9@lT?x>#Jyz5; zt>fhIpFi}evs=PZZS+NoGMyFeQZ0P4bLj&hFcZ7k zPo{UhlegfGxhktkje<&88!-WKt79lUI(s$~PPnw4xf4H2SW3?wEOw{Xa@*rVX{Cj; zfOeeHa`syN81oHhO@#i5*}K?|K875UTe8;H!p3<^#lERNA)T)H(zxLr0upnBSY1}k zL*m$*K(J=3I+U`oqIQpt<+NMFGPN$XPg-2$noRV&2dW(`3aNBv&3TzQN=Zz1vjz`K z&_s-Tw2|Nj^}m;}46RMekSgTSv^cwvyE_ZJ+FGQQAr>&y+>06 zS$1pbimcKzWU(v}K7ckC$Mb-+dLCjCnO&MO&#hJvOqv3QkP8sZFYavK$utl6J4bj# z{mY^^Y3prOl%U1^H?bha;Yat7vc%jXGD#60f0EYQI^**1^6%ZbK3 z?iPY#9(MyzhcKvX3IBiWoeO-_#kKeol7#?Se~Yq;)kqMcff$JfG#DvaN$PJQQR<70 zMoKT0TD6u+0={`{P{O*3Rd2Q0*0%Qg?A2PUfL3=C0tp}{-~*&W0L9<3Dgi1aqU`^B zW`4VQ5ET2mxA))ue11ExGiTm2XU?2CLpL)0E7FA2lv?K^Ic zmE+85Y-dxB)$k^Gz=BZp3bCgXX1lR+=oIFpm-h{0XXrm0p2r(2Ps@=%J_KJk)HIB77Hp0-oy>US! zx(yqoxr>xWz_}m_p5Mz;(>v(l)FFA+vEFHoX3A0V!Skl|E+Z<6$On`TpjK#BFU`4_CCI#C>{XI)M2*zi9E+G9cz`!>u1)VNYp#?Jp(1Q3SbJ_*gE$4maFUC43t z3cXyPVD;|s(yR5SQ-HCTe7Kip&^@csnPgSq4FxbHR?l)VuyEw9&-09<>J8FCHFrw& zOrClC@UR)|6u@102>o}@m2uKsiYD2FPU#+X@2$6xn5gOH-U+Mz2fr_HS4$W)Z1_Ar(Y!EwA9{BfEYAci`M{^gOQS`)beVDbmY z(#vsgtOdIlafblvW|~R@VQ*}kDvvN?WH+mrF=(JU?dKg@T>SshRd-}}x8ebIRVTTo zyMD>;Zu@+OTx=Zk?aWHUn#)|G?x>8HJ1W9Sr)Ihm<1#I%y0P^GdZx*=65abmqq;XYTWo!F*8+ zRszREG{eqd02~}M=JxR=foU$t*eZCvtwn!K_7r|m)w?v%=6Nx>sQTkdM@jX*s&5DZ zGgV6UAOvn~WntlMeH0lGMH=#ZBA=JaF12!4n&Cq22{P~#p=yM;ZXd4&(%>5CKsezO z38)x0LzK}NW>VTL6nG@SZ&Bc-fUh>kTmU$-NGWK=km44}$TMYcaHOlK?iq_b!<6FnMadz{ zp;fSRP9U-u+9CeEZU1iPcO8d!prR)*JA2Y1-++=8cL)DlLUf-->-hmlG;~3zF1!o7 z-G$YZ+f(;7{WmdCgO2Q@VRsuP@#C*Gk!iItHAhYUlQt)^NtJYCS)+f}G0b%#)qi*W zHec7>fl8g#K-WSiLqr#|tWx_&bJSp6O^ISn)@JxTqGy0Ll{MsO&k}YoN!CPF+|CC& zHp;`}8>I2wE%>?|1$ATwTi5vAQhn=3hs5m)FT$pr7(>4?bxI+ABQfZ8MU-S8uvf%Zp*Cr7^>XD*z#BoWxdyW^eT6KCEzvbV-xfR5}5m-IU!6X=b% z4jZK2#mSsYAJX#mm8FsZD}J%*ecyqnEg%5kb z!AieOyz4wGzLmy-a&KP7VV*jR)T8|bS52=K=gCr{j&5Y}V|FM~^Ue{eveWe=8Dxye zyX1YXcSY=l*V$K$$CEM9Wx0?MQ$G51kFMOIq;QI}HXp!8La*OH1JN?yjshX6U-fw<3> zI?Yp@E6GBE#3(8bo|h7Hzx99!TQlRz6r@C)zQz>931u-2=KshvhLeCX9Il9w-DW*a z1skt5Af?&QAAu3-Z%?kw<7m^_=i@Xk0E~QN)~QN&f;APs2mX!^ukD)@y;^3|Nr*`2 zO9qb~8fjGZ!Gj!&JOg=b4V&@eb!)b+LBRgdMjxL}|uQe4?14i{-GzYa{RQs_|7_z=%7LRIAc9iZ;<832x zOYx?YJt^KDREY7@I=0LsL$gMCsMI|kqr8ohNFhSev?S}w5?!J{;2??s_yoY34ii6$ zIyAB}6*@yA#M1ln`go<2^#0tMmK05uP^kv;uQCsNK`LWXm+tyi)zBqe)k%@=2idKi zs^b?7L8@ba_zP$iqk3Ma3g}}@9$iX)q-%V%Q`LhMSPE{8+&ycc?j(h52c&Lle?TWO z=@Gkc9#S<}>$Dqehy5pE6mSFuJg|!b4xu}&HL|HwAK#R)^=+t5x`(5LWTI~oqB;TX zr3-#IshuuGJj9Xc|Jm@U7-xA_Bdjs{(oBG@`IBg@ z>=lu1!Z=aYkNim0acN146%@}#8)YQZ1^hE}a%h!3gvg%Yx6|bSD@_nxG7IT9k>xY8 zqbNDLiKfo|?k8zUOAeB=!loO}kaXKDY5R&#X_(Q^DEj~=p*_a8FOmNNC|3rG$}zGd z(PQFPf#wrPBYTHxZAh z6Ks>f@^E~T^b2z+r%KurbXvv^3)Nv{*HMN#BYQP5ReveZ7^70CXd>VvI(ai8>-cu^ zMUCwGXr^STQUR53mn`tn-CU06K2-G%Hm#rd>c3(RJY+EZlRSz8je%zWw&d`(l;S|G z$KQZ1$X@b@iwCjL##A{t^BBbqz^vj4n{b*@+#FctZ*_%_jP<8wiA8u~&r0k>wA>ban)^IY)b zV-7zTu&Q>N3!I6$z(hnNvIs2pL@?UNB;0u-$k_G1>X4i1$r-;pOopd-4%|HwSQCw5yK!isKXtfcJcS+{#LmUh5xw?|HlNpFZTxt z`xMKV{}bvgF}zK=Bcq3Oe2@=CK0PtC9~(B8aK@tSb+Z|mdW^3jdpLXy^74$!9jYi< z7b#PQxy$ii+V4H=xruzhj(4K80SI)!riM_?)|y>B?Q2BI&tCC)?>p$HgQ4Sw$K_U~Z+x zEX%61pqGviQV}b%o=}KLt+z4xV`K6@Bl}G<`KFQmu93Y;hSW*`jci6rx%1B|jv8$l zI=;`@rv2U}9B^MogL3W*2O+dh+B4V3 z%xe$AFJB#P`z)%vkt1gu9H6V>YKHMJC}WTkvsJmI@NFGSNJ| zoZUc2X-a~ZX6jNd`9g?p%kY07Md1wE|7R>9a~|b}GpE)nJc{sfm*V4n85ciSQQ3ms zRbzOM!P_5&vbwwgX$#rAsW-zU98Kk)L6xYGyHtflQ@z3TW4#O7tHvM~+Y<&de;5q9 z)}x$ejXF*QKOZGGdx}Lvf!IVcAns!~Lim$WW;im+Gqlw+v>|7=|6sxGg9W`)s%%D# zD$7XL_4kKA<8a~dAAH{kW?_+fUU(vwc?Z`Xh{bM0+p!(-`&)p0pA?x)B2s7b4)*#y z7Bhk^*iCy=miMiA)x>?0<|Zmhw(TMQri44y&;7$5C4MPy4Gs-;bQ5!E6U=8Rg}?oK zvtX;2KN1f#=9=N{qXeM;yIgIvd)DB&;$!CmA^rYMORfTMPT1de)|^30zK4B8cu|A7 z9_j6OA(_qQD2fxj{Wq93kEk4wOI?xP1skiVa0%P%wNSOMuXkATgTCY^wQjtcV*2v?XBPhh-}v@4WS*wRmZx&;koyejs2N4 zPM~&=X^d!8gf89FSbJpogF2L@kBx9Syb*SU<$DQfp<38aSFobGoUgiMMV-R7npKlcWjPC| zZ_@;aKM-ni2e-(uP9K8j5*<3jMnb8BR? zM=t-s-tP)bqO>$@BbXt9?Lx-mbOnx=tem}?l&X&8Dngq6tra^1&gJ}XawS7BY==Tz zmpf|2Q#v=vP#BlvLGjQ9Qn8-UZh&?8l0>-L+5-dKAjyH+r&OM23Yzi_if(cye}?HX z6h;0zeYFYxh4gX-beF>Aa=s~y%x*y7^t}}y0`4>4OG~0MYK2yxDz8b+;JO_W=GPW+ z-OgkjjBny^Vu-(spA$abB>M`Ue*dPYh4|lo|57#Zx6)%Tuovj5z_QhtR%<$BGBd+1 zqvSk5_6F*|yyMPapcWR(Lv-Mr+GPSO^IU_>b1AF5)0pkHj#4@>5gScJuI-FZ1$4sK zIWJ1WqA|XDCCx3BrA(#>esfBPHspuATqa~O%vpsp&Ew5!VRNYtHGn0gWt6vnI65Z2 zml}-ksyHdbTLJx7sWXtAX8&hr%{eAGA?96=fE3J}t*nEVHzn-tU+b+&IwHXU6YtDMjA$NsExREy7X02_0e9F%arkrs8vu_YCWLeLuh zyhG=zN!b66bn}zv94XxlpV~k6t(Tn;Jqza0=%Smcb~-aVA{t&}*`9Hwh3+ks$(VnJ zu#&yT^|koCB|iSa0#AQof^^@95B3&bWac%NQB;L{p{fd3MjIT|>BbJGZI|LM8QW_~k|}QaH$oFXIbscL&KeIAM;RAk+(;3}?DDUzB`v7G#& zWPeMqN+dtCo9HbeAZsQ6a!gUj8$8C~YDy%MukMFHV9fsw4gm%=pUZhM$=O*UJFbjr zI(drZ%AKw4?-DL6I5n#_?oLDd)7HL>q1x`w(Z$Hk*KRi9Qh~B?yBx2<+yr(tc%*7b zR~Bg>96_Jppm;tJ^N|e4^Gh^P_%a46v@Xf2<3`X>jz)|d27{X_DtAAva911}-{;;y zkV0z=mUv;DGmo==mLr^+?5ze5+;s^9B#PQh2{wIj#?r&lm7F{QJng^_HBK%kaD58WMM(ObFTAP`|xAcZ%4f6(8`u$@doFx&NWk zYyVR-0INxFY3@`zE4gRKEhoh-j=1Hc3shmB+*!Zgw>*0JV!?DHfs&F!a!VZYqPS&D z+>)u`w%2bef2)3Pd2Rz7*ZTDp>&U=5a@D+i+r~e+qa;v&prW=cKcvS%sZrvX4y2Tr zTAeIcRIjd!_a`evsUr@SGMcyQk<^H`=(h~JM$!wvk=CD#(>EI%9=h=uGn8CzuG2=trY&pQ|au)(Al#RL#@t~xQg9~Ch$KuFVsb&hI(^n&r zFgBH>16nnY-YI)xjm7MRrL3NL?ZP^_byP`V!<>=cX<<<`p=eKyFi{s+UQud!m~}O0 zEjrl~2;19i$j=5IgCo9>pGsMU#!obDIYOjN*~pBPw?)pTE~rXscB_lSdyjD%#UBwe z9|Yt5;pf_iOHDl%E^1SjN5WG-#Uh(ODyjkS@&+S&H#ac7CTZ7Q;ii4V$!ohR0bvLESjc^CeC?W?f@Jc2W@N7?j+sIR8qFfZ&EJER zVMh`E#&jc(p8mggPbm8xDk1mL6>>h(qRzr>0V|huRp@Kxe(PX5?+C`B>yd`Vdl#E)w+pc=prt%l8YG2Bthj^tfb>54sEZe?xjd*%RV%g}wLr z5gEhjzEhb(-}>AScd|d5u&epuEzmS6(pHh8BFOQ!46ID?#{m;=fQUmMUXq}re;ldp z@3^-tJM9SfmXbF~cdzX4WLpXKw}+!W_fM%0Blu%xV*l97f2X#dqh!TWdkGPds&!us zNG~iI7h!Q2m#jx{VcpF`_;-wv*mq7NcI0;c^n;&qdJ7y4@nmKQ;2l2$hKhB50~fo{ zW_F*l<7@_!nlE>bz~5XM8pkv?G#qZHf0esW!jFcKHfDE|opBlTDgLq{aa@BP)82de zGA8IS+&+iUv4m{}Rz5Zzup-$_==gGIQqIYsuTC$HTx@ZAq49$mv&zJ9|7fC0CbgEn z=S!_q|FyTDC`+I06Ug$Lvfn7^v|qWE8+WHWZYSND8|H=2WJ#thlsL&;-y(77Pvy0d z6?ka+Q`#Y97CHtJL+c~MVJOGF605(XpOk@^p@^*G9dnlWH53ON=RxaQW1(UrGZfa- z9ZT?;b*$9QC)lDD(jp!0v8$0teI-&Fk)q!`w7sYi=NbT{24BEbMKlJ_1wFam73%D^ zi=V(>f1uWVDsg&Y$v6dzqrT;mb@lCZmVx{`((y9xl>JBK460@E@~!P1{qRBwyrZ2! z*(bGgsJ(pqkNY>L)E_vlarw5$QpZsM)JMzR+VnMb?kDUlGQKHMwnd)ID2ZFHi(AIW zEfcVSqgJ*|wTXrwc)n`*+h}nbeiq$;EDWq&9=_I>Ubj3v)0bL%`!Uk+Wcd2#`gXhF z7vI`XN_96lXKwA@-U8YLn%c-LRdcf6=x9F)mG+y@DYkVRvH;PG*`KmebWV~S9`HE| zFb}EU-Kzb(63LWECv|PV`u1I+&h4$@AL*p@{{bAk5LxxP%ZuzC|4>e)0rzE8r)ZE4 zX}#)09SiVa%YVBVh0e1vjC+2}lvrBm7@-`MIE?CpbYWOv*otwN6^4!K)p&KFVi30Q z2^TEm3?fc9Hf`sNvV4AE+%Zxj4XrI33X85`lsDWss!S9z7J#BG(9Bb4MzyF9Ez1de z{cWR+;9yB^UYj~OubwXnEe7$Me6X;ltlv{=oL0NXYm88@Hmxfi>b@O`2yb}RDDS+T z!a(-Ui-=K{((JV*(}HVMWn^c44@mI5&bNmT8ngV1>Bc2%_*nibpjj)#UuIF*Llqxl zu4R4@H_N9FKamRc{RNl?3g|4>_?Xcv-ry7S9lp1LVcHz&P9=OMhi|_1UHdO#4hy-G z*{9g^BQ*1L<1)u%_(fup+3xV!wGq+nZO>0E)rv*Peyr#{c5Qrlo3?e#e;eDjv`o)R zN}WD7DYbIXd&tl76)Dm$FY?Pn@e`uTGfd06I7%_68_{rNrb<)ljPR(l7=QLKA1C)s zT6V0U5q;!Zgf}jThp7a0Wiv^`^D>3Zzo#Ek9_Ju%MW0WUKP(U(^Y@SFvRoDy(b0L! zr7s^55B-1Z&}KYtkm@q#yrA}}SoE&bKep*HMTwk{E{z^9ziQu1{^bf0cZ4!U@p&FY zI6%#p4Q(>2Cm>hCFufMHQ5_UVzs)dR^DeGhda4W&aJC#ftr2V*dZ#_q@THg7FU z376V3jSSPVzak=0w1BfWY@J5GbpKgljXK{H3_)j5byK&!k?bZ8`3WY2j<`7kIX*XN8<*t0IiuqzCXF)Wo>Gq$SSxSUTaQxR7-5mvF2@D`$F z{7!}WoK+eIKLrOJ@5`8{!@j^zh%jMrGgY{9+o?B5v27PfGKf!(M{6EAVh%#>-ihQ$ z81^nXT!5Z)ja>#faBQG`+|F>dVZx7bSyYMRAd)AtUC1+sI`&{EjO}ywhC9PGQs z{(gXDjOnNd=r-xBMN;QC<89nIkQqQ+w~A~24(9Sb#*PmmJq{E}LuLHsJasN3_3pk= zAu4CyynSne;vprfqTG3{3UoE)G$>lxM=SZ5WnGld<@kjT%$TLktP3N_L$l zw6ZH*;#hpbr}5!u_+A&A_`Be>IiEd1$BuK_nFSCe&K!))-bM;#9;R#{s*M~+NpmPxEXoKGZj5E)BIm;9Cn zGQ0$r_UGPzWEa9^Dzu|Kgg=B_jt+n0&~O>kZ2-{x?p9^GI1Jn5uEs7?3)`caZ;hI6 ze3p9yc%=g#f=_0JatNzS zveLmt*hjcqs3XRYoSeCYZw5atF^5$#yl`gZ>MC@8s-ktC!}R?1h4S|~>vcFN<1oIA z=8ibbXEKMmAcb5^Lc&!jcg)k_%pE=kfluZT>G(ogsqpWraFtFIS;gP?IUjS3E9+Cr zj-9NR?_e%`oBasR*QKm7Co5?oNs#g}3)(ZJYwUlkXnHP;?4r6BoB5%#zy=y)JW?^G z{WI>uC>z?qVs<7ruTdN#Y_fz6ZK!lY@?MLb_uQ%V$W1VeiC-$}r<^GQ(?6qBfy!dI zr=8~H;s;^Jb&8*(;{TDQo9sEt$WY`Ak=e7)9~1cgKy>hZE{0lMf8Bv^rSfbr7Mw&j zWS?6b`It_u&NBn8xT-A(m z)lG*h2r1HFY(}*x2%=Zspd7aXLqXKRF?XR@B3$kQLW%>Iqw3&{BRjnNA`E@C;PubWmDu{pyTZ$ zou$xmk|b#qE3@(ys`gSmNc41_sIlNJ@~9GwTp~$z%wJ{sn}AyZZpp7voUsWj+8gL4 zyTt}SLr~G;M#%inHzCt;Li6k?4IPt1=xymvgjIO7DYoywQU z?B0DUv*+57h3;*5*qQBvXCkvt(fo2^Rie%tsrY#kb3w+t7-)HN-i+C$l_=PHD-B7| zNL$+>`B%k`Y>@zkkNi+`)4`$pM+G)J7b=~hO;r_#U?&qFeM;;9#zP|asYK%K-xKU| zft@X|-%n&H4lgZNm~oP%ZxnB=Je6KNKs#2mg=Gu+GLdODT zYJDZO_Wf$UXL9Tqe`LKx04#1clGTd8n=tg)+ zyzes`upY7ON-@eKHirCvnj(&{VF{*E8 z&eA)86Y*!F$iVO_%3qGR8-&WQk3`-3B-ZYz^AmvzIv*!8tHyIs0QGw-wk@A`1vEYU zvB>gYT>(vx?Q^6P)?mWP$`+dbszO*!>nq+xc)@u*vEf>U>bLv02s6#u23BR+61S{~ zTckZz(EZBN{^V*fngsWB&+J{dwu!sCy!P%`lPd|w9j^|L73xDj`hN{Ywtv$BeCFIt2`0l6XKkLH1oYp z`m4yTBTOK~v{av?9($qF;9ogcU=gxfIT~@;^mT_@IFS%zZGmzob(j)Txv1Z>r%lp1QgzFnr!`gWVz#?k||-7&vYAC4PA zuIX(eJFbDPrIAFJ#_4T=x(Fzn-WL8@mAi9#(Yrh7ZPr8Kzu9E>Vd(A7kt1g_vh4U$ zk!gt>L^23bGk$!2f}Y+8tI4LP8O+_*1Hy;zVbCag{MkdpWpphB0C^MlTru0Tch*NX zxd&pG0o+vI482|7{8?@v`dq*o=FQSA?$nUG1&uZ6|67 zG`-y)o3Ze>vMvT3F9H*%w;{G;I3c?gy?sFJ>ovVS8))XG)`XX$w>=Wsrni5K-KgFr zSPR{Yl|!CdCsGa$JrfR5-Vc*IDplz1%OGpidMET_ioiktVQBhs4;TIQO5;3E;n4J> z;4`Wn)MVsw1gq5gB=ln);KWZ?ph9dtkB3b^z9V5a{Tan>R97+aNz+QbM7{%_czY)B z&D8i_QBeioe_*rm-KjjGA5RC3@Y!o4Cny|6RI2;i0@#IqJXPTPXUxFR4RtIwdlfB| zFrgpixnzy&jZX9|C5v#cUf19jY(}-vZ`AUcL^P^}epJ<&$v;aJ|L!)xSjVa`tju#* z$8J{$75xIfhZ6YiQTXI_8@!*=-im%)s{%Uc$Gau0&^cSY@A?7ok!t>I`q7K8G^3&) z&&8qW$Dvs868fabe%wr0 zV)rEz=ERvA^&Ke9|86&aT&3uW9Wz(1EOXgT#S(6lf zxmgj&Dt)F?hYQ%qD&+@jPw3sZ(dHm1p(mqQ51}VtjE5Iztj5|CJ^35_$=pXaWTE>f z*zC-`Bw=yl_YivW3<+J3u?R!x$q|@cT8)CNx0akuLmjJWb(sR=<4F}W@`Vt}o#@G9 z!J(@t9h;pCm5$JphhV2OKO#C&E|x@ouZZqA{+?hf1@=^dU63Hqk^?;7}b4g9+X{#^rIY5;kr8~tN{yHFh!UI>W>S1NH|#-sH4$8XJe;q@BxCo1au zU2ix#PIxJDd8R-D{30OCX)fG`a`!%1v)EfYU7m?*Zf(Xy6{IiET!{UvF3%JSeEjmv zH*x&kFV83)NbpE9@-o#)n4F5`{$;Q_d}4!4Ipn;D&pwJuT%KuFFzOZxarEVxXSCl= z_-7d*ZFjdSt}<&T+)sUZW|j`2u6npUQxuVBM-%)weShW|jl+4GiphP|lT=Rf>1N4db{TOPSmE;e+g@95q?ASW|VEv-S;!TN36W?0VHNO^1I_iTz3bO${sOx;?m z&tRluCG-0J3!FR#(QdAuIa5Jq`2ULr#<2@F_HAWYHj8B#dvp~pGECpYM;Biw5U1~e zX@E1*pm-*~>;UQrcjaD9seqIFAy4K`#Gx!_#x2LkElC<~y9(ZZqQGrjiZW_d>52PJ z&L5D9;m@~edbtF1q4JR@pRJ~0lvFOkNP;(f7ospXqA-zkQ{3`W-13XKWdRmqB(A2s z4paM(t0|KdP(^L@haL3`{pmIZm|HdvirM*=4T-0#6gqC%Jej-m1iJ#7yn?#3O_RI{dd!nZkUYZ*7y~D^z%P(%!(3sdsv!mwQ47mXmHX=gk}~8&0b~b z5*p|g@hg6ko?R7{FY^0^ls!$g~*jxbgETZY6o{a!(*9 z!mc}_3qNCj%AU1=@_prnpR?q`&lz8K;Rn4g`XO%7f1tA#z5H*#^3wxa5>Toj%0rRw zs|q=7jjHJpA~(~bZoLe6Oo@Ss(g}S?2xeX-Ok$kytDL>y>4d3Cf z-M+CO=r{>@?e>lRxSRhMHlEQNRE84pCCcp^JN5zPPnt@P#}1tbt_4j!VFX+pZZl9- zqHGpH25vt!ohZfNf)Fhf(wA_#EL6Tj+@fv67gm}n%imA{%0vD{ONOsbx~jU=HuYyp zqXh^KxilnW^j}(z@as;;@w+ZB+$RI@tM9s0yp`6&U6<3}-F(=)E}6$kn{n4=>Yx$- zz`HJfGDbgfKdelB*X7wx_PT`q|H56D@3yO1U)|1u&^!E%9JSjK-Ppdk61&zp$`3Wy zm&nsuwW80aFkE$ATwdzh1S>JeCF*I2;84rY^JhzQAeiEu~sCrQ8-JJ>w zo^v2gdB}-;{H=o$`C1vLRN$ifInTw6j-9@kSt-OPN{$>Z5D~Tl3BFrp$AQdp zCPI8_u8Gr^ToNnE4_R)Jbn5|(^p=6;hHUHR0b5{EABw2k{sm-ZqP&sEV;(?o{F2dE zXfXrF%b;OBUSZtfW$6(m&r7BhTsr*bYm6e%^^Cg5*~gko)(y#@bL+-lML1D=74pPF z(GqjX%g?WQ^_*{=D892#GM7|6{&M8yFWdQIk~B40ztG;a$L|*x=gi3QkTv{+1MCia?oQ+Jifp_|}~e7A3N3u=jQJ`&25f zhl*GG2e9ZZ#KfJlvt$dw&T@BgAQXLGh07T!`V$iS$GgC0_*c-mWUF;MF3iz)h`D=m zV|{pXjQ!a=0(9rSbWa>liQ}$IZ~&QgnvRk2zDNcfC~uNO@T@*~iY4P!e3j1!wk6|{ zxKEu#*ggd*fO2FH+8<*7Gjgn?UpWN48Mi9DzN|`RPWcPs34h9%EspKwD>)RW1M}ad z1J9)plELGFGW@xc!S>-0kFw2@UFNsNKiD6C>zZS?AgJQXy<0LtdH+*P$|~pNJF(Bo z#&@j9m9U8nA)L_69=f)^b#h}guiO5a7$M+h4w4vaRSX|75G}A{NUgBLwy1}Pa{nj* z96A1x!|CPQnxAw(61Vu}xS9&xWP4=Q#w}0AEsF&tIt2|7KiBTBijcn zFXbp~w_xx{8hd?jBA~%b1foyk8`?Q#9UJnWyU&pDX!#q_tK@#uUNlPVRUr?%kBf&) zOq@q41TzckcV9C0+md`;MGITx_oWP5b#|KTBbVfkw(~f4xw33r`h_(67woRz;1gLF zre}~iOVyeEWPEyR!XlXxv^+!gaqN7lJLe)v1`ftGn2}!gb~uqgfj0@c0dWS`*l!7} zwAcaPipZ64Q^a$O@}yD3)3jME@%hdway^$Gv)^O%v_qn(gmy_`;EG9=G9@rrW5m5KF8k09gv&BDvKL}RL`Uc*k9SX{q z;l$(>9K7}d$zV3Jg&t-O6J6%z2+RAp8Os8(Q*)|vuj4?T0Ow=c6u?|l+l4!odz!W* z@QNIsvdgVakv8`^Ch0I`AEoS5fb&IpG~|bvpOj!Z(@-jub3Y<{Iu{)AXFZw1!}dEG zDVF0+jU%j96VdW-im<=qPk1XOLrT;Z$SFwsRseNqwkY3My7j?GWFi*zE1YX6ZZefz0uVjd@*5@O;X#G8x>8io+Ak>B{)SQ2WG2N z)p~FSDUO&(lWC5a>{udwaK^zDJ52Q7Y$0GbR4;6>PCT&DlNPBZVRUFE?dN1Z9KEBO zHBXikXjYeF11`~8v%;9)0;wbOY?VlNsU_lVSxl5_Z(;TgHqzCwCLDM9A}UQ;Bf_x;?x(@ z?jI%zk&F9>>1>tDO+4qa$5c6+zQm<^T3~ zMr7XkJG}uiCUS&)0ygL_YBz~Xg09HUjfu%NvS@>{M^5`#ndB`S?UFnfzb3jlwlYcX z_*z--!6T4I1Vv{|X&}t-3OLWa#wjOX*}SHA;qXIV(~C?&%MnYNsq~|#p&uO`=`(nh z?8Z#>-dbKs{yq7_P+y zXH;EUI_8E!RVAIkPq4w4GAAGc^$wY>8SnD)Xz2b8CxrGl`CHPB`)gsV-ydE$G25)U zco6mlA%IO@CY@eflNbHD$KMz$uBjZB%`3$6ym)5db@&?ntovKQHm#L=4adgZXJ;Ep zy!Q6-j?FRackBZLNzvQPz{P{i!acJ*#RW4}{wKODsZ+_n8B9OR8s1ZW5a4{fYlf=w zB{Px@PO2mqf!AfEWvW~pCAoM|&4aTz`7~n;&heS~A(JD{B6(BSly}u8$-8ns+9c0& zMDNP|EtEzH_aT@KG9#M})z0JvH8wo%$VW?iXlYO8LQgh2&JwJhu5V;!uJ8<^0ov6Y zuMB4gPhdt}{;^;D0H#fqlSw$O*ooM|oZit3tl?XwQF-u_hhP^fu6Pa4LoSqg!mPQ_ zC2#OOyA6RZf3HuNvi8asD8*?Qk%RuK2?~MEfNb6Mu^@ zo2+k??&@_}50l!8@%Z?=KEyZora?)S@&KU!QOU;_@rsb~&p4bKSS3?wDIB&;X?NAq z!#0!iZVW#&sGqbXp2^VT1+YwOgC!*-`m)FuNl9ZSrB}MFp=`9|X};j3JCN#4U0sBDd#(mVx92p}-TSA}P5sj{DWhbPHtzm(p;`0oOu^mv zUa91|HT%~Mv2APC_{ZjcUzm^&gam?oNSf;H$xA0Q5e7c8)dlLOC#7}E9<>fI!I*)P zCtg!+dt-Xl!2C@GS1zga;Q6TCnWCet{C-Mvd>!%fh#i6L7px8#;1JeN?n1f7XLnfwMj_{L}p>LaR(ku zCup3dX*~L|Wtyv~j7f?m!Sn{K(wgtdH2c{F!C}dzf!!VQ4&K0KZ{RPbg&)p7P4NT0 z%VyMUp7Ov;Rri^J^;EAnurlU8&SNAk2${x(o6VF@&BFb&HkJnJWg;rv0{R6XR}MCF zwrF_;o&+~u9GJ2&J!PTG3>GDO{Z?|-PBZ5VZ{fk&Kam%Y$%ee?_Id6k{3Zjl_!+utTJBg#k1t;13U{;2Q2Jo1~1Y%unyM<`rQ*c^CWIW zaHHe%La2j$-bSe&=E8?ZpUdPeWL~RpaHM zE^jYm{sZ`l8cS2K);u$;NSQATD^TVu!}2goYhD?aEoSiMSefzc!P1oWe0BFH6An|H zzm&g@7VzfOd-v}%gFfDmJ&nb}9-<0g!KC&#Z zwluJ!wD6P4VTtn6cwC`rGIQ4R@cY7Eo`q@NSjbC?RUdTVlC0afZq>N*bb-nWcU5MU z1zs=9c_Ys6KTLnS?4#mLIR3{gn_jYeCkfetPU*w1PJfo4(jA+&e4Bo3hy~ z+&pt=M{8{?Z0D1G~IA2hGBRv%16S_MNTZ=4>zv z58O~d=FPx6l_!-3R+mx@hbcd!n1_G4T>@}xmr0v>B4;)Imwm13Jh$eQ7JfX_U0Oq@VPL3EW5&?) zPJf~z4F4}+y_N=|krYfkX1ZB<=wCIuf5kyTV)$n&&@Unz*vgqaGbDq`e2UUYjq*-KOoB3<3ZOrqWcTK|SnIf-39Bz{M(i!OgULf?EkEw9?S@u-O?v#6w zyvM^fS)PUWw`GK0=2EJ~^lRlQf7RxvCy+PfrWby>>#66v3T_2{AGs%(mXYoGPo&a1v8HM6os zRMmd7p-o!&a-IHL(LcvU--#%s}pB0arTP*7D#cXh%+VfpSCkqoT-sJZKukg zBYKNK_LiXD(I1JukJ$S}r-_}@NGbGWvG)~wUsXBn{lwl6ac=zki@kp|U+k*r>Cscg z?i7D#^aQaVCHAADhS=qAqY+Kv7C6&RZEFfHB4`B`%GDsuK&ujmvpQdFToOO0~4I`cC})GJ2s=y_uFi57~H7DegH%+LBp zbH(TvJw=TE(ZOP*M+b@Fj1CavsHjxfXR6TaP$$Dl`HKvk%2E0}_f!6UP@M#QQJ`;b<-Cg`>i2K8GOU|a`?{V8^c$`cRt?*e3$Z7 z@J-{phVRFGH}bv1w}bCfzSQ%FBpt&ym@kL#Y`*b)7xG=f_kF&Zd~^5$d_UzI%8(kt zcLrYp-#ET+@s;si!gmGVfAIZ)ZwB9NzT5d0@ZH6CWTXE7I#dTeV&5ri~S)^AhmNG6L63k<7`UTV6nGgV#InP$Z=WSz+m zMR!^iaLT@RN9u9CdHfGYw%%NF;lKELvse}2|L^st-;u00AIOdJFJEt(I@RU>*7c_H zh}N4sN{1u``R?a?nD5toPx3v-_Y&W$eD!>5_}25i%eR%!;yb@=NYZ6|SMgQy`T6eQ zdzkNWzCZB2#B-^oieMc=vNN(jauIr4wV3EY5WV}J)b@^()q?+R9~@t>1)+fmk{j)>7!^Uj&G zE;eV*PV3mca1^g9;Cet=f&Z%3B>z=;N!D79Zskx$l;aW5YVGC3Lp%m(k36fLGZpbj z!Xsb==gsN=d2H-$k^OUKm*b~|P?CFiz0&yt#j3l|37K==RtT`BK`KXU|X!`9%GrfX}@&1tCVe^Xk}bFP2a zxiu*YqBxj-oG0AwU>^chaY_Te#VHe0J^Le`l;%#cSDot#H0LzeT%3ASzu<&(J^skK zHGl;|K$h^Br)TNYPdzol!@~mjDO9{68ZJ&5pXS+bg+J?M=OUPXktfg;-kKt)(gf8Y zkKYy$6A)o^jPplcAz92N`1b=Ao%JHuL($mJL2j~5e762qRabPs{ zykKf_&G-}ZLy@^G3#R{j!!kvu5K^%D>v-+vayStGdK1QB#@oefJI347uXP`9bwB7~ zyqS8y9p4c%%A1F=5x)C`nl;DtnzP;d#V#3lc{056Wc>NB%1p8@<64Of7M~tw1=cN) zZsKvi_QnO*+OjV^lQdR62Dyned#X8&ffT&7)y!dgUDhh2V?|iUD^kNS z-H4XD-DJWj4;7;YB#v=XiX5pOu-kx2L2k@|NUh%a^w#2f73kC0Y0r!f-q^hi8i zp=2bMWTt@d!T3l_Rr$(k^QzIvfL!PegkYxa-({w}V=}BnJU(oVGdsp*U&f`W1}2~Y zmNGKEj7*+J6UfpOp0pgFib1e<9+`bM0LIK3uo zchjp~-5(fG%}!Qgac+^i#`yK(;$Z$-bmp~x_ljHzrvx3xu57Q;utaa+%&{btlmrx zX3c{kh#u?2CCqhgy{cS6GiIHZ*YEcT0q^!oC*rMli&-;3iCM(Wj=Tl>S_l6qJl~-lVRtE#YCF4Y9Ir%h zHdUTNJ~*dutn3|g|0R`sLd*)bvr0KvThA$MrxFAU@o)sH=^v9g@Rp;#eCfv!S`%E- zcQyX|yW)4-_$Mj+U2>{>c1M1pqDL_5q!XWK22^{S3pQ1rHTRaxq)LaigB4AcBj};r zZC}i$FsH^7i~IEryc2Vm(`0J`Z^Yb1V)>HaA^jX#hxTRJtgOKa8!ZRNn4C8THdyz) zAlcefl?vPA#M0n+WMB$~#IKo|wv@Axq?r2?ht%qk(D?D}2p`EmMBiELW`_*#sOK(i z-cK^}_1iotrAwR7>m|R=I>SZ5J zC9S7q0oR+Lo1o>2AWAqKQIdtFLC2%&9O@mpQzq5M0bG7#%>5J9h-&g;>V?i2?~1vD zc>3F7RcFWCKO?)0nMpDYboArXR3Q@m_;<;=OxE*~qc?y=3aEl(bcCkF!n$|N_1$n39WdDQiAqg25pIp0)5K|#k+%$g!4 zMDfkQ>oViV+;^)MY7$wR(ae7o1|(Btvgs)CIjV?>62F|JOT6#*n`6;q$QPcOBa^{@2>CZERU%QhzsXiXX~&ZGb3)!$;`TZI zKoAeQ9)0t2psF8ZHz4}&AHh`$ilL7AgrhMyfPuzfUR;;EEDglSx>{n) z-=-T|y%O@G!WDJ?x5NoL&*tq>uKs-taJ_Ly4X8M4^-h=WUmq@IE-P zFrCjSGp-=NoU=3iNcR%u?{m)8;VnpKi)Nb!x=+SkIt=0E_#+^$+ye54`x6q4kSMBy zQ6{_|Eqx?15V>xjsM*izrJ;7X8q5z=In^@>YOIT8myJx#Z)^lJ>yNy;_$e9wry1#4a!&kdDex*W7fR zr^x#agLHn}E@kTX8y*YOn)HJvdW3$z;dw&2yYy)!OYWe><#nn~B4^H1fG!R=29ptM z5knwq#=|8vTZcL%^g0P0(UCr{%e9BN^mrVW7O|{FWo93pILCgAJLOxQ2ckSvE34+6 zHf#qn`U7h#tImBE1l$G8eH_!MPNt*QH}CowA9~Gi=ry9ydbPkDsK^>B@lb5N8q=u0 zScf{_Qy4a7d?4o5nR}D#x4zkkUeMbc>Njr6dPB#_dP(BU|GnK|MJ2C8LQr`91@Y*x zckm#q=!ZtpFrC3lykdcf79e0wRdavaS| zQBSmW=^BajjDl@^I)Z9t-4Q2PDiZpXMYFPKvA$8o^vNAVxge@~V7xuRkugXmQ{l)I zbGvUt{edZ>COgZe;<<7qKioXr2*O4(&AZmzY26O6SaLs;SkdxkR9bJtx%8%FWWLm(Vkr^ii*nxp(rZ8g^pEqIyrH^{i^Cu zZxCXg^W0{+mY67sx{jFWe*)d0p?@pT>0P0bPjWm&aOJ63=88r7*W*}3*{eKvH&bH0 z{p@Dx(#6t65-D|CA^z?Bd(=SZ^=Hl)wf;oZf|A|C`g0Gxgh|_CA<4a1*+=G1#5AfG z=s5Nw6ki$S{W^JkW;QTPd|5FaXY`%4u~EIjUXnKA(o52J2xm#U8l&5iR3$OyZ|Sro z)hS$2=gSf&=zNScwi{b98OudZ#@K2!c zvWx`?Rm<3JX!_}k_4>8r6}^6uaqIVN1iG$YmJW4D=zS8}b^TgOuv)(!6^qO-E3pW5 zb0q86)4;~puOEq>_3QhX=$7iTer>ncuZIOj)-OsX>(|qmM)lqH`V~|dHf1~@<{|6X z79A(+rxK^j`t^apvwppYN$*}E8tgl-UsX_G@%3xCU|}iR4Xj$J((q90*Dvv*8?t1v zs%;aL2fD0Zyg-nyd|kQ4Dl+R>f}lG2Si2ANCIQ#`S;t%o7QF)KqO@JRv0Sk@M~e6 zb54JmIGf6|t`~EAxkI_PmuFlcZdvjUu-d9OBND5JEPZn%n5A#FnDM3W-DNoJrSG5w z$kJED(x=uRz5ZPW3~SRp-th#h^)E>*(mzkdqNs1u z$d_1uB33k2K-NW9P}P_oa0A5f?~J=OCb&&sN;!kiG42{b zP@e=RL9VHOPyVNH*_Rbac24plY{f_FN%nH|Q1E_uc}BHft1|A=YZZRzmrdC9tK1## zig$U|mT2y=8YHV;M}JSN&dGRDdpl0j-m)jGi=0Q*$Jrd*PbzGhc}CpXl;T-(F6A@( zbFGI)CeteG6^=D(@uIDC>(lg1$CK|Cu7VVw3Q#4rSqv@X%>IZCuQJ1t)BRh=#VY`e zMD#bJNyy4YhmI%|N@txyE5^<&=|@d!TNiBqpg*~`G{Ubo9&y@S?9}) zF3ar{c7oTVctePiRX~Sq6?a#t2)^8z$`lQCzTBVMc69duJvvQ0or|?8w1TYPJIR6X znZ~>v(SQd*P@elE4UqK?(=Px*!Qk&(p6K3x1!Lz3$KU@fSf~APPV>HSpUQ!@T;qkv zH6qejf?w4~J&7}ZzpFfBLtLKmwF`pjE@734SfiF?eDg>p8RddeVFx4MmN5yW2q(+M z$&C5#W&ioj-3wywUH$2e{<<{oMOAJ2(xV1_pUytVP$Da&k;S==;2a3fyo;usf2w1B z%>6JpVd(X@@kTf5+p~u|#4v;NLo%(Tjp@e~N`I}3aaOfgN*bt*_m(BoX8y3Hu%R*q z??6N3xz+KrK7Gfpi@-c0@*G_J7!ELE3pUGluo-|A$~JzUB;^H@b4)=c8|#qETNskm zY+;}-g4lIZwD(H`MQOtP+r*36j;em8HD;P8SoC@Hb==8S4w&sxgq5#Nlfwu9jj3tI zg5{(^t05|LuUw#wrj^!sQ5+YhWUH$7&MQE0G!(eSReAHg0yxy6%4_Ep+#_biyaM1u zm1Xk^?iKT!^9p_<=E!*k_lcP~ui%AVm;>e&{1G$oPF2w|a3w|0S|*(C=*VRY#K>N@ zNQ@!Ns>S%mvUy@0v+NEr(wF(ga4egTQFF2Mh5Yq-7Y=?TuvFF!4z^?NO?{1|np<4a zZ%9!AnEB2m?;YV40aMP_WA0Z7Hfyd;i}YeH`zH)K?sXjRaN6fG(%$MCuj+{2z(#MN zEzr+u`?Vb31>UfZW5!+_=x?=h6!<0GS??8JvWK zg_&mELx`LSc2fyReri&Y4GuKJ6wR-dNqc>R-BC*ejvuP9FhV~|i>OimwsASD0Pxat zJ1UEt{PosRoQWkbt_$>%!vTGFTc0bIa=Du>qi)fzS#xN3-I~s4P;$o5FXkQ#z8+4Z zh~GD|jZ+~VCl6V(xnpaxG~1Z`DYpEbj%)E@;t8a2p!7{j_;`xA-9GUyY^ppt&>-c^ zua%N;u)FcblGBqPvSor|?k72lh1xiCxRV~{Z%>AqA9NPuvi5TdOT(o23zDjif#+&G z*IOVPp6Q)rRj?7m>%`}km*e+%dBrO*K25-nTH)9_%$Y>pjCZZT;N0knI_rdoK-f`{ zU&BT{G(So`ED<7ywpfII25Ay$1L~h8ST|#SXkNQaHyj8gHN`qx@a?co$OSz+5)?_`z3DRQ!ZJh9O&6$i* zhDle}fpiqu<7N3ermnxhM(c49uo4c4x$pgu5(XLqEEacT1^G*a1y;x0<78BH{n0I@ zeUNakv(LPcLl6X1(U?RPjqF-QnH^Q+j#p8-T}3oZwAYzk8>efMDjh5L5fLXy=4y7` z)0<<}B1_OyJXO9tQ%G-VO=LMaXEoV_7jwuLbZ5PkhM+;reWfaMDVL8!mBaDR#XshL z?R{O4qZw7VTt4ODJClDc)!8?h|uQ1x%(QMnJcmc6Bl$J;6!6B8%aSNQhbE zd|-$@cP^8DpWj#tzA z*vl|7&6?Ya7&}EmuxFBe+@dieu-3{$ET%MYTakV$gzNa+W`D!_BV27wj8vstn|`}F z7Q7|BrXV`%f?#T!+*=ovTrQ4dw06>39{<7Qs*FHcQH)F08P#N?#(6XUBDZoMg;*K= z9>cbPqzgoP;7%$==@MYzmK9h(0wg+`^a^zjlDG{X&tghi_NelO@{qC+wBu0@FL` zX0+?c(u%>1eS^C+Y0UlccA0ZVU(c#UWu7XAwCVIQN7APEC)!j7QM^sJO7BrJ1+-}& zvho#edI4CvwrMC^+VsEpr%hkImjZNa(-cHb_|-VbsT8L5Tb!$Mp+=@l}E=#9?0t-HjKAD z<*^Og5bacE%{RRM6=_9hemr;F$)$l7a8~0o3WMAbG)%s=G{$|eHQgu zm}182j91UbpRwxxg$RkUedz|^4bJIRRK2hAL=aUyRW$ctW@T^w`&Ruz(DYp~K9&>( z(Hli)?pxG{m7)4=@^WrwW$L+otNMU?QJ?5;@qP_&QMAyvPNR&)T86QtgIMM?!_kSs$n zL?!*oZvj=6Mh3>7+qZHIb&@NP4!f|1mHTs5&SO+LV=Ft?h3yr&N+=PHKFLNO$;3~x zpX&9Wk|cSTsbG?bulPiKMQ8)12t#h7|FvQ)T?hZybR~3N&EUrLjcBi$k?EPNUZct1 zC!2$s{LcNPw5AvP%e3M}Ydx=>Oe1hJe0uSiF;xRfsvAAVODjF7tzw(TrEqU7MYeqX zjhB+Aduo!r{!lNh5;h(04B)G3r*nn8vN!*It6o&XAwbSJ7){|h)uKfQJ+D@fg2WdI z>^HG@g6}Js2#ZEl=!=A^j%;VpjHP%~FA1!O_7>1ssMvU^@AQ(wwUw>>zfpCzhrUAR zj8!@*!A-rY6j-z$KE;8z=`SnkFGt53BwuOMOKS3@1Qd!6vs34(awM=-=_*shq!5)S ziGF66j$xOX7?OPCdesjEl_!Bpbq>jOidl0eIhL;Bl3p=LbYo?fV$1gYGdqRwO==w9 z9BPw0$g_5HcazkO@-Q5CgbFfT&RL zBGzeW)N_)m_IA*GM+QSj?OBd7;U6i00%5GxLefVrB>&hWKjjD=Q`6f*b8EU=Xm2y< zaGV_9g9jab6ZU|^*~va2VLzO_jkT?h3xaN@#pix_FR6TK;oYD8M|*w8Ar zl4VF10(I#BlC8wyg_sXd&uF0)o0vJ)s(%;?;ycH3_iJ#FHTpngG%JO5_isohn6bm% zg`TncAZiUca}Sg&DH5?&aLyaAd zTrC8nB5jThloW~1yo|RXz-k<;`Oj~R{-86Rx&>s4ra>ASI(6kjNmdh_FJliJjE?(K zs&%%)X;V1Y*T(l8(#FYT zsmAeP#-VLIksWiVHr{?mM;pI`{VUt}K84e6&IJX((WwKeJxLKv7mH}_t^!s z#_^6Aow-NS!#aL;8o#pfN*W7nyQJ}B>~`4e2rz8shA`xX25 z|FL%^@J&?tKj}eRXqi^!^r{lIQp7@0TUsh9{|4eqWSDzpVk%MC6H2!iKMhzH^d6qWqHzc-V!X_K^R1vdSBI(akm=FOYm z`@Qe`UGKeImykcCg36(J0N2YCA@oLI|O+t+ZFg#LbaRoS$IAS3D)nu_4(yYwLaI%(jWb*@`=@_Dg)6g{i?DP z&!H--@Pn$njl5KqSMeKuRW{}Ba9+rl9UCIRrXz3$_$9W{zy?X8tWc}593|C1zTQx! zHDak1%u4b&Skw=K#{{!pvD6E14OR$b%~alkW!+MFk_#b}YD>v%xvgnQBu8LPy0LJJ z1g=LbNZ-@iOm$V=ofnlIM_qZUE1aP9YF+sG4(RsAz<8)x z>LF?u5X!cQBK@5+%+e24ouCQbE?76?d)Ji}_GjO_u5gHW1sl2rX|ueBSz*}BhKo=G zLE4G8%FCe==QiLwhMR0xlbR;yqEsv#=zN{pzzMFwo6g5IryYszbW@pHqW6UILo4#G z2{ z0c1@tt=M7N;i2u{AOWhQ1JU-fg^ady&C*ZE+lf@4iGppMN1x^8ll|g2U zdC)&uewqwp}3?HZGHeX_j0>=Re9eb6lDOGM(mOwf?u!$s%s@aBIY zp_15N-BiZ&HRRdDGFfDJ%iST@Eshp_sa442>gPL!2VytO4z#ppz1)jxW?ukrViI-V zuc`KlthOyo(+W}Mx&=+kTuRrVQZmI~K z@PtBAuEGKt#4!#B+giF-NX8Vl3oM*tL!Mpl=P;%o_(=gFWc~{qn-=)YZDcC3MhExpY ziLw*Z!+hi<@BIsv`{%=j;d@`TGx+JWpUtDTZaO#AM^E;%1^8Y6I*)N8`KFbQxPun4 zmM4;o@C@GU@1REgFvWs0!!?mdIVq8oy8}nH8yER&8c)?lN`piiasz5UMp=2>Dv~LRHciMt;DZQyWStXP03zD z|B4>)Wr|nk{S;|cF2C|enyC%h--y}Q7)VI=UrAYm3gl{8FZz^a_m*|PyQ~a0{hO6F ztEI9K_<*KmzGwL9kyB2B!|yRT=C7fX-t0t5yMa!=f!2pT2(DDh%X1893g5^tiP=HKCX=m+-I4h}^SA3@*xER~`NSbDBEy}@yG zwjzzN@i<7ViW$J zrEY2X4qn<|f-5X{Ae`>S6u7d*oO>;nDA^(!U(Oj^RtDuMrA^Vf%w33rh z^HaP~uuG7B61d^VC?F&rDZ?>Zf%!ax-3ajuOE7JbuZHD@)U!i!f7BP=A4`^CpO?Td zC+$nk)7z7$vyz7^-+;TQ-M#x$HCTP|6O;X%6DA4EZ($|n2Iz`d;Ls6|I^o@$Nx;UQ zAy`wR@dx2GJTw>&@hphI1fc-|1y~l=df=LDto$+@)k^23Y8F7G}aof9x0Tp;wR_*|3m2^1!1iNKV1( zq$trDw0?L>dHL99KkD_yI1Uo%U4O;}ur z#4gkNqC+$yV@c;^ldVWrVzg-K0E2F9v3*3(VtbKnvX9C%*|G196C+p=o)4O)3}$Uvm0^2C?gsLeV>Jp9ikX9 zRwY>S4~|~O|jl}h^x_3#P9i#hN^K17W)f;L_)zvM2N*r zN4d6h7vnmsUejV({qg8!P#WY9ShdmyAT3xg>V+STyjr>T92IT7s2jWXnsV(A%C&{~ z(a2BJHS0y?bmBt_#$$m8MmH&O_ij~IL3i4Wbja~i#TD2Rm|>IYaxj8Gox5DHU(pu; zN->=qh$iXQ<5~;&ESKU1yU2~dB|_x7)jNzgWW#`^q4`A?sc(2}x`NahOV{|2yN6&O zvVtH0;Y)Z!XZdON1}yi|f^kH!4*4f^0Pos3fpWjS+rJ*ij1zm>n~!0Cx*>mY_fg`p zE8z%%gc=yX$@s4t{NqD(x>nvGcE|e+^gd{d)o`4tIS}P{z48_TZy~OB9K26`leeW< zxxHq2o}xQ~6&o6%^YjEGVzo+TV;y!K^?L{cCTjlk9Q;`4ARlKG;B>F??=~L(-7Vip z55N*^PpoIp+|QmFiqOz;J@HTgud@2|VUOs0l2wOd6FmUG>f^2&r$%0Yf_%bo)xLs( zJ&i&FC|=%jj-gU3e-HbOJ3z~XJ_55Tdm%PKF=y8lRV5_zm00|nW=QlBtOvC)sKFxH zwK79qMo(UdamcwA_T2_Ay#iCpyRqCB-kwTtPolSC{zEe*P z{1e4eMzNGkp@^7Q1&c6P!l28-n2B(5?Cr)QI%Xkl9D$#)_@SY|fStn(mAnpjvyjfg z25mg_e_p^vvmnI@wuKWYD`rmEQp~oIDCXv#2HV0Zxab`~{HwvvilttDbxDs}U4RU> zg$K~pYzx1@(OtEhQMHlos^JT#vk(2loKO{2>wa?4uFdU;=F6kD92||dBoalTJzJ<# z`?RT2?~{?1ZLU+SpPm#L*XDL?p-;GhEqu(4_0#BLUQnAG37~x;fHDK#kv>`&-AL+v zwzOrdTeD?-a*tZp2FyoL$|`AXS-*Feb#<1ztc2EOHSY=f3{8-PZ6Fg1m6Izdi$a6rO}2D?saCM#x9h1Ms3rkMiRq*l^yBOJ94$m#GONSA>h??X>-l~pTO%w${tD7I1PbRc zs_s@YUzlyh2Vl;isc!W+hiPL>y<*-lV#*uMjH9hN*)sLek&HR8ZdBv^nA}$(%k<#3 z4Z_>Nzc$vrZ}jSZq2iS6xVrxq7M3W{eG6P-V2qBd``d`aj8fg}6nj|5)%^%8T~Vt0 z?>d_9gQHjXugFaq5zn*`pEjSC0sr1i%Yd86EPc4RqJb-?3H0O-$sj1oAS1(U%rm5j z8VbvuO1sLIl3Y4nkZ$isK6i{Cmido^V+{EL)JH5eHZo^t;fKE!b}F=e$ULh9Hk#kwxK9 zEHZ$_LjeRoMG!QYBG4}G6QUM~T#=uvHo`#P1B`w1b#qkmO*iJcd?+Y2q2PQ_@L83D zfcS4fMyXs^Mpv2;F^duLOO=Q@AmU^wLRUATVy;|+Jh(OgwHsmeH5px(B z`!X`>f{>AoEod|r>GLNT0#z!O_)U6JqtGI!S>O}cmjV-5M>DsL{dHXqf%d|$w=tVb zVxP6JdeX+e6|~a2AXVhxx-s_)a^6UX;TZ&1TKd)LX+&gkM&JX4D6QACu@F8y?4X<} ze~4IVe1wC|ZpDrn&LoAJ55xH)>WN=T|gAZ3OLw(*qolXsEmxk-cg@ak!yU2ZxcJb_MPB5x$s zMuRt2D#6i?&MYqaSK~o~P9=1%LD<{T zc+h>C9f_}PE} zT*8lOgdfxV@nag{$A1`pO!LJLs~x*4YT&&9f>`Z?C{4Jbpb7v*#S#F?a;h?}PoWn~ zrxyTCrV*OlLuhgj(BvMV$vr-3GRcD`ZxEW8ZEsLVH{0y>)cfa>=g)&JYs1ABmmjwD z_s5og9&Cvlt#S?{HLxWQiYo2YjHUp#(EQluv1M9^V~d-STI8Ric5dw@8R@z5TcAfoUP@TUn6HHSYg(GP$62jEXX5B|J2GJuN?-_;x!1;L+b z9gjbOd_>a`n#eJ?V2)Ya<(RH;$(<^4%prJly;u`%Ip(SB14gM$cQP(H73G*~Rz!n0 z4kNmnc;i%&V~VGG_@iCq7_m5jLtcfA^kkM}Jn+rIt~bKD4w-E8WcgASfIK(8)Rs$%>D6J@nyGhK zJ>RX}$NN?qp*1bdoNyzw_gAp4NQTCvv2*2iLVnjRLeua16Mbut@3P{0 z)V_<&>#?p7K{A^9X2GI}CPW|7nuL5$6SpcwuyuB9p^uozVlb@7Ce8x4^U1li;wEEK z-!4Zt6!Qc#hsj0^jsvS5Sn*P0T``@#1QQZ1_erKfg1w9u%rsPu$QSHqt;u!e54Ln$ z9|sP^M(fum*se`SYvMbdV_-GNbT6>AQGVnGTA$7G87&>?u0n2uUnPo?85Ss2s72JW zbD1DLTvLhn3*0KONF0K;SQu&eD9|#WcrmU0XxS)6otEeRCNf&iLKRLTT5fAKU%oMu z(Gn}K`tjvVAHL+4jTr1<%Huv`F6)RD41?uBkYo_mMk^yXIghv#4&Mf=gp z!mY;X(f&C7l{vE3>y0XSTMr9rw*yRv(HGiI%aMpajWR7Q<0GTx7ML3HD4y; zLqJOs6nyzILYxlZ%+C#xQL_y3G3`vv@cVe{X}JPc%Ba&a2Uhw>#=JqOL_5>c7lYB8 zo5km7-3#4zCT?{b<>+7TW^ETuIeOUe$Xf1xRKeSF0=K$70J8*3+{aJ_WoPU3xxzb7b^< z41uH_Ku=$s20}KA)6u#Y6kEFc+B^8Fl*-PIjjfheZi3|%t@m(%v=WiE;|6~z`UO6+ zwj-U%+jdpj%BY(;cbfqp&y>u?sW9!f4)jXE#VqF%9a#%>MisoAjMe9UEq$=9wB+xIIxQz(7a1*AO*pA&*?Jx3 zN2nX%%joKZA6yw3HK(Hz?aZ0s_wm-#@|D}#ftHyO;;aspXlGjbVJWw)Svdo!8I^lM z+pdSNoMD>SMtJ@f_Mj-k^Huqgb%Lp=g16y>iP4AW4xr=9w?v(e8{o-{M9}DiDx4&A zY(13RHm)6@q;NoFl-vz9r+q2ej1CyAZ?~S7XW%oUKE&BZL`F+H!l&DtmcF=bn&=0; zo7&@EXguL1hRd5;tpMJ56KgwrTNJ=i{tDppxskQp2QWo>TaLEHh_(jU0d(w&k3b)Y zCLISBMMg(y%t=GX)`wrzAyOH1d^CU`BXpkxaOB^zBcmjbO0+LWhJ(v$-)=oE?;q6; zwEW%}87+TA@JoBs(ieMqtS9W_-uA=gXx$5rCj#P-%q$M6s3+DlrZA+|ySGz>FeKH9NH=Ivv84WywOj$J;B7gf9e}w5=s2q+>U8|$kjUux0|KH?5<0eC#_Nxd zh)~8Oz6%IH3gF1pizB1tD=;FpFD0A94k+qEzQP8Jx+q51J zcfbG@bv#^heq^mvj7qd`>umCqMWcmzVfUTZx6eSt-9){8UWw3p`^K=7w|&BHgVyT< zZ$j;gGJYMsAhI5kjViQn59t6pmLife%5^dh29b1nH=iwuwjtM{aii{)w zFtoiX*&+JC4n)jEotCCSk0)8TP_>no8xd|3Wmu(`FrqGxU&$5{{qZ40i1d3S&?z(@xl(EX1IO4^|Z{zXGEQr zuSRH$eY2ngXz7ck01;rLhL9v^j9+`)589SJg4o_#-08j^T zCj9be6ijE?cB!bw8M*5mTk1KR;h&Pj=kk}F_YYF|or2reJa zX$M-~)h9Aq-h)cCH!WMj(Dt|&6i=GWt0`?$Aj%b&M+zuS*TYf86S_eH^MhR?Yr40g zD|wp^^J+??9wFFFKZr6d9hXI&mT6~4M$1xE;UuDE>jCDw6cQ}kJNsL9XpAnsHE@8Y)0%SO%DykQ7c}`(_?+uW9M2w#lF_x zp(*iXsrBH*Qodpv?IGDfAJeoXrBv+kjfL=Ni%Yf}4mRpiUf2Bf@j5IF<=rP?G(Se& zry096UdYo16MM{(qqyP=%NcSthVJzmwozoSU-r421Fi_!$vsj?hm;;WEmzNLBfv0v|+`A;5h8lihX|_Gm+%02I)*#c^lgW9Kk{-HP}YL z*4b!(Fplry(wCjMj58h+J0X#6Nzqpg5L`95eRSP-Xl|~e676pvwyiK_c8Z=`RcEc< z<~+|n?D@i8?(fZ z$>lr5+`J6&a(QEC&qwQi#z&vaSLI+iElgC1U!IOPI}?|8#!tmJ>@l+xpSuH#b{_rF zAl2Ki+g8@7)M|^hW}CB*w^lfR#d)SuE2=fl8?d!^gR5Zk%pAOdm+H8;*4fX(@`MH3 zxZl_0RvQbxH%N!U+g<8wK8>?BBzI{vxj^H1=QF4dR$h$Pmmd+k>GN{Lbh*2?()a$f z&!s=IKH1WpRv>mCF6Pk8f8x zDbqB5W4|ccznbl(p>(c=U%vnvqkkE5cbIK|)6q69M%p;zxYEzYCVNts~&P>M#g{3{&RV?F#*u>Fc0 zT*b+t={Q-Ljv{c9_Z3d~?Ed)a%I^ePxE}c@jZ=Q7Y*T)x?NNTGXL9Vm*jM?TqenkQ{`uF^ zud;*70qkvyWI3vTP)QPsr1xZ3A4ak_eM`CSF(iB8pFg@@0h?QC`<8;;+@fmqgHr2H zgJ*(FYqDz`uhDtI9?trIl;8_?af_ZqYQ^37SUfPZ3$pRq)eft28zm3~t~l;@yT&m| zx&1M>=ytk29mMuNy~bgr+f+8s63?<`nVE*NFQayGT!hQm8YqWV@m!W?ylxP;Xe^Kt z*Ynu*MD=B{vIcKvHRUy9RmalJu0RtnfFD9z6huaqB4@bqKHkNdCy?GEP!=zz2uBXug@;REHU z&$Ho!KYEmZ_YTzdedx3tdVd5eMCg}1IFMsW#J5T65{8h{N>l`BO24}j5!<07JWNma= z2H~Eyk)M%hZ5%hN3tzBt#`$Qr`)Bte{^YaQlolu$!}!fD1DK^GzF_OjJmM7$hdlSz zdPoAiw4q=dFV#XC@R0?GmlSyb9M$D}$3E-}XqJ>Q1@}&vrPp-_K$rKK!_t;iTJf>i ztu((UgoN+49`?NU2NDwMn2<0WLc%3JLIQ;m_zDSi9wA{12?=#t@n(JbkBX2mS`iXT z6d|Fm&$rFW2sb4|cy!AMT!4(AoI^&Sf)yFzCJbjxo>1;VMtD|t2sOjX@h?yXX^$kf zlS%j+BA%2IL#$GvC{TrEhv*-sz%}$QAx;1ArDHAlmjBr^SR`CJ!|~_u_9?s7;{@vu zIiybN?)Bu8x0gUG%BUjsoyu+I97Y6H9QEc2c1;Q>C-7WQF8IAGcFmU278>}pLpXa1 zNRKP~1?;dS3-*N?fTd?&f$g#oU+bfGG`lyWLE;DLs}5pWdVWoNiQSg9;;qX0PfB(zS3xqBG&0L1ouJ4UskTN=SPcH-!H+btbbxwA z?23)(=B5ZoKe2Am+eT$s=jCWP`vE+>z9fb%uH za5X*Td8NL5z5AV%an%6lL)<$9oQqJ~PF(qT44O*4Z%|TkT)BXh<8mBmv3>VC_kOF~ zdzad0+d;~^5jg|9BW*cA?^hxqn|!jEEKD5WV8iqPhYRDcnbbx5h!X2(NAcal#8El& zcGx9oAHW3b#H{^wMP@A0zYeYjQ^5&KXF>WfAqO2M@X|WcDnt6go z1QrzO%b+xO6v`~SxP;9a|AKMF(Dtem_GlT-GcDhe`Wjbw& z*mI0~i$>{dZ1j*rJZPvoPCWRYmj{=E#^R-n2Y*45+D@F#js;3P{)b&X2L5{mDZx59 zM(UvdU=JxcknO+=~!Dbx(SHr>N(r5;`*{&N&X!fW>+coDp|CwMi8^-$|1d2lKi zB~^YIu>;OT*#Oq@=xffThTI=d5-T0cEXoNMb!yepp%^3Zmz@z#qO!y0Md4>0V{md+;d>76pPeh7RY z%Kg9G=aM>w&#(a&lkvBoT;fm+JEMc0&w)dugPl*Jd$xp~OS`Gq`7IKs2X;!>wstJW z(9Eet$>eWzV`psq4txCW#YKw;Ghioai3i7j0XU@by9W}d2M_*=E9!O&b~aT4bZ>m{72=%oA>zeU?0-ISLWdLiV|L$pDuEOwMY-k#|V9? zE#suu!j-teUrP_4lorM~emiO3Ob=g(h>g(W_-Bx?lyUqxNdVE-!@q>22cA2CMsI3l zU?w1@hig9s!=%dV5W0YIJpFicm=yKT|KANSY8wE=o~nP(i|LFlRK;o&pxNv@5P zZ9Aq5MZ=bv78flnbp`0-fmr(AuT?Bv=Bo>Z&yp~4o|G2N7%xW4uD;NJH!eY&>;SM>BN zAbLheN4f;4+>(ye@R^FGU&4lUdSPiy#*B)-{tCboych+4`HL7le0ed@Up^Eg5VIM5 z2}7!f7i0c%Su3`}Uw$3T&>_e3dgzzRcz)t5q(b`3%V5@1^z`18KiYcw5QM9O*FyQr zJCmV3Ri1@G6ngquuzzx+GLzLxCm8%Ypl z&dIQ4wuGH^B;t~ zeZ0-_ZkI#5X~AE9#Q{`+jo-I_5*xo`{_-Yz_!}5Zql294Kdx z{W~i9_oWER1rJ8SUw$^w*_Q_c?dl6ws62QUX*2G4^_X3~ZE@>^K+KTi_~nq8lyQ6{ zMxxN;_}lA{i;d$ONCJrVIQ}n$e}m^j`OCMz1BOYJpH%GX2b$Hx+w3pD132t6jtAP+ zZzR7x8^@Qv=N-qxXWWxq8;|)YqvfOA2YE0$Sh_Vp9}mRR>EKwVk9UU{e|lkQY+R4Z zxIPlfM|60x2x#5XxV{i9$arx^!|BG0zoNff!cY@(T(5_UtBmWb$P*sYzJ6yda`HpIsDn7_PP ze|aK2hta{(qXBw);JAL9+ec~Ia=Kw@Y+R4ZxIP!41zwDTzx+N79=_vxpuhY)4CicI zFN6N$kuk$@Kc1}7n7`)y^7CMZ4mqAbvk{q?y?x7iq(YA8CI3b)Hl81>Ln_+ic^VoX zycWt|zK0C$sq!!iKTDLqXm&hrv%P&ahG`!?T@w)3{>`iI@w@=Gf|$QNwl+sV+}jXv zXmqgiiu#tZ^JQX1@|Sl*Z#X@$Gd6xlW&BBcCWpCmqQP#KL z`0axEp@s3gD}0lRK0XoBPi*{-jo$&|_X7}*ql29mbkvrxbHWl8JHJ69Hh#y}ck{%% zHA3sS31 zx!Ab=$nTMg_PGAWs<6iOx0bVU{W!i5`g!4>+HG9F84TINxZWG1xuTzUfou^Q*JEp7 zH#5I{C)gu8JE~Fu%cAv1363He>k0ycg?F0odR^Z4M)LG!c0e z++!k--etBY@PvFOsk&I&#Y?7~iUv{?c8H_U-F(pRGoT;0thTg<@nC6uL#ZKqJ8!=h zBGL}*E1f^9s}K5dtLnK`HKn{Q-elzo(|INvy}$s_oLz0&evD+KRzM;9+}O8*=&^Pc zVmut{uOykBOxR?$n@WsTyG+tTvd?(?scNFBhZyHE(TogcqS+x1P)#(oI*zY7n2?ZT zsH!i_pOpq#QFE^ZQR4frdT~=^o;Rm`}HGcVlqpf{;rNyCi_`D8D#~j z)+}wn{)IVM|3(qGim>Iq%SbX7Z#}?zJ`&YAP(bl}EPqypZ~w10aPL&Z_@os`z`|0l z5U}cU8QKd^Mqz7qzt2{`tdN${gi_udtlmzo{#`x2V zI7%wGZP6UD|ERd)W3gEA9|_EXM8%tqeop>_8U$p#;&@!mk$sE4d>5ozJIyK*(v2UhOsxbVD zv390V68bY8jq!H6j~6-CpOv_wW<2N7!!Un4FUam27v*EGrV!#F{weCgKK?0F2l=OB z^^C5+FGkP*b$UkT*P(9j@1LTc|Lgguy!;#c4#hteYY!H5-$uV@jIVy}eoouLJn|6R zo;3Jo?U^QNw}D%An3rTh`aahsNS!3%tjB5`sYhzGVrQHR);Y-k=t_8Liy(EE zpC7l+Wj*E+&yu>>d95wp+IT|j;#yzu%lv9*ytNAo8L!Ksy~6VZNz}nRKVK&Z*0q`Z zZ7t1#Qbc*>$m(s6LcPyc>dh@<75{wtKGzDDOQR_*s0mX0l~JiZ>i*!pis92XUzcu_ zGW1o)1^|(t+=3Q%y1-s@iWvVz)H$4Vyh$tB!|Jr}KiFS(q5tlM*>dWMZa}V9PMu_++!qnU z?`tmIo@M*KGlKUhO;B7>EykN{U_v4~{?w*va=ngE(6}@CrgN(inv+b;X5-VTozcRT zybh@>io&t+d6>IV$(se6V(YN6sb%hx6da&q%jHz^c_?adctt6^W6a%Qrf(dXj{lx! z+v5~Mh##8ShT0_?Y$G!bl_Pbyn}u{vDGqt~7jV(cIC0?w%Br$0__xMv(+0Av_XCh( zJbS9V7oV9&-#oZ&-%JE()p!5e?+?Gd4YtRpfD@WW-&TEpsP|jzUABb>(li>|!Y^?2 zvY%QVu<~@q(Y84)R?de*+ohgOD%Qbt`nBI5YbOOiBkRv0`&7H)%E{7ZrxMK~=x4FE zQ$$@KnISxWw`G9JYe)tQ`l}x$Sigq+yjvC01Zji(+QfaX$|A^bYe@IHr3v`f@mZQW zJ_rAK8eu&wKN=*{H56RMap`fmO#(NU!S`Ha9rEhlE*gym*AxHsP8a0M($Wo97oTB- zB|UXn=BDC=J-tqCAUle}Fc$orWPe!1^Nkhdy=ythS=cVGm0 zJ4KLp&+zc+@MZ*g7e$cw#t8EEjUexdVc~zpqulY-ZVlJdM~@x_yu! zZIzFWr)xUJ5Qx#|_9ml`@+v7sa9#9|C(<-H^~GTt4dmYyF*>u6Apo<>=B8`NI*HK` zAD|8dD1(`}SiMna0bzzxihK<#<`RrE@q#T$kk$*gKU*N!6Gp0Ii*^l_ z3Hybp>pA8oel&k0f0JN;T{q!pmrGdq^$Vz|ASIT((M2QV!o*tf7$`)8leF6`-Ir{Z z@=PE{CdeU3BYGNhzc5Q(xSOg4X;h}Z>X2FLRSXhHgK;z6OkXnsUt@+@%x>0Y8f=qv zdPC(ToxzNhK&K^iIu;7zB;7bVOri5>rQCvw>3FZ%W-ntuqji~PY9IjyNLVgjs>D@! z)ljO0eGbynF8NZN6-#wy+e>u8Bz>f>+9IC-;$yIu?CdLYH_6w+(rdOqtE0~}Nw?r* zW@2*t=lt#bZT$G#Z*8Vk{n#k16SR}#HI)Gcw$>&nKE0=4o0B<4q4;9KkKp@XYmwk@ zq25GrkQxLBrHSCdsBHy_H8==#Fw>z#Q;OqQN>0&O8R@|7?l!42=nNVhrfFIxy4y@l`kN)0z2!m|bAZj>>M4b8l8?Z_IU>r6RETF_^ufSFyIpD3$;?XDIxR z2mSedKJoi};&*rq3^;(_=QDnvPy9Zg_Y-v!%~3cnkO-$(0m%xEX@`}@T2X50J3 z#b(=+&)~;ap&^4wMFNiUe~NwE=KO0wbm|H3D?Q;uebrX^zZef#)38rOPtf0_G!4-J zJ)!-Y#?xP#X$${;@X=y-TLcB3zoXW_Za-MSYT!nle+&uM4<5n*<<}2B7}J6MAQ!z* z;r$fH>)-`<`URgf=gC8Ev?kc(-#?1}?rxKy{o~9Vqu4(%6rh7duWM+p_U#%8g+aQ; zZeWF9*SKhOhjtCZs{~Zj-A*&nRo&^Y!C&t50iX2s?mQS3LyhI-FS(m9XqOs|uca>a ztB&Od@Ahq`TL%Xj%LnoSo$A3G{5n;;jpb#Bwbh>`+7mJol9+sOs+|kccF9Htbnb67ZGJ)aC4k|wvB znWaeoP}^70mjr7*AzA<>h)@rb6h%e;3|*RP68w*u#1LE{)e5%Gbwhn@ zW>DZBJ4S{tDb7%pT&2Z^6=zj#tE%M(Zx_1=u9_-s)wc3#%eP44R-QAZpKmh#TbLsrsT%SDAUOGcLD*d#8ry-l?~rRUN+_8W~=sXk^}RSIW3C z3T5mV+k8DxiE8eh2K!m{!E3Q;lTwc@H#c8KxZhG0g)%y|>02;61nm-sdaTF&2VduCBaa|$6*c%0}cDgIO^?) zM5@wO#-X=Y#qm}329`8bRhKtdzHOoBd;4nua(Zv5DQ0JJ+iqOl(iVmWPVP#7;Jj-Q zfRkiX0B3OHj{9A(dC{l9&%o*qOA@y%PO#R(=b&7nxD)@+66}0Gx&oY)^k+The-qag z`xWeEsKRawCs$n$8O>hQQ!!oPX*H!*f&DBew+l*Y_7`IuyN?C0{C-0{=e~cEKkrM6 z;Nxef1)